US20110252312A1 - Real-Time Collaboration in a Hosted Word Processor - Google Patents
Real-Time Collaboration in a Hosted Word Processor Download PDFInfo
- Publication number
- US20110252312A1 US20110252312A1 US13/085,325 US201113085325A US2011252312A1 US 20110252312 A1 US20110252312 A1 US 20110252312A1 US 201113085325 A US201113085325 A US 201113085325A US 2011252312 A1 US2011252312 A1 US 2011252312A1
- Authority
- US
- United States
- Prior art keywords
- model
- document
- mutations
- computing device
- server system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/143—Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/186—Templates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/197—Version control
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
Definitions
- This document relates to systems and techniques for managing a browser-based word processor or other form of document manager that interacts with a hosted server system to permit collaboration by multiple users in a document.
- Cloud-based, or hosted, computing generally involves executing applications via a web browser, and obtaining information for the applications from a remote server system or service.
- Various applications are available from hosted services, including search engines, maps services, and productivity applications such as word processor and spreadsheet programs that run by loading executing HTML and JavaScript code from the server system to a browser running on a client computing device that is remote from the server system.
- Cloud computing provides real advantages over traditional desktop software, such as the ability to access documents from various different computers and locations.
- Web browsers do, however, place a number of limits on programs that run on them.
- web browsers may offer programmers HTML elements that are very simple to implement but can be rather inflexible.
- a browser text box can be a simple way for a programmer to acquire textual input from a user of a browser, but the manner in which the text is presented is relatively bland.
- browsers do not provide access to native text rendering capabilities, do not generally permit much flexibility in positioning images on a web page, and cannot natively execute other functions that are expected from a full-featured word processor application.
- a server system can share a model for a document with multiple client computing devices, and the client computing devices can send changes, or mutations, made by their users to the server system regularly, such as multiple times a second or for every keystroke or icon/menu selection.
- Each of the clients and the server may have complementary rules that they apply in order to resolve conflicts in overlapping edits, such as when one user edits part of a document at substantially the same time that another user is deleting the entire phrase.
- operational transformation features may be employed in browser-based word processors so that mutations or changes to a shared document can be made optimistically by client devices, but the server can ensure that all versions of the document model converge toward one true version.
- each client device may cache information regarding the locations in a document where the device has made changes to the model, and the nature of those changes.
- Such change information may be regularly uploaded to a server (e.g., multiple times per second when the changes, such as keystrokes in a document, are occurring) that is coordinating the word processing applications (or other applications such as spreadsheet applications).
- Each client may maintain a list of pending mutations that have not yet been sent to the server, and may transform such mutations against any mutations that the server may send to the client—e.g., that started at one of the other clients.
- the client's list of pending mutations will always be valid for the document state as of the client's last synchronization with the server system.
- a client may also send information that allows the server system to identify the client's last synchronization, so that the server system can transform the client's changes against all changes that have occurred since the last synchronization by the client.
- a rich browser-based word processing application can be provided to users, so that they can receive the various benefits of cloud computing (e.g., access from a common browser interface, access without needing to buy and/or download special non-browser application, and ability to share documents more easily across the internet) with the power and flexibility of traditional desktop applications (e.g., WYSIWYG presentation of document) and other features, such as real-time collaborative document editing among multiple users.
- Multiple users may also be able to use their client systems on the same document, so that wasteful individual editing sessions may be avoided, or conference calls in which users waste time explaining to a single person who has control of the document what to do with the document's edits.
- a computer-implemented method for coordinating documents between computer systems comprises identifying, on a computing device, changes made by a user to a document having a model stored on the computing device, with corresponding models stored on a remote client and a server system; generating from the identified changes, one or more mutations that describe the changes and a one or more locations that correspond to positions in the model where the changes are to be provided; receiving one or more mutations from the server system and transforming the generated mutations using the received mutations; and updating the model stored on the computing device using the transformed mutations.
- the model stored on the computing device can comprise a one-dimensional character string that includes content for the document, and a style map having pointers to indexed locations in the character string.
- computer-implemented system for coordinating electronic document changes between computer systems includes a document model stored on a first client computing device that defines content and formatting for an electronic document; a layout engine in communication with the document model and programmed to render the document model to a document object model (DOM) that is accessible to a web browser that is executable on the first client computing device; and a mutation resolver on the client computing device programmed to transform mutations made to the model on the first client computing device that have not been transmitted to a server system, using mutations sent to the first client computing device by the server system, and then applying the transformed mutations to the model on the first client computing device.
- DOM document object model
- a computer-implemented system for coordinating electronic document changes between computer systems comprises a document model stored on a first client computing device that defines content and formatting for an electronic document; a layout engine in communication with the document model and programmed to render the document model to a document object model (DOM) that is accessible to a web browser that is executable on the first client computing device; and means for resolving conflicting time-wise overlapping mutations made by the first client computing device and one or more other client computing devices.
- DOM document object model
- FIG. 1 is a conceptual diagram of a browser-based word processing system for collaborative editing of documents.
- FIGS. 2A and 2B are block diagrams showing components of a model-view-controller implementation of a spreadsheet application.
- FIG. 2C is a block diagram of a system for permitting collaborative editing of a documented by multiple users through a hosted server system.
- FIG. 3A is a flow chart of an example client-side process for collaborative editing of an electronic document.
- FIG. 3B is a flow chart of an example server-side process for collaborative editing of an electronic document.
- FIG. 4 is an activity diagram showing status of two clients and a server at various steps in a document collaboration process.
- FIG. 5 shows an example of a computer device and a mobile computer device that can be used to implement the techniques described here.
- a client-based application that runs in a web browser, such as using HTML and JavaScript code, may download a portion of a document model from a server system that hosts the online word processing functionality.
- the application may create a user interface with the browser, and may place an editing surface on the display of the browser where the body of the document is to be displayed.
- the application may intercept keystrokes and other inputs by the user and may determine how the inputs are to be displayed by placing them in an off-screen or a highly minimized HTML span element, and measuring the size of such an element to determine the size of the characters when they are properly displayed.
- the application may also display a synthetic cursor on the editing surface and use the measurements from the span element to determine the location at which to index the cursor after the user has typed a character or made other changes to the document.
- the changes may be added to the local model, and may in turn be added to the display in the browser by rendering the model or the changes to the model into a document object model (DOM) that is accessed by the browser in a familiar manner.
- DOM document object model
- FIG. 1 is a conceptual diagram of a browser-based word processing system 100 for collaborative editing of documents.
- the system 100 revolves around two users, named Chris and Spike, who are accessing and editing a document together in a collaborative manner.
- Each of the users has a similarly configured client subsystem, because each has individually accessed a server system 104 and downloaded to their browsers equivalent program code, such as in the form of HTML and JavaScript code.
- the two users in this example are currently viewing and editing the same document at the same time, and the system 100 is in charge of coordinating such activities by the two users.
- the system 100 centers around individual copies of a document model 112 , 124 , and efforts to optimistically update the copies of the document model so that the server system 104 and the two users are experiencing the same document, or are at least converging quickly (within seconds or less than a second) toward the same document. Rows of equal signs are shown in the figure between the document models 112 at the clients, and the document model 124 at the server system 104 , in order to emphasize this effort to effectively match the document models with each other when overlapping edits are being made to document model 112 at Chris's machine, and document model 112 at Spike's machine.
- the document models may be updated at each of the machines by applying certain transformation rules to pending changes, or mutations, that may be applied to a model.
- each of the clients may be forced to transform their own inputs to a document so that their changes reflect changes received from other users via the server system 104 , before applying those changes to their own copy of the model 112 .
- the various subcomponents in each of the client and server subsystems shown here provide examples of components that may achieve such coordinated editing of the document.
- model-view-controller implementations where a model of a document may be maintained on a client, the model may be rendered to create a view of the document model which may cover all of a document model or a portion of the document model, and a controller may intercept inputs made by a user with respect to the document, such as mouse clicks, keyboard and trees, and the like. The controller may then process such inputs to create changes to the document model, and those changes may then be reflected in the view when the updated document model is rendered to the view.
- each client computer communicates with the server system 104 through an interface 120 .
- the interface 120 may take various forms, but may include functionality for providing the server system 104 with relevant information needed for the server system to maintain coordination between the clients. Particular types of such information are described more completely below.
- One type of information needed to maintain coordination by the server system 104 is revision identification information from data store 122 . Such information may be used to indicate the status of the most recent batch of mutations that have been synchronized between the particular client and the server system 104 , so that transformations of mutations may be applied in the appropriate direction (i.e., so that it can be determined which transformations “trump” other transformations) and appropriate batches of mutations may be transformed against each other, whether at the server system 104 or at the clients.
- mutations may be provided at the clients by various input mechanisms such as a keyboard 109 , a mouse, a touchscreen computer input, or other appropriate mechanisms. These inputs create the mutations that need to be coordinated by the system 100 .
- Such mutations or inputs may be captured or intercepted by a controller 116 .
- the controller 116 may use such inputs to identify and generate mutations corresponding to the user inputs. For example, if a user types several characters at a particular location in a document, the controller 118 may generate a string that indicates the characters that were entered, and that recites a position in the model where such characters are to be added to the model.
- Each client may process individual mutations and submit individual mutations to the server system 104 , such as by sending every keystroke received at the client computer up to server system 104 as a mutation.
- multiple mutations may be gathered together and stored as mutation lists 116 , or mutations batches.
- Such caching of mutations may be beneficial, for example, when a user is typing very quickly, and a number of characters may be processed together to increase the efficiency of the system 100 , while not slowing down the responsiveness of the system 100 .
- a client application may begin a timer, such as a timer set to expire in 200 ms or a similar time, and may cache all mutations received during that time, before processing and uploading the mutations as a batch.
- a timer such as a timer set to expire in 200 ms or a similar time
- a mutation resolver 114 on each client device may implement various operational transformation rules and techniques so that overlapping or interfering mutations may be processed properly, and so that the models 112 , 124 in the system are all processed in a similar manner so that they can be expected to match after the processing is complete. Particular rules or techniques for resolving different batches of mutations from different users are described in more detail below, such as with respect to FIGS. 3A , 3 B, and 4 .
- the document model 112 may be updated, such as by the controller 118 .
- the display 106 of the document may then be updated so that the user at the appropriate client can see changes that he has made, and also changes that the other user has made, in a relatively responsive and accurate manner.
- Such generation of a new display 106 may occur using a layout engine 110 and a document object model (DOM) 108 .
- the layout engine 110 may be programmed to process the document model 112 into the DOM 108 .
- the document model 112 may take a variety of forms, including a one-dimensional character string that includes the content of the document and that is supplemented by a sparse style map that represents formatting or styling for the characters and other items in the model 112 .
- the layout engine 110 may parse through the character string and apply formatting from the style map to generate HTML that synthetically creates a display 106 that looks or appears in a manner that the user intended. For example, each item in the display 106 , such as each character in a written document, may be generated in an off screen span element using appropriate formatting, and the size of that element may be determined using standard HTML elements.
- Each character that is processed in this manner may then be placed on an editing surface of the display 106 at the appropriate location, and the location for the next character may be indexed forward by the width that was determined for the previous character.
- a defined width (equivalent to page margins) may be applied for each line, so that when the position of a character for a word exceeds that width, the position for all the characters of that word may be shifted to the beginning of the next line (e.g., implementing a word wrap feature).
- a cursor may be shown on the display 106 at an appropriate location as determined by the controller 118 , and may be a standard HTML element, such as a span element having a narrow width, and rendered in a background color that contrasts with the background color of the display 106 , so that a user may locate the cursor easily.
- the layout engine 112 can perform its processing in this manner, and generates, as an output, the DOM 108 .
- Each user's browser may then use standard techniques to convert the DOM on that particular client device into display 106 for interacting with the relevant user.
- a pending batches storage area 126 receives mutation batches that have been submitted by the clients, and holds them until they may be processed.
- a batch processor or mutation resolver 128 is responsible for applying operational transformations to the mutation batches using rules or approaches like those discussed above and below.
- a server system 104 may resolve a newly-received batch of mutations from a client against all mutations that have been received since the last time the client was synchronized with the server, so that the new mutations from that client do not take precedence over mutations have been received previously from other clients.
- a revision log 130 may be used in order to perform such comparisons.
- mutation batch is received from the various clients may be maintained in the mutation log 130 , which may include identifiers for particular mutation batches, or revisions, received from each of the clients. These identifiers may then be used to identify or determine all of the mutations that have arrived since the previous synchronization with the particular client, and the identified mutations from the log may have newly received mutations transformed against them, in determining how the newly receive mutations are to affect the document model 124 .
- Particular techniques for applying such transformations are described in more detail below with respect to FIGS. 3A , 3 B, and 4 .
- FIGS. 2A and 2B are block diagrams showing components of a model-view-controller (MVC) implementation of a word processing application.
- the word processing application for example, may be executed by a web browser, such as the browser 104 shown in FIG. 1A .
- the MVC implementation provides for the download of a model from a remote server to a client, and the rendering of the model into a DOM to form a view of the model that may be managed directly by the web browser.
- the controller may intercept actions, such as clicks on icons and keystrokes on a keyboard, and may cause such actions to be implemented, such as by adding typed characters both to the model on the client and on the remote server (e.g., uploading changes or mutations back to the server, which may be programmed with rules for integrating the mutations into a master model, so that the client-side model matches the master model as the user works).
- actions such as clicks on icons and keystrokes on a keyboard
- a computer application 200 A may be configured to display a word processing document 202 .
- the application 200 A includes, controls, or accesses a model 204 A, a view 206 A, and a controller 208 A.
- the model 204 A can contain a representation of the state of the word processing document 202 , including such elements as character data, formats, styles, paragraphs, sections, breaks, lists, tables, images, formulas, and the like.
- the view 206 A can represent a rendering of the current state of the model 204 A.
- the view can provide a visual representation that combines the substance of the document (e.g., its raw text) with formatting and layout information.
- the view when displayed by a browser, provides a form of, if not an exact, WYSIWYG representation of the document that is defined by the model.
- the view 206 A can be used for presenting to the user visual information that is associated with the word processing document 202 , such as visible user controls for the application (i.e., chrome) and other word processing data.
- the controller 208 A can respond to changes in the model 204 A or the view 206 A, and can update the state of the model 204 A and the view 206 A. As shown in FIG. 2A , solid lines between the model 204 A, the view 206 A, and the controller 208 A represent direct references between components, and dashed lines represent listeners.
- the controller 208 A can modify the model 204 A, and can in turn modify the view 206 A either directly or indirectly (by causing the view 206 A to obtain new model data and render that new data).
- the view 206 A can request re-rendering of an updated model or portion of the model. For example, if a user of a client device is only one of multiple users concurrently editing a document, characters and other edits by the other users may be passed to the client device from the server system (and edits by the first user may be passed from the client device to the server system), and the client code may add characters to the model in near real-time, and those changes can be passed into the DOM (e.g., via rendering by the view 206 A)—so that each user can see the edits made by the other users very quickly.
- the DOM e.g., via rendering by the view 206 A
- a computer application 200 B (corresponding with the application 200 A) includes, controls, or accesses a model 204 B (corresponding with the model 204 A), a view 206 B (corresponding with the view 206 A), and a controller 208 B (corresponding with the controller 208 A).
- the model 204 B can include one or more document models 210 .
- Each of the document models 210 can represent a separate document in a collection of word processing documents, for example, and each of the models 210 can include elements such as characters, styles, and entities. Other forms of documents such as spreadsheet documents may also be represented.
- Model data and elements may be provided by a master document model 238 that is stored on a remote server system via a connection to a network 236 (e.g., the internet).
- document text in the models 210 is associated with a series of characters.
- the characters may represent raw text for the word processing document 202 , and may also include certain reserved control characters such as characters that indicate the occurrence of a break (e.g., a paragraph break, a page break, or the like).
- each of the document models 210 can include a one-dimensional character string that includes document characters in an order in which they appear in the document.
- Styles may be used to store information related to the presentation of document text (e.g., the series of characters).
- text styles may include character formatting attributes such as font, font size, bold, italics, underline, foreground and background colors, alignment, and other such attributes.
- styles included in each of the document models 210 can be stored in a sparse map.
- the sparse map can include markers that correspond to changes in styles in the document and pointers to positions in the character string.
- the pointers for example, can define style runs between matched markers by specifying locations along the character string at which style changes occur.
- the markers in the matched set may be arranged to be tethered to certain characters in the one-dimensional character string. For example, if text is added between two paired markers, the pointer for one of the markers may shift by an integer equal to a number or characters associated with the added text.
- Entities in each of the models 210 may be used to store information related to objects outside of the document models 210 , and may be pointed to by references in the model such as in the one-dimensional character string.
- entities may include objects such as lists, tables, images, and the like.
- the references can include object identifiers and pointers to the one-dimensional character string (e.g., from the sparse map) indicating where in the character string the object should appear, or identifiers from within the character string that point to the entities and mark the locations at which the particular entities are to appear in the document when it is rendered and displayed.
- an image that should appear between two paragraphs may be associated with a special character appearing in the character string after a paragraph marker for one paragraph, and before the first character of the next paragraph.
- the view 206 B can generate one or more view items 220 that may enable the user to interact with the application 200 B, such as menu bars, tool bars, context menus, chat panes, dialogs, other chrome, and the like.
- the view 206 B can also include a document menu 222 that presents information and control options related to one or more of the document models 210 , and one or more of a set of per views 224 .
- one of the per views 224 may be associated with a corresponding one of the sheet models 210 .
- Each of the per views 224 may include components or controls such as selectors (e.g., cursors, selection indicators, and the like) navigation tools (e.g., scrollbars, document maps, outlines, and the like).
- the controller 208 B can include one or more controllers 230 that may listen for and handle user interactions with one or more of the view items 220 .
- each of the controllers 230 may be associated with a corresponding one of the view items 220 .
- menu bar controllers may listen for and handle user interactions with menu bar view items (e.g., relating to various actions that a user would typically take from a row of menu selections)
- tool bar controllers may listen for and handle user interactions with tool bar view items
- context menu controllers may listen for and handle user interactions with context menu view items, and so forth.
- the determination that a particular event has occurred may cause a particular controller 230 to execute predetermined code or otherwise carry out a predetermined process, such as by updating a local model when a key press is received and uploading information about the key press to a central server system.
- the controller 208 B can also include a document controller 232 that may listen for and handle user interactions with the document menu 222 .
- the controller 208 B can include a set of per view controllers 234 , where each of the controllers 234 is configured to listen for and handle user interactions with a corresponding view in the set of per views 224 .
- Each of the per view controllers 234 may include various controller types, such as key controllers for intercepting and interpreting keyboard input, mouse controllers for intercepting and interpreting mouse input, and model change controllers for intercepting and interpreting model change events.
- the controllers included in the controller 208 B can transform user-generated events into model and view mutations. For example, based on a user action, a relevant controller (e.g., a controller configured for handling the action) may receive one or more events associated with the action and make transient changes to the view 206 B before the user action is committed. Then, based on the event properties, the relevant controller can construct a command to mutate the model 204 B, execute it, and send the updated model or just data for the particular mutations to the remote server system that hosts the document model 238 via the network 236 .
- a relevant controller e.g., a controller configured for handling the action
- the relevant controller can construct a command to mutate the model 204 B, execute it, and send the updated model or just data for the particular mutations to the remote server system that hosts the document model 238 via the network 236 .
- the controllers may also use timers or other mechanisms to aggregate inputs or mutations, so as to lower the number of updates that need to be made to the local or server-based models.
- the controllers may implement changes to the local and/or server-based model in batches that occur within predefined time windows, such as by waiting 200 ms after an initial keystroke is sensed before sending to the central server system data about all keystrokes received in the time window.
- Many possible user interactions with the application 200 B are possible, including interactions that are included in single-user sessions and in multiple-user sessions. For purposes of illustration, a series of example user interactions with the application 200 B are described here. For example, to enter text into the word processing document 202 , the user may proceed by using a computer mouse to select a desired document location 212 for text insertion by clicking on the document 202 .
- a mouse controller that is included in the per view controllers 234 can listen for an event that is associated with the mouse positioning input and the mouse click input, and upon intercepting it, can modify the view 206 B (e.g., a per view associated with the active document) to provide the user with a visual indicator for the selection (e.g., a cursor).
- the selected location 212 may be associated with a visible cursor (where the cursor is a graphical HTML element such as an image, and is displayed at an appropriate location on a canvas where the document is also being displayed so as to create a synthetic presentation that makes the graphical element look like a true cursor), may be highlighted, or may receive another such modification.
- the selected location 212 may also be associated with a location in the model 204 B. For example, a position in a one-dimensional character string included in the document models 210 can be determined, based on the selected location 212 .
- a keyboard controller that is included in the per view controllers 234 can listen for events associated with the keyboard input, and upon intercepting them, can modify the view 206 B to provide the user with a visual indicator for the input. For example, as the user types text at the location 212 , the document 202 may be visually updated to present the text to the user. Additionally, the keyboard controller can modify the model 204 B to include entered text by copying the user input to the model. For example, a one-dimensional character string included in the document models 210 can be updated to include the entered characters. Additionally, the document model 238 may be updated to include the entered text, thus coordinating the model 204 B with the document model 238 .
- changes to the model 204 B may be transmitted to the document model 238 via a connection to the network 236 .
- changes may be sent periodically (e.g., once every 100 milliseconds, once every 200 milliseconds, once every 500 milliseconds, once every second, once every 2 seconds, or another appropriate time interval).
- changes may be sent based on user activity (e.g., entering a paragraph break, applying a formatting change, navigating to another document section, clicking a save button, or some other action).
- the user may insert an entity (e.g., a list, a table, a hyperlink, an image, or another such object) into the document 202 .
- the user may proceed by using a computer mouse to select a desired document location (e.g., the location 212 ) for entity insertion by clicking on the document 202 .
- a mouse controller included in the per view controllers 234 can listen for an event associated with the mouse positioning input and the mouse click input, and upon intercepting it, can modify view 206 B to provide the user with a visual indicator for the selected location.
- the user may specify the entity for insertion by interacting with one of the view items 220 or with the document menu 222 .
- the user may make a selection on a menu bar to indicate an intent to insert an image.
- a dialog associated with image selection may be presented to the user, enabling the user to select the desired image.
- Model-view-controller interactions for adding the entity within the application 200 B may operate in a similar manner as when a user is entering text. For example, as the user inserts the image at the location 212 , the document 202 , as it is displayed on an editing surface, may be visually updated to present the image to the user. Additionally, the model 204 B may be modified to include a reference to the inserted image by writing the reference to the model. For example, one of the document models 210 (e.g., the model associated with the active document) can be updated to include a reference to the inserted image. A one-dimensional character string may be updated to include a special character indicating the position of the image, and the reference to the image may be stored.
- the document models 210 e.g., the model associated with the active document
- a one-dimensional character string may be updated to include a special character indicating the position of the image, and the reference to the image may be stored.
- the image content may be integrated into the document 202 that is displayed to the user.
- the one-dimensional character string may include multiple instances of an identifier for a single entity.
- the image may be positioned at multiple locations in the document 202 , specified by multiple positions for the identifier in the one-dimensional character string.
- a single external entity may be shared within a document, or may be shared among multiple documents—both by common references to the external entity.
- the document model 238 may be updated to include the inserted image(s), thus coordinating the model 204 B with the document model 238 . For example, changes to the model 204 B may be transmitted to the document model 238 via a connection to the network 236 .
- the user may modify the formatting of text and entities presented in the document 202 .
- the user can indicate a desired formatting change (e.g., a change such as changing a font of a selected text block to bold, changing a group of words to be organized as a list, changing a paragraph justification to be right-aligned, changing a document line spacing to be double-spaced, and the like).
- One of the controllers 230 or the document controller 232 can listen for user interaction with the view 206 B, and upon detecting the interaction, can modify the model 204 B to include the formatting change.
- one of the document models 210 can be updated to include an element in a sparse map of styles defining the formatting change, and defining the locations along the one-dimensional character string at which the changes in style are to occur.
- a model change controller included in the per view controllers 234 can listen for events associated with the model 204 B and can send a request to the view 206 B to update accordingly (e.g., by rendering a display of formatted text).
- the model change controller may also handle model change events that result from collaborative model changes.
- a document model that is one of the document models 210 may include a subset of the document data from the document model 238 .
- a subset of the data e.g., a subset associated with a portion of the document that is currently viewable by the user, plus perhaps a buffer area around the currently viewable area, or viewport, so that small scrolling distances may be handled by normal browser interactions without a need to render additional content form the model
- the full document model 238 may be provided to each client.
- the user may elect to view a different portion of the word processing document 202 than the user is currently viewing in the web browser. For example, by interacting with a scrollbar 214 that is associated with the document 202 , the user may indicate an intent to view document data beyond the current viewport, or displayed area.
- One of the per view controllers 234 e.g., the per view controller associated with the active document
- the view 206 A may cause itself to be displayed by the browser. For example, a buffer area of document data may be maintained in the model 204 B (already rendered into a DOM) around the data that is displayed in the visible area of the document 202 . If the amount of scrolling specified by the user is determined by the view 206 B to be within the bounds of the buffer area of data, the document display may be updated using such pre-rendered data. If the user specifies a larger amount of scrolling, such that the scrolling specified by the user is determined by the view 206 B to be outside of the bounds of the pre-rendered buffer data, for example, additional document data from the document model 238 may be downloaded via the network 236 . Thus, the model 204 B may be updated with information that is related to additional document sections, and the document may be rendered using the downloaded data.
- FIG. 2C is a block diagram of a system 240 for permitting collaborative editing of a document by multiple users through a hosted server system.
- the system 240 includes a hosted document system 242 executed by one or more computer servers (e.g. a server farm).
- the hosted document system 242 can provide document hosting services to any number of client users via connections to a network 244 (e.g., the internet).
- client users may create new documents, modify existing documents, share documents, and collaboratively work on documents with other users.
- document hosting services may be provided to browser applications 246 , 248 , and 250 .
- Each of the applications may be executed by a web browser (e.g., by the browser 104 , as shown in FIG. 1 ), and may include model, view, and controller components (e.g., similar to the application 200 , shown in FIGS. 2A and 2B ).
- the applications 246 , 248 , and 250 may be configured to execute computer code (e.g., JavaScript and other code running in a web browser) to display a word processing interface and to perform word processing functions associated with one or more documents served by the hosted document system 242 .
- computer code e.g., JavaScript and other code running in a web browser
- Chris can interact with a web browser 252
- Tina can interact with a web browser 254
- Spike can interact with a web browser 256 .
- Each of the browsers 252 , 254 , and 256 may access any appropriate number of browser applications (e.g., embedded applications, widgets, web services, and the like).
- browser 252 can access application 246
- browser 254 can access application 248
- browser 256 can access application 250 .
- users of the system 240 can work with one or more documents that are managed and provided by the hosted document system 242 .
- the users may access existing documents provided by the system 242 or may create new documents.
- Each of the browser applications 246 , 248 , and 250 can communicate with an interface 260 of the document system 242 via the network 244 .
- communication between the browser applications 246 , 248 , and 250 and the interface 260 may include HTTP (HyperText Transfer Protocol) requests, SOAP (Simple Object Access Protocol) messages, or some other appropriate such protocol.
- client browsers may maintain browser channel connections to the interface 260 for communicating session data between clients and the document system 242 .
- the hosted document system 242 can include sub-components for storing and managing information related to system users, documents, and browser applications.
- the various sub-components may be executed by the same computer server, or may be distributed among multiple computer servers.
- the sub-components may communicate with each other directly (e.g., via messages, transferred files, shared data, remote procedure calls, or some other protocol) or indirectly (e.g., by communicating with an intermediary application).
- sub-components included in the document system 242 can communicate with client applications (e.g., the browser applications 246 , 248 , and 250 ) via the interface 260 .
- the system 242 can also include one or more data stores for storing user information 270 .
- the user information 270 can include information associated with system users (e.g., Chris, Tina, and Spike). Such information may include general user information and login information (e.g., user names, passwords, e-mail addresses, and the like), information related to one or more devices employed by the users to access the system (e.g., IP addresses, browser versions, connection speeds, and the like), and system usage information (e.g., access times, amount of data accessed, and the like), to name a few possibilities.
- system users e.g., Chris, Tina, and Spike
- login information e.g., user names, passwords, e-mail addresses, and the like
- information related to one or more devices employed by the users to access the system e.g., IP addresses, browser versions, connection speeds, and the like
- system usage information e.g., access times, amount of data accessed, and the like
- the system 242 can include one or more data stores for storing documents 272 in the form, e.g., of document models like those discussed above and below.
- the documents 272 can include word processing documents created, maintained, and accessed by system users.
- the documents 272 may be generated by an automated process, such as a news feed or another reporting process that is based on gathered data.
- Information associated with the documents 272 can include document data models, document text, document formatting information, entities (e.g., tables, images, videos, sound clips, or other such objects), and the like.
- the system 242 can also include one or more data stores for storing access information 274 .
- the access information 274 can include information that can be used for controlling access of system users (e.g., users included in the user information 270 ) to system documents (e.g., documents included in the documents 272 ).
- system users may set access privileges for documents that they create or manage.
- Chris may create a personal letter document and specify the document as being private.
- other users of the system e.g., Tina and Spike
- Tina may upload a schedule document and specify the document as being shared and as being viewable by Chris.
- Spike may be unable to locate or access the document, but Chris may be able to access the document in view-only mode.
- Tina as the document creator, may retain full access to the document, having privileges such as the ability to add, edit, and delete content, having the ability to change privileges, and having the ability to remove the document from the system 242 .
- Spike may create a document related to a group project and specify Chris and Tina (and himself) as having full access privileges.
- user groups may be included in the access information 274 . For example, a user may create a group and may add one or more users to the group. Rather than select individual users when assigning document permissions, in some instances, users may select a group including the users.
- the access information 274 may also include such information as the user ids of document users, document access times, and the like.
- the system 242 can include one or more data stores for storing HTML/JavaScript 276 .
- the HTML/JavaScript 276 can include application code for executing the browser applications 246 , 248 , and 250 .
- the application code may be provided to any of the browsers 252 , 254 , and 256 , for example, when browser users access a web site associated with the hosted document system 242 .
- the system 242 may provide the HTML/JavaScript 276 in addition to one or more of the documents 272 .
- the browser applications 246 , 248 , and 250 may render the document data and may provide an interface that enables browser users to interact with the documents.
- technologies other than HTML and JavaScript may be used for providing application code.
- web browsers including an appropriate plugin another type of compiled or interpreted code may be provided.
- Many possible user interactions with the system 240 are possible, including interactions in single user sessions and in multiple user sessions.
- multiple users may simultaneously interact with a document.
- the applications used for editing the document may each behave independently, the applications may follow the same editing rules for updating and rendering the document model.
- multiple users may have similar experiences with the document, and may work together to produce a similar document model.
- Chris accesses the hosted document system 242 by directing the web browser 252 to a web site (e.g., a domain) that is associated with the system 242 .
- a web site e.g., a domain
- the system 242 can verify Chris's information against the user information 270 .
- the system 242 can provide HTML/JavaScript 276 to the browser 252 for executing an online word processor (though certain of the code may be passed before verification occurs).
- the browser can include a portion of the HTML/JavaScript 276 as the browser application 246 , render chrome associated with the application, and display the application to Chris.
- Chris may interact with the browser application 246 via a set of controls displayed in an application view within the browser 252 .
- Chris may indicate an intent to create a new document by clicking a button or selecting a menu option displayed in the application view.
- the application controller can intercept the command and pass the command to the interface 260 via the network 244 .
- the system 242 can add a new document to the documents 272 , and add information associated with the new document to the set of active models 262 .
- the active models 262 may include model information associated with documents currently being edited by other users of the system 242 .
- a corresponding version of a model in the set of active models 262 may be present at the browser application 246 .
- Chris may add content and make changes to the word processing document provided by the view of the browser application 246 , and the corresponding content and changes can be applied to a model that is accessed by the browser application 246 (and associated HTML and JavaScript code running in the browser), and may be propagated to the active models 262 .
- Chris may also share the document with one or more users. For example, using controls associated with the application 246 , Chris may select Tina and Spike as users who may share the document, and he may assign both Tina and Spike full document privileges. For example, Tina and Spike may be included in a presented list of users commonly sharing documents with Chris, and Chris may select Tina and Spike from the list. As another example, Chris may provide the e-mail addresses of Tina and Spike.
- the system 242 can store the sharing information (e.g., user ids of other users having access to the document, permissions levels for the users, and the like) in the access information 274 .
- the system 242 may send messages (e.g., e-mail, text messages, instant messages, and the like) to users who have received document privileges.
- messages e.g., e-mail, text messages, instant messages, and the like
- users who have received document privileges may receive a link (e.g., a hyperlink or URL) to the shared document.
- Tina and Spike may access the document using their web browsers 254 , 256 .
- the system 242 can provide HTML/JavaScript 276 to the browser 254 , 256 for executing an online word processor.
- the browsers can include a portion of the HTML/JavaScript 276 as the browser applications 248 , 250 , can render chrome associated with the application, and can display the applications.
- an active model manager 264 included the hosted document system 242 can identify which documents are currently open by users of the system, and users who are active in the document (i.e., Chris), and can set up a collaborative session. For example, the active model manager 264 can determine that the document requested by Tina and by Spike is associated with one or more of the active models 262 . The system 242 can then forward the document request to a computer hosting the document, and the computer can associate Tina and Spike with the current session. Additionally, the browser applications 248 , 250 can download model data associated with the active model(s) 262 , and render and display the downloaded model data. In some implementations, the system 242 can create model instances for Tina and for Spike and can add the instances to the active models 262 .
- users may be able to view their own cursors as well as the cursors of other users in a collaborative session.
- each user's cursor appears to himself/herself as a square.
- Chris may view his own cursor as a square, and the other users' cursors as a circle or as a triangle.
- Tina and Spike may also view their own cursor as a square, and the other users' cursors as circles or triangles.
- the cursors may appear as a different color (which could not be shown here).
- cursors may generally appear as underlines or vertical bars, where the cursors are different colors for each user.
- changes made by each of the users can be sent by the browser applications 246 , 248 , and 250 to the hosted document system 242 , coordinated, and sent back to the other users.
- the changes can be sent at time intervals (e.g., once every 100 milliseconds, once every 200 milliseconds, once every 500 milliseconds, once every second, once every 2 seconds, or another appropriate time interval).
- sending can be based at least in part on user activity or inactivity. For example, during periods of user inactivity, changes may be sent or received less frequently than during periods of user activity.
- a pop-up label that identifies the other user may be displayed, so that the local user can identify who is making changes—though the label may then disappear so that it does not continue to block the document.
- the hosted document system 242 can include collaboration logic 266 .
- the collaboration logic 266 can be executed by one or more code modules executed by one or more computer servers associated with the system 242 .
- portions of the collaboration logic can be executed by the browser applications 246 , 248 , and 250 .
- the logic 266 can resolve data collisions (e.g., instances where multiple users edit the same document portion or apply conflicting document formats) by applying a consistent set of rules to all user changes. Although, in some instances, one or more users may be prompted to disambiguate a change.
- Spike may be presented with a message from the browser application 250 including possible conflict resolution scenarios.
- one user may be identified as trumping other users in collision situations.
- Chris as the document creator, for example, may be able to apply his changes over changes made by either Tina or Spike in cases of conflict. For example, if Spike edits a passage at the same time as Chris deletes it, the passage (including Spike's edits) may be deleted.
- the system shown in FIG. 2C may handle collaborative editing of a hosted document by multiple users at one time.
- the management of such editing can involve a low amount of data passing between the various sub-systems in the system
- FIG. 3A is a flow chart of an example client-side process for collaborative editing of an electronic document.
- the process centers around steps that are taken when he client-side application receives input from a user of the application at essentially the same time that another user working on another client is providing input to the same document with a corresponding application at his or her client device.
- the process here aims to maintain a single true document on both clients and the server.
- the process begins at box 300 , where the client opens a browser channel to a server system. In this step, an initial communication session is opened so that subsequent communications may be instigated easily by the client and by the server system.
- the client downloads a compiled set of mutations made to the model, if the client currently has an older version of the model, or may download a current version of the model from scratch.
- the client application may transform the stale version of the model using the mutations, so that the now-current version of the model on the client matches a fresh version of the model on the server system.
- the client system begins receiving user edits to the document. For example, a user may position a cursor at a location in the document and begin typing text into the document, and deleting text from the document. Such interaction by the user may be implemented by a model-view-controller arrangement like that described above. As one example, a controller may track the location of the cursor in the document, and may generate messages that describe mutations that the user has made to the document. Those messages may, in particular, include information that identifies a particular location in the document model that corresponds to a location on a canvas at which the mutations were made by the user.
- the client device updates its own local model to reflect the received mutations, and caches those mutations.
- the client device may build up a list of mutations in the cache to minimize the number of transmissions that need to be sent to the server system.
- the timing of the uploads may be set such that a user of the client device or another client device does not get too far out-of-sync with other users who are editing the document at the same time.
- the client device receives an update from the server system, which may be a set or batch of mutations that were previously submitted to the server system by another client device in the top been processed and forwarded from the court from the server system to the first client device.
- the server system which may be a set or batch of mutations that were previously submitted to the server system by another client device in the top been processed and forwarded from the court from the server system to the first client device.
- the client device transforms its own mutations against the received update.
- the location for the input provided on the client device may be shifted backward by an indexed amount that matches the number of characters in the received mutations.
- Other transformations that follow from a standard operational transformation rule set may also be applied as is appropriate at this portion of the process.
- the view may be updated from the newly transformed model, such as by rendering the newly transformed model into a DOM that is accessible to a web browser that the user is employing.
- the device determines that it has been collecting inputs from its user long enough, and triggers a batch shipment to the server system of mutations provided by its user.
- those cached mutations are sent to the server system.
- an identifier for the last synchronization that the client had with the server system may be sent. Such an identifier may be used by the server system so as to properly set a baseline for transformations that it will need to perform on the newly received mutations from the first client.
- the first client may provide an identifier for itself, or the server system may otherwise determine that the particular mutations have arrived from that client. Such information may be useful in permitting the server system to keep track of the source of various mutations, and to link mutations to particular users, so that, for example, the server system can make appropriate transformations to batches of mutations that it receives and can forwarded transformed mutations to the appropriate other clients. Also, the server system may pass identifying information for a first client to other clients so that each client application may show a tag next to newly entered or edited text, where the tag is a pop-up that indicates the identity of user who performed the editing or entry.
- the user identifications may be stored, at least temporarily, in the various versions of the document model, so that users can, for example, hover over a portion of text, and see a pop-up box that indicates the identity of the user who provided the text, and optionally a date stamp to indicate when the particular edit occurred.
- the client receives confirmation from the server system that the batch of mutations has been entered at the server system. Such confirmation may cause the client system to dump the pending mutation from a queue that tracks pending mutations, and also to index its revision number forward one position (box 318 ).
- a client device may operate optimistically in updating its own version of a document model, and may also have some assurance that its version of the document model will match, or will be matched, relatively quickly to other versions of the document model in the system.
- the end result is that users who are editing or operating in a document in a collaborative fashion may quickly see changes that they have made and the other users have made, and interference between the changes may be conveniently handled in a manner that maintains the integrity of each of the versions of the document.
- FIG. 3B is a flow chart of an example server-side process for collaborative editing of an electronic document.
- the process highlights actions that may be performed on a central server system that is coordinating edits made to a common document in a collaborative manner by multiple users at different client computing devices.
- the process begins at box 320 , where the server system receives a channel request from one or more browsers. Upon receiving a request, the server system may open the channel, and may serve to the requesting browser a list or group of compiled mutations. Such mutations may be calibrated to include all mutations that have occurred since the particular client device was last provided mutations for updating of its document model. The server system may then wait to receive information from the various clients that are currently active in a session and may remain idle during such a period.
- a communication is received from one of the clients.
- the communication consists of a batch of mutations which may be termed “P” in this example, and an identifier for the last revision that the client has recorded as being synchronized between the client and the server system, which will be denoted “R” here.
- the server system appends the received batch from the particular client to a queue of pending mutations. In certain implementations, where the server system is able to process requests as fast as they arrive, a queue will not be necessary, or in certain situations, different queues may be maintained for each of the clients, and may be coordinated so that they are processed according to the time at which the particular request arrived.
- the server system creates a list, denoted as the letter “S”, of all mutations that arrived since the last batch of mutations from the particular client have been processed, as indicated by the letter “R.”
- the server system transforms the newly-received mutations from the client against the mutations received from the group of clients since time “R,” and such processing is used to create a group of transformed mutations referenced here as P t . This newly created entity is then appended to the server mutation log and is processed in due course by the server system (box 332 ).
- the server system may then send communications to each of the clients regarding the received mutations. For example, at box 336 , the server system sends a confirmation message back to the originating client for the batch of vacations, so that the originating client may know that its mutations were received and processed, and may index its revision tracking number forward a position.
- the server system may send information to the other client so that they may implement the mutations received from the first client in appropriate manners. To do so, the server system may send the P t batch to all the clients other than the submitting client, a revision number for that batch, an identification of the originating client for the mutations, and a current time, where such information is appropriate. Each of the other clients may then process the received information in an appropriate manner, such as by using mechanisms described above, including the process described in FIG. 3A .
- FIG. 4 is an activity diagram showing status of two clients and a server at various steps in a document collaboration process.
- the process shows how text typed by the two different users of the two clients may be propagated through the server and passed to the other client.
- each of the sub-systems is simply initialized.
- Each client may track the number of revisions it has sent to the server, and that number may initially set to zero.
- the sent and unsent queues for the client application (in the middle of each box for both clients) are also empty, and the output of the client-stored models is an empty set.
- the server system has no document to display yet, and also nothing to place in log or batches storage.
- user Chris After the first row of boxes in time, user Chris types the message “Hello”, which appears in the document on Chris's device, and is reformatted into a mutation of the form: insert @1 “Hello”. That mutation then enters Chris' unsent queue for a short period, such as a small fraction of a second, and is then transmitted to the to the server system, along with an indication that the revision number is 0.
- the device for Chris also updates its queues. Specifically, to show that the first revision has been sent. Through this time, user Spike has not been interacting with his word processing application, so both the server system and Spike's client have been idle through this period.
- Chris's queues have been updated, and the server now has a batch to be processed that includes the mutation, the revision number passed by Chris's client device, and an identifier to indicate that the edits came from Chris.
- Chris has continued typing and the server system has processed the submission of the first mutation (or more properly, a batch of five mutations) by transforming the received mutations against its own version of the model.
- the original mutation from Chris's device has moved into the log for the server system and has been assigned a logging number.
- the unsent queue on Chris's machine has received the term “world” from Chris's continued typing on his client device. Again, Spike has remained quiet
- Chris's device has incremented its revision number as a result of receiving the confirmation, so that it can properly track and compare mutations or batches of mutations when mutations are received from Spike via the server system.
- the server system has receive Spike's mutations and is processing Chris's second set of mutations.
- Spike's computer is transforming its pending mutations against the mutations from Chris that were just received from the server system. In this manner, Spike's computer will be performing the same mutations performed by the server system, and will not give his own entry prominence over Chris's first entry.
- the process may continue as each of Chris and Spike enter and edit text in their own copies of the document model, and the various document models are processed so as to bring them back into line with each other.
- FIG. 4 shows an example of a generic computer device 400 and a generic mobile computer device 450 , which may be used with the techniques described here.
- Computing device 400 is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other appropriate computers.
- Computing device 450 is intended to represent various forms of mobile devices, such as personal digital assistants, cellular telephones, smartphones, and other similar computing devices.
- the components shown here, their connections and relationships, and their functions, are meant to be exemplary only, and are not meant to limit implementations of the inventions described and/or claimed in this document.
- Computing device 400 includes a processor 402 , memory 404 , a storage device 406 , a high-speed interface 408 connecting to memory 404 and high-speed expansion ports 410 , and a low speed interface 412 connecting to low speed bus 414 and storage device 406 .
- Each of the components 402 , 404 , 406 , 408 , 410 , and 412 are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate.
- the processor 402 can process instructions for execution within the computing device 400 , including instructions stored in the memory 404 or on the storage device 406 to display graphical information for a GUI on an external input/output device, such as display 416 coupled to high speed interface 408 .
- multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory.
- multiple computing devices 400 may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system).
- the memory 404 stores information within the computing device 400 .
- the memory 404 is a volatile memory unit or units.
- the memory 404 is a non-volatile memory unit or units.
- the memory 404 may also be another form of computer-readable medium, such as a magnetic or optical disk.
- the storage device 406 is capable of providing mass storage for the computing device 400 .
- the storage device 406 may be or contain a computer-readable medium, such as a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations.
- a computer program product can be tangibly embodied in an information carrier.
- the computer program product may also contain instructions that, when executed, perform one or more methods, such as those described above.
- the information carrier is a computer- or machine-readable medium, such as the memory 404 , the storage device 406 , memory on processor 402 , or a propagated signal.
- the high speed controller 408 manages bandwidth-intensive operations for the computing device 400 , while the low speed controller 412 manages lower bandwidth-intensive operations.
- the high-speed controller 408 is coupled to memory 404 , display 416 (e.g., through a graphics processor or accelerator), and to high-speed expansion ports 410 , which may accept various expansion cards (not shown).
- low-speed controller 412 is coupled to storage device 406 and low-speed expansion port 414 .
- the low-speed expansion port which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet) may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter.
- input/output devices such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter.
- the computing device 400 may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server 420 , or multiple times in a group of such servers. It may also be implemented as part of a rack server system 424 . In addition, it may be implemented in a personal computer such as a laptop computer 422 . Alternatively, components from computing device 400 may be combined with other components in a mobile device (not shown), such as device 450 . Each of such devices may contain one or more of computing device 400 , 450 , and an entire system may be made up of multiple computing devices 400 , 450 communicating with each other.
- Computing device 450 includes a processor 452 , memory 464 , an input/output device such as a display 454 , a communication interface 466 , and a transceiver 468 , among other components.
- the device 450 may also be provided with a storage device, such as a microdrive or other device, to provide additional storage.
- a storage device such as a microdrive or other device, to provide additional storage.
- Each of the components 450 , 452 , 464 , 454 , 466 , and 468 are interconnected using various buses, and several of the components may be mounted on a common motherboard or in other manners as appropriate.
- the processor 452 can execute instructions within the computing device 450 , including instructions stored in the memory 464 .
- the processor may be implemented as a chipset of chips that include separate and multiple analog and digital processors.
- the processor may provide, for example, for coordination of the other components of the device 450 , such as control of user interfaces, applications run by device 450 , and wireless communication by device 450 .
- Processor 452 may communicate with a user through control interface 458 and display interface 456 coupled to a display 454 .
- the display 454 may be, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display) or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology.
- the display interface 456 may comprise appropriate circuitry for driving the display 454 to present graphical and other information to a user.
- the control interface 458 may receive commands from a user and convert them for submission to the processor 452 .
- an external interface 462 may be provide in communication with processor 452 , so as to enable near area communication of device 450 with other devices. External interface 462 may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces may also be used.
- the memory 464 stores information within the computing device 450 .
- the memory 464 can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units.
- Expansion memory 474 may also be provided and connected to device 450 through expansion interface 472 , which may include, for example, a SIMM (Single In Line Memory Module) card interface.
- SIMM Single In Line Memory Module
- expansion memory 474 may provide extra storage space for device 450 , or may also store applications or other information for device 450 .
- expansion memory 474 may include instructions to carry out or supplement the processes described above, and may include secure information also.
- expansion memory 474 may be provide as a security module for device 450 , and may be programmed with instructions that permit secure use of device 450 .
- secure applications may be provided via the SIMM cards, along with additional information, such as placing identifying information on the SIMM card in a non-hackable manner.
- the memory may include, for example, flash memory and/or NVRAM memory, as discussed below.
- a computer program product is tangibly embodied in an information carrier.
- the computer program product contains instructions that, when executed, perform one or more methods, such as those described above.
- the information carrier is a computer- or machine-readable medium, such as the memory 464 , expansion memory 474 , memory on processor 452 , or a propagated signal that may be received, for example, over transceiver 468 or external interface 462 .
- Device 450 may communicate wirelessly through communication interface 466 , which may include digital signal processing circuitry where necessary. Communication interface 466 may provide for communications under various modes or protocols, such as GSM voice calls, SMS, EMS, or MMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others. Such communication may occur, for example, through radio-frequency transceiver 468 . In addition, short-range communication may occur, such as using a Bluetooth, WiFi, or other such transceiver (not shown). In addition, GPS (Global Positioning System) receiver module 470 may provide additional navigation- and location-related wireless data to device 450 , which may be used as appropriate by applications running on device 450 .
- GPS Global Positioning System
- Device 450 may also communicate audibly using audio codec 460 , which may receive spoken information from a user and convert it to usable digital information. Audio codec 460 may likewise generate audible sound for a user, such as through a speaker, e.g., in a handset of device 450 . Such sound may include sound from voice telephone calls, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on device 450 .
- Audio codec 460 may receive spoken information from a user and convert it to usable digital information. Audio codec 460 may likewise generate audible sound for a user, such as through a speaker, e.g., in a handset of device 450 . Such sound may include sound from voice telephone calls, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on device 450 .
- the computing device 450 may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a cellular telephone 480 . It may also be implemented as part of a smartphone 482 , personal digital assistant, or other similar mobile device.
- implementations of the systems and techniques described here can be realized in digital electronic circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof.
- ASICs application specific integrated circuits
- These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device.
- the systems and techniques described here can be implemented on a computer having a display device (e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor) for displaying information to the user and a keyboard and a pointing device (e.g., a mouse or a trackball) by which the user can provide input to the computer.
- a display device e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor
- a keyboard and a pointing device e.g., a mouse or a trackball
- Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback (e.g., visual feedback, auditory feedback, or tactile feedback); and input from the user can be received in any form, including acoustic, speech, or tactile input.
- the systems and techniques described here can be implemented in a computing system that includes a back end component (e.g., as a data server), or that includes a middleware component (e.g., an application server), or that includes a front end component (e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the systems and techniques described here), or any combination of such back end, middleware, or front end components.
- the components of the system can be interconnected by any form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network (“LAN”), a wide area network (“WAN”), and the Internet.
- LAN local area network
- WAN wide area network
- the Internet the global information network
- the computing system can include clients and servers.
- a client and server are generally remote from each other and typically interact through a communication network.
- the relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.
Abstract
A computer-implemented method for coordinating documents between computer systems includes identifying, on a computing device, changes made by a user to a document having a model stored on the computing device, with corresponding models stored on a remote client and a server system; generating from the identified changes, one or more mutations that describe the changes and a one or more locations that correspond to positions in the model where the changes are to be provided; receiving one or more mutations from the server system and transforming the generated mutations using the received mutations; and updating the model stored on the computing device using the transformed mutations.
Description
- This application claims priority to U.S. Provisional Application Ser. No. 61/323,275, filed on Apr. 12, 2010, entitled “Real-Time Collaboration in a Hosted Word Processor,” the entire contents of which are hereby incorporated by reference.
- This document relates to systems and techniques for managing a browser-based word processor or other form of document manager that interacts with a hosted server system to permit collaboration by multiple users in a document.
- Cloud-based, or hosted, computing generally involves executing applications via a web browser, and obtaining information for the applications from a remote server system or service. Various applications are available from hosted services, including search engines, maps services, and productivity applications such as word processor and spreadsheet programs that run by loading executing HTML and JavaScript code from the server system to a browser running on a client computing device that is remote from the server system.
- Cloud computing provides real advantages over traditional desktop software, such as the ability to access documents from various different computers and locations. Web browsers do, however, place a number of limits on programs that run on them. For example, web browsers may offer programmers HTML elements that are very simple to implement but can be rather inflexible. As one example, a browser text box can be a simple way for a programmer to acquire textual input from a user of a browser, but the manner in which the text is presented is relatively bland. Also, browsers do not provide access to native text rendering capabilities, do not generally permit much flexibility in positioning images on a web page, and cannot natively execute other functions that are expected from a full-featured word processor application.
- This document describes systems and techniques that may be employed by users of hosted word processing and similar applications to collaborate in the editing of documents. For example, as described here, a server system can share a model for a document with multiple client computing devices, and the client computing devices can send changes, or mutations, made by their users to the server system regularly, such as multiple times a second or for every keystroke or icon/menu selection. Each of the clients and the server may have complementary rules that they apply in order to resolve conflicts in overlapping edits, such as when one user edits part of a document at substantially the same time that another user is deleting the entire phrase. In the techniques discussed here, operational transformation features may be employed in browser-based word processors so that mutations or changes to a shared document can be made optimistically by client devices, but the server can ensure that all versions of the document model converge toward one true version.
- As described here, in general, each client device may cache information regarding the locations in a document where the device has made changes to the model, and the nature of those changes. Such change information may be regularly uploaded to a server (e.g., multiple times per second when the changes, such as keystrokes in a document, are occurring) that is coordinating the word processing applications (or other applications such as spreadsheet applications). Each client may maintain a list of pending mutations that have not yet been sent to the server, and may transform such mutations against any mutations that the server may send to the client—e.g., that started at one of the other clients. As a result, the client's list of pending mutations will always be valid for the document state as of the client's last synchronization with the server system. When a client does send change information up to the server system, it may also send information that allows the server system to identify the client's last synchronization, so that the server system can transform the client's changes against all changes that have occurred since the last synchronization by the client.
- Such features may, in certain implementations, provide one or more advantages. For example, a rich browser-based word processing application can be provided to users, so that they can receive the various benefits of cloud computing (e.g., access from a common browser interface, access without needing to buy and/or download special non-browser application, and ability to share documents more easily across the internet) with the power and flexibility of traditional desktop applications (e.g., WYSIWYG presentation of document) and other features, such as real-time collaborative document editing among multiple users. Multiple users may also be able to use their client systems on the same document, so that wasteful individual editing sessions may be avoided, or conference calls in which users waste time explaining to a single person who has control of the document what to do with the document's edits.
- In one implementation, a computer-implemented method for coordinating documents between computer systems is disclosed. The method comprises identifying, on a computing device, changes made by a user to a document having a model stored on the computing device, with corresponding models stored on a remote client and a server system; generating from the identified changes, one or more mutations that describe the changes and a one or more locations that correspond to positions in the model where the changes are to be provided; receiving one or more mutations from the server system and transforming the generated mutations using the received mutations; and updating the model stored on the computing device using the transformed mutations. The model stored on the computing device can comprise a one-dimensional character string that includes content for the document, and a style map having pointers to indexed locations in the character string.
- In another implementation, computer-implemented system for coordinating electronic document changes between computer systems is disclosed. The system includes a document model stored on a first client computing device that defines content and formatting for an electronic document; a layout engine in communication with the document model and programmed to render the document model to a document object model (DOM) that is accessible to a web browser that is executable on the first client computing device; and a mutation resolver on the client computing device programmed to transform mutations made to the model on the first client computing device that have not been transmitted to a server system, using mutations sent to the first client computing device by the server system, and then applying the transformed mutations to the model on the first client computing device.
- In yet another implementation, a computer-implemented system for coordinating electronic document changes between computer systems comprises a document model stored on a first client computing device that defines content and formatting for an electronic document; a layout engine in communication with the document model and programmed to render the document model to a document object model (DOM) that is accessible to a web browser that is executable on the first client computing device; and means for resolving conflicting time-wise overlapping mutations made by the first client computing device and one or more other client computing devices.
- The details of one or more embodiments are set forth in the accompanying drawings and the description below. Other features and advantages will be apparent from the description and drawings, and from the claims.
-
FIG. 1 is a conceptual diagram of a browser-based word processing system for collaborative editing of documents. -
FIGS. 2A and 2B are block diagrams showing components of a model-view-controller implementation of a spreadsheet application. -
FIG. 2C is a block diagram of a system for permitting collaborative editing of a documented by multiple users through a hosted server system. -
FIG. 3A is a flow chart of an example client-side process for collaborative editing of an electronic document. -
FIG. 3B is a flow chart of an example server-side process for collaborative editing of an electronic document. -
FIG. 4 is an activity diagram showing status of two clients and a server at various steps in a document collaboration process. -
FIG. 5 shows an example of a computer device and a mobile computer device that can be used to implement the techniques described here. - Like reference symbols in the various drawings indicate like elements.
- This document describes systems and techniques for browser-based word processing applications. As discussed in more detail below, a client-based application that runs in a web browser, such as using HTML and JavaScript code, may download a portion of a document model from a server system that hosts the online word processing functionality. The application may create a user interface with the browser, and may place an editing surface on the display of the browser where the body of the document is to be displayed. The application may intercept keystrokes and other inputs by the user and may determine how the inputs are to be displayed by placing them in an off-screen or a highly minimized HTML span element, and measuring the size of such an element to determine the size of the characters when they are properly displayed. The application may also display a synthetic cursor on the editing surface and use the measurements from the span element to determine the location at which to index the cursor after the user has typed a character or made other changes to the document. As the user makes such changes, the changes may be added to the local model, and may in turn be added to the display in the browser by rendering the model or the changes to the model into a document object model (DOM) that is accessed by the browser in a familiar manner.
-
FIG. 1 is a conceptual diagram of a browser-basedword processing system 100 for collaborative editing of documents. In general, thesystem 100 revolves around two users, named Chris and Spike, who are accessing and editing a document together in a collaborative manner. Each of the users has a similarly configured client subsystem, because each has individually accessed aserver system 104 and downloaded to their browsers equivalent program code, such as in the form of HTML and JavaScript code. The two users in this example are currently viewing and editing the same document at the same time, and thesystem 100 is in charge of coordinating such activities by the two users. - The
system 100 centers around individual copies of adocument model server system 104 and the two users are experiencing the same document, or are at least converging quickly (within seconds or less than a second) toward the same document. Rows of equal signs are shown in the figure between thedocument models 112 at the clients, and thedocument model 124 at theserver system 104, in order to emphasize this effort to effectively match the document models with each other when overlapping edits are being made to documentmodel 112 at Chris's machine, anddocument model 112 at Spike's machine. - The document models may be updated at each of the machines by applying certain transformation rules to pending changes, or mutations, that may be applied to a model. For example, each of the clients may be forced to transform their own inputs to a document so that their changes reflect changes received from other users via the
server system 104, before applying those changes to their own copy of themodel 112. The various subcomponents in each of the client and server subsystems shown here provide examples of components that may achieve such coordinated editing of the document. - Referring now to particular components on the client devices, these subsystems are generally implemented as so-called model-view-controller implementations, where a model of a document may be maintained on a client, the model may be rendered to create a view of the document model which may cover all of a document model or a portion of the document model, and a controller may intercept inputs made by a user with respect to the document, such as mouse clicks, keyboard and trees, and the like. The controller may then process such inputs to create changes to the document model, and those changes may then be reflected in the view when the updated document model is rendered to the view.
- As shown here, each client computer communicates with the
server system 104 through aninterface 120. Theinterface 120 may take various forms, but may include functionality for providing theserver system 104 with relevant information needed for the server system to maintain coordination between the clients. Particular types of such information are described more completely below. One type of information needed to maintain coordination by theserver system 104 is revision identification information fromdata store 122. Such information may be used to indicate the status of the most recent batch of mutations that have been synchronized between the particular client and theserver system 104, so that transformations of mutations may be applied in the appropriate direction (i.e., so that it can be determined which transformations “trump” other transformations) and appropriate batches of mutations may be transformed against each other, whether at theserver system 104 or at the clients. As noted, mutations may be provided at the clients by various input mechanisms such as akeyboard 109, a mouse, a touchscreen computer input, or other appropriate mechanisms. These inputs create the mutations that need to be coordinated by thesystem 100. - Such mutations or inputs may be captured or intercepted by a
controller 116. Thecontroller 116 may use such inputs to identify and generate mutations corresponding to the user inputs. For example, if a user types several characters at a particular location in a document, thecontroller 118 may generate a string that indicates the characters that were entered, and that recites a position in the model where such characters are to be added to the model. - Each client may process individual mutations and submit individual mutations to the
server system 104, such as by sending every keystroke received at the client computer up toserver system 104 as a mutation. Alternatively, or at different times, multiple mutations may be gathered together and stored as mutation lists 116, or mutations batches. Such caching of mutations may be beneficial, for example, when a user is typing very quickly, and a number of characters may be processed together to increase the efficiency of thesystem 100, while not slowing down the responsiveness of thesystem 100. Thus, for example, when a client device is quiet for a long time and a first mutation is identified for the device (e.g., the user presses a key), a client application may begin a timer, such as a timer set to expire in 200 ms or a similar time, and may cache all mutations received during that time, before processing and uploading the mutations as a batch. - A
mutation resolver 114 on each client device may implement various operational transformation rules and techniques so that overlapping or interfering mutations may be processed properly, and so that themodels FIGS. 3A , 3B, and 4. - When a client has resolved particular mutations so as to determine what changes need to be made to a
document model 112, thedocument model 112 may be updated, such as by thecontroller 118. Thedisplay 106 of the document may then be updated so that the user at the appropriate client can see changes that he has made, and also changes that the other user has made, in a relatively responsive and accurate manner. Such generation of anew display 106 may occur using alayout engine 110 and a document object model (DOM) 108. Thelayout engine 110 may be programmed to process thedocument model 112 into theDOM 108. Thedocument model 112 may take a variety of forms, including a one-dimensional character string that includes the content of the document and that is supplemented by a sparse style map that represents formatting or styling for the characters and other items in themodel 112. Thelayout engine 110 may parse through the character string and apply formatting from the style map to generate HTML that synthetically creates adisplay 106 that looks or appears in a manner that the user intended. For example, each item in thedisplay 106, such as each character in a written document, may be generated in an off screen span element using appropriate formatting, and the size of that element may be determined using standard HTML elements. Each character that is processed in this manner may then be placed on an editing surface of thedisplay 106 at the appropriate location, and the location for the next character may be indexed forward by the width that was determined for the previous character. A defined width (equivalent to page margins) may be applied for each line, so that when the position of a character for a word exceeds that width, the position for all the characters of that word may be shifted to the beginning of the next line (e.g., implementing a word wrap feature). Also, a cursor may be shown on thedisplay 106 at an appropriate location as determined by thecontroller 118, and may be a standard HTML element, such as a span element having a narrow width, and rendered in a background color that contrasts with the background color of thedisplay 106, so that a user may locate the cursor easily. - The
layout engine 112 can perform its processing in this manner, and generates, as an output, theDOM 108. Each user's browser may then use standard techniques to convert the DOM on that particular client device intodisplay 106 for interacting with the relevant user. - Turning now to components used in the
server system 104, there is provided, in addition to thedocument model 124, a number of components that are used to coordinate edits to a document made by user Chris and user Spike. For example, a pendingbatches storage area 126 receives mutation batches that have been submitted by the clients, and holds them until they may be processed. A batch processor ormutation resolver 128 is responsible for applying operational transformations to the mutation batches using rules or approaches like those discussed above and below. For example, aserver system 104 may resolve a newly-received batch of mutations from a client against all mutations that have been received since the last time the client was synchronized with the server, so that the new mutations from that client do not take precedence over mutations have been received previously from other clients. - A
revision log 130 may be used in order to perform such comparisons. In particular, mutation batch is received from the various clients may be maintained in themutation log 130, which may include identifiers for particular mutation batches, or revisions, received from each of the clients. These identifiers may then be used to identify or determine all of the mutations that have arrived since the previous synchronization with the particular client, and the identified mutations from the log may have newly received mutations transformed against them, in determining how the newly receive mutations are to affect thedocument model 124. Particular techniques for applying such transformations are described in more detail below with respect toFIGS. 3A , 3B, and 4. - We now discuss in more detail the arrangement of an example model-view-controller client arrangement, and additional structures and other components that may be implemented in a collaborative document editing system.
-
FIGS. 2A and 2B are block diagrams showing components of a model-view-controller (MVC) implementation of a word processing application. The word processing application, for example, may be executed by a web browser, such as thebrowser 104 shown inFIG. 1A . In general, the MVC implementation provides for the download of a model from a remote server to a client, and the rendering of the model into a DOM to form a view of the model that may be managed directly by the web browser. The controller may intercept actions, such as clicks on icons and keystrokes on a keyboard, and may cause such actions to be implemented, such as by adding typed characters both to the model on the client and on the remote server (e.g., uploading changes or mutations back to the server, which may be programmed with rules for integrating the mutations into a master model, so that the client-side model matches the master model as the user works). - Referring to
FIG. 2A , acomputer application 200A may be configured to display aword processing document 202. Theapplication 200A includes, controls, or accesses amodel 204A, aview 206A, and acontroller 208A. For example, themodel 204A can contain a representation of the state of theword processing document 202, including such elements as character data, formats, styles, paragraphs, sections, breaks, lists, tables, images, formulas, and the like. Theview 206A can represent a rendering of the current state of themodel 204A. For example, the view can provide a visual representation that combines the substance of the document (e.g., its raw text) with formatting and layout information. The view, when displayed by a browser, provides a form of, if not an exact, WYSIWYG representation of the document that is defined by the model. - In addition to the rendering of the model, the
view 206A can be used for presenting to the user visual information that is associated with theword processing document 202, such as visible user controls for the application (i.e., chrome) and other word processing data. Thecontroller 208A can respond to changes in themodel 204A or theview 206A, and can update the state of themodel 204A and theview 206A. As shown inFIG. 2A , solid lines between themodel 204A, theview 206A, and thecontroller 208A represent direct references between components, and dashed lines represent listeners. For example, listening for user interaction (e.g., provided by user controls) with the presentation of theview 206A, thecontroller 208A can modify themodel 204A, and can in turn modify theview 206A either directly or indirectly (by causing theview 206A to obtain new model data and render that new data). - As another example, listening for changes in the
model 204A made by another user in a collaborative environment or changes made through an automated data update or another such process, theview 206A can request re-rendering of an updated model or portion of the model. For example, if a user of a client device is only one of multiple users concurrently editing a document, characters and other edits by the other users may be passed to the client device from the server system (and edits by the first user may be passed from the client device to the server system), and the client code may add characters to the model in near real-time, and those changes can be passed into the DOM (e.g., via rendering by theview 206A)—so that each user can see the edits made by the other users very quickly. - Referring to
FIG. 2B , the model-view-controller implementation as presented inFIG. 2A is shown with additional detail. As shown, acomputer application 200B (corresponding with theapplication 200A) includes, controls, or accesses amodel 204B (corresponding with themodel 204A), aview 206B (corresponding with theview 206A), and acontroller 208B (corresponding with thecontroller 208A). - The
model 204B can include one ormore document models 210. Each of thedocument models 210 can represent a separate document in a collection of word processing documents, for example, and each of themodels 210 can include elements such as characters, styles, and entities. Other forms of documents such as spreadsheet documents may also be represented. Model data and elements may be provided by amaster document model 238 that is stored on a remote server system via a connection to a network 236 (e.g., the internet). - Generally, document text in the
models 210 is associated with a series of characters. For example, the characters may represent raw text for theword processing document 202, and may also include certain reserved control characters such as characters that indicate the occurrence of a break (e.g., a paragraph break, a page break, or the like). In some implementations, each of thedocument models 210 can include a one-dimensional character string that includes document characters in an order in which they appear in the document. - Styles may be used to store information related to the presentation of document text (e.g., the series of characters). For example, text styles may include character formatting attributes such as font, font size, bold, italics, underline, foreground and background colors, alignment, and other such attributes. In some implementations, styles included in each of the
document models 210 can be stored in a sparse map. For example, the sparse map can include markers that correspond to changes in styles in the document and pointers to positions in the character string. The pointers, for example, can define style runs between matched markers by specifying locations along the character string at which style changes occur. In some implementations, the markers in the matched set may be arranged to be tethered to certain characters in the one-dimensional character string. For example, if text is added between two paired markers, the pointer for one of the markers may shift by an integer equal to a number or characters associated with the added text. - Entities in each of the
models 210 may be used to store information related to objects outside of thedocument models 210, and may be pointed to by references in the model such as in the one-dimensional character string. For example, entities may include objects such as lists, tables, images, and the like. In some implementations, the references can include object identifiers and pointers to the one-dimensional character string (e.g., from the sparse map) indicating where in the character string the object should appear, or identifiers from within the character string that point to the entities and mark the locations at which the particular entities are to appear in the document when it is rendered and displayed. For example, an image that should appear between two paragraphs may be associated with a special character appearing in the character string after a paragraph marker for one paragraph, and before the first character of the next paragraph. - The
view 206B can generate one ormore view items 220 that may enable the user to interact with theapplication 200B, such as menu bars, tool bars, context menus, chat panes, dialogs, other chrome, and the like. Theview 206B can also include adocument menu 222 that presents information and control options related to one or more of thedocument models 210, and one or more of a set of perviews 224. For example, one of the per views 224 may be associated with a corresponding one of thesheet models 210. Each of the per views 224 may include components or controls such as selectors (e.g., cursors, selection indicators, and the like) navigation tools (e.g., scrollbars, document maps, outlines, and the like). - The
controller 208B can include one ormore controllers 230 that may listen for and handle user interactions with one or more of theview items 220. In some implementations, each of thecontrollers 230 may be associated with a corresponding one of theview items 220. For example, menu bar controllers may listen for and handle user interactions with menu bar view items (e.g., relating to various actions that a user would typically take from a row of menu selections), tool bar controllers may listen for and handle user interactions with tool bar view items, context menu controllers may listen for and handle user interactions with context menu view items, and so forth. The determination that a particular event has occurred may cause aparticular controller 230 to execute predetermined code or otherwise carry out a predetermined process, such as by updating a local model when a key press is received and uploading information about the key press to a central server system. - The
controller 208B can also include adocument controller 232 that may listen for and handle user interactions with thedocument menu 222. In addition, thecontroller 208B can include a set of perview controllers 234, where each of thecontrollers 234 is configured to listen for and handle user interactions with a corresponding view in the set of perviews 224. Each of theper view controllers 234 may include various controller types, such as key controllers for intercepting and interpreting keyboard input, mouse controllers for intercepting and interpreting mouse input, and model change controllers for intercepting and interpreting model change events. - Generally, the controllers included in the
controller 208B can transform user-generated events into model and view mutations. For example, based on a user action, a relevant controller (e.g., a controller configured for handling the action) may receive one or more events associated with the action and make transient changes to theview 206B before the user action is committed. Then, based on the event properties, the relevant controller can construct a command to mutate themodel 204B, execute it, and send the updated model or just data for the particular mutations to the remote server system that hosts thedocument model 238 via thenetwork 236. - The controllers may also use timers or other mechanisms to aggregate inputs or mutations, so as to lower the number of updates that need to be made to the local or server-based models. For example, the controllers may implement changes to the local and/or server-based model in batches that occur within predefined time windows, such as by waiting 200 ms after an initial keystroke is sensed before sending to the central server system data about all keystrokes received in the time window.
- Many possible user interactions with the
application 200B are possible, including interactions that are included in single-user sessions and in multiple-user sessions. For purposes of illustration, a series of example user interactions with theapplication 200B are described here. For example, to enter text into theword processing document 202, the user may proceed by using a computer mouse to select a desireddocument location 212 for text insertion by clicking on thedocument 202. A mouse controller that is included in the per view controllers 234 (e.g., a per view controller associated with the active document 202) can listen for an event that is associated with the mouse positioning input and the mouse click input, and upon intercepting it, can modify theview 206B (e.g., a per view associated with the active document) to provide the user with a visual indicator for the selection (e.g., a cursor). For example, the selectedlocation 212 may be associated with a visible cursor (where the cursor is a graphical HTML element such as an image, and is displayed at an appropriate location on a canvas where the document is also being displayed so as to create a synthetic presentation that makes the graphical element look like a true cursor), may be highlighted, or may receive another such modification. Additionally, the selectedlocation 212 may also be associated with a location in themodel 204B. For example, a position in a one-dimensional character string included in thedocument models 210 can be determined, based on the selectedlocation 212. - Using a keyboard, the user may enter desired text at the
document location 212. A keyboard controller that is included in theper view controllers 234 can listen for events associated with the keyboard input, and upon intercepting them, can modify theview 206B to provide the user with a visual indicator for the input. For example, as the user types text at thelocation 212, thedocument 202 may be visually updated to present the text to the user. Additionally, the keyboard controller can modify themodel 204B to include entered text by copying the user input to the model. For example, a one-dimensional character string included in thedocument models 210 can be updated to include the entered characters. Additionally, thedocument model 238 may be updated to include the entered text, thus coordinating themodel 204B with thedocument model 238. For example, changes to themodel 204B may be transmitted to thedocument model 238 via a connection to thenetwork 236. In some implementations, changes may be sent periodically (e.g., once every 100 milliseconds, once every 200 milliseconds, once every 500 milliseconds, once every second, once every 2 seconds, or another appropriate time interval). In some implementations, changes may be sent based on user activity (e.g., entering a paragraph break, applying a formatting change, navigating to another document section, clicking a save button, or some other action). - As another example, the user may insert an entity (e.g., a list, a table, a hyperlink, an image, or another such object) into the
document 202. For example, the user may proceed by using a computer mouse to select a desired document location (e.g., the location 212) for entity insertion by clicking on thedocument 202. Similar to interactions associated with text entry, for example, a mouse controller included in theper view controllers 234 can listen for an event associated with the mouse positioning input and the mouse click input, and upon intercepting it, can modify view 206B to provide the user with a visual indicator for the selected location. Next, for example, the user may specify the entity for insertion by interacting with one of theview items 220 or with thedocument menu 222. For example, the user may make a selection on a menu bar to indicate an intent to insert an image. A dialog associated with image selection may be presented to the user, enabling the user to select the desired image. - Model-view-controller interactions for adding the entity within the
application 200B may operate in a similar manner as when a user is entering text. For example, as the user inserts the image at thelocation 212, thedocument 202, as it is displayed on an editing surface, may be visually updated to present the image to the user. Additionally, themodel 204B may be modified to include a reference to the inserted image by writing the reference to the model. For example, one of the document models 210 (e.g., the model associated with the active document) can be updated to include a reference to the inserted image. A one-dimensional character string may be updated to include a special character indicating the position of the image, and the reference to the image may be stored. - When the
document 202 is rendered from the model associated with the active document, for example, the image content may be integrated into thedocument 202 that is displayed to the user. In some implementations, the one-dimensional character string may include multiple instances of an identifier for a single entity. For example, the image may be positioned at multiple locations in thedocument 202, specified by multiple positions for the identifier in the one-dimensional character string. Thus, a single external entity may be shared within a document, or may be shared among multiple documents—both by common references to the external entity. Thedocument model 238 may be updated to include the inserted image(s), thus coordinating themodel 204B with thedocument model 238. For example, changes to themodel 204B may be transmitted to thedocument model 238 via a connection to thenetwork 236. - Additionally, for example, the user may modify the formatting of text and entities presented in the
document 202. By interacting with one of theview items 220 or with thedocument menu 222, the user can indicate a desired formatting change (e.g., a change such as changing a font of a selected text block to bold, changing a group of words to be organized as a list, changing a paragraph justification to be right-aligned, changing a document line spacing to be double-spaced, and the like). One of thecontrollers 230 or thedocument controller 232 can listen for user interaction with theview 206B, and upon detecting the interaction, can modify themodel 204B to include the formatting change. For example, one of the document models 210 (e.g., the model associated with the active document) can be updated to include an element in a sparse map of styles defining the formatting change, and defining the locations along the one-dimensional character string at which the changes in style are to occur. A model change controller included in theper view controllers 234 can listen for events associated with themodel 204B and can send a request to theview 206B to update accordingly (e.g., by rendering a display of formatted text). In some implementations, the model change controller may also handle model change events that result from collaborative model changes. - In some implementations, a document model that is one of the
document models 210 may include a subset of the document data from thedocument model 238. For example, if thedocument model 238 is substantially large, a subset of the data (e.g., a subset associated with a portion of the document that is currently viewable by the user, plus perhaps a buffer area around the currently viewable area, or viewport, so that small scrolling distances may be handled by normal browser interactions without a need to render additional content form the model) may be provided to each client that is currently displaying theword processing document 202. As another example, thefull document model 238 may be provided to each client. - The user may elect to view a different portion of the
word processing document 202 than the user is currently viewing in the web browser. For example, by interacting with ascrollbar 214 that is associated with thedocument 202, the user may indicate an intent to view document data beyond the current viewport, or displayed area. One of the per view controllers 234 (e.g., the per view controller associated with the active document) can listen for user interaction with theview 206B or other appropriate component (e.g., the visual portion of the scrollbar 214), and upon detecting the interaction (e.g., via a computer mouse), can request for theview 206B to redraw itself. - If the user specifies a small amount of scrolling, the
view 206A may cause itself to be displayed by the browser. For example, a buffer area of document data may be maintained in themodel 204B (already rendered into a DOM) around the data that is displayed in the visible area of thedocument 202. If the amount of scrolling specified by the user is determined by theview 206B to be within the bounds of the buffer area of data, the document display may be updated using such pre-rendered data. If the user specifies a larger amount of scrolling, such that the scrolling specified by the user is determined by theview 206B to be outside of the bounds of the pre-rendered buffer data, for example, additional document data from thedocument model 238 may be downloaded via thenetwork 236. Thus, themodel 204B may be updated with information that is related to additional document sections, and the document may be rendered using the downloaded data. -
FIG. 2C is a block diagram of asystem 240 for permitting collaborative editing of a document by multiple users through a hosted server system. In general, thesystem 240 includes a hosteddocument system 242 executed by one or more computer servers (e.g. a server farm). The hosteddocument system 242 can provide document hosting services to any number of client users via connections to a network 244 (e.g., the internet). Using thedocument system 242, client users may create new documents, modify existing documents, share documents, and collaboratively work on documents with other users. - For purposes of illustration, document hosting services may be provided to
browser applications browser 104, as shown inFIG. 1 ), and may include model, view, and controller components (e.g., similar to the application 200, shown inFIGS. 2A and 2B ). Theapplications document system 242. - As shown in the present illustration, Chris can interact with a
web browser 252, Tina can interact with aweb browser 254, and Spike can interact with aweb browser 256. Each of thebrowsers browser 252 can accessapplication 246,browser 254 can accessapplication 248, andbrowser 256 can accessapplication 250. - By interacting with controls presented by the web browsers, for example, users of the system 240 (e.g., Chris, Spike, and Tina), can work with one or more documents that are managed and provided by the hosted
document system 242. For example, the users may access existing documents provided by thesystem 242 or may create new documents. Each of thebrowser applications interface 260 of thedocument system 242 via thenetwork 244. For example, communication between thebrowser applications interface 260 may include HTTP (HyperText Transfer Protocol) requests, SOAP (Simple Object Access Protocol) messages, or some other appropriate such protocol. In some implementations, client browsers may maintain browser channel connections to theinterface 260 for communicating session data between clients and thedocument system 242. - The hosted
document system 242 can include sub-components for storing and managing information related to system users, documents, and browser applications. The various sub-components may be executed by the same computer server, or may be distributed among multiple computer servers. The sub-components may communicate with each other directly (e.g., via messages, transferred files, shared data, remote procedure calls, or some other protocol) or indirectly (e.g., by communicating with an intermediary application). Generally, sub-components included in thedocument system 242 can communicate with client applications (e.g., thebrowser applications interface 260. - The
system 242 can also include one or more data stores for storinguser information 270. For example, theuser information 270 can include information associated with system users (e.g., Chris, Tina, and Spike). Such information may include general user information and login information (e.g., user names, passwords, e-mail addresses, and the like), information related to one or more devices employed by the users to access the system (e.g., IP addresses, browser versions, connection speeds, and the like), and system usage information (e.g., access times, amount of data accessed, and the like), to name a few possibilities. - In some implementations, the
system 242 can include one or more data stores for storingdocuments 272 in the form, e.g., of document models like those discussed above and below. For example, thedocuments 272 can include word processing documents created, maintained, and accessed by system users. As another example, thedocuments 272 may be generated by an automated process, such as a news feed or another reporting process that is based on gathered data. Information associated with thedocuments 272 can include document data models, document text, document formatting information, entities (e.g., tables, images, videos, sound clips, or other such objects), and the like. - The
system 242 can also include one or more data stores for storingaccess information 274. For example, theaccess information 274 can include information that can be used for controlling access of system users (e.g., users included in the user information 270) to system documents (e.g., documents included in the documents 272). Generally, system users may set access privileges for documents that they create or manage. For example, Chris may create a personal letter document and specify the document as being private. Thus, other users of the system (e.g., Tina and Spike) may be unable to locate or access the document, which may have access control limitations applied to it in various familiar manners. As another example, Tina may upload a schedule document and specify the document as being shared and as being viewable by Chris. Thus, Spike may be unable to locate or access the document, but Chris may be able to access the document in view-only mode. In some implementations, Tina, as the document creator, may retain full access to the document, having privileges such as the ability to add, edit, and delete content, having the ability to change privileges, and having the ability to remove the document from thesystem 242. As another example, Spike may create a document related to a group project and specify Chris and Tina (and himself) as having full access privileges. In some implementations, user groups may be included in theaccess information 274. For example, a user may create a group and may add one or more users to the group. Rather than select individual users when assigning document permissions, in some instances, users may select a group including the users. Theaccess information 274 may also include such information as the user ids of document users, document access times, and the like. - In some implementations, the
system 242 can include one or more data stores for storing HTML/JavaScript 276. For example, the HTML/JavaScript 276 can include application code for executing thebrowser applications browsers document system 242. Upon receiving a request for any of thedocuments 272, for example, thesystem 242 may provide the HTML/JavaScript 276 in addition to one or more of thedocuments 272. Using the HTML/JavaScript 276, thebrowser applications - Many possible user interactions with the
system 240 are possible, including interactions in single user sessions and in multiple user sessions. For example, in a collaborative editing session, multiple users may simultaneously interact with a document. Although the applications used for editing the document may each behave independently, the applications may follow the same editing rules for updating and rendering the document model. Thus, multiple users may have similar experiences with the document, and may work together to produce a similar document model. - In an example session, to initiate collaborative word processing document editing, Chris accesses the hosted
document system 242 by directing theweb browser 252 to a web site (e.g., a domain) that is associated with thesystem 242. Receiving login information from thebrowser 252, thesystem 242 can verify Chris's information against theuser information 270. Upon verification, thesystem 242 can provide HTML/JavaScript 276 to thebrowser 252 for executing an online word processor (though certain of the code may be passed before verification occurs). The browser can include a portion of the HTML/JavaScript 276 as thebrowser application 246, render chrome associated with the application, and display the application to Chris. - Chris may interact with the
browser application 246 via a set of controls displayed in an application view within thebrowser 252. For example, Chris may indicate an intent to create a new document by clicking a button or selecting a menu option displayed in the application view. The application controller can intercept the command and pass the command to theinterface 260 via thenetwork 244. Receiving the command, thesystem 242 can add a new document to thedocuments 272, and add information associated with the new document to the set ofactive models 262. For example, theactive models 262 may include model information associated with documents currently being edited by other users of thesystem 242. - A corresponding version of a model in the set of
active models 262 may be present at thebrowser application 246. For example, Chris may add content and make changes to the word processing document provided by the view of thebrowser application 246, and the corresponding content and changes can be applied to a model that is accessed by the browser application 246 (and associated HTML and JavaScript code running in the browser), and may be propagated to theactive models 262. - Chris may also share the document with one or more users. For example, using controls associated with the
application 246, Chris may select Tina and Spike as users who may share the document, and he may assign both Tina and Spike full document privileges. For example, Tina and Spike may be included in a presented list of users commonly sharing documents with Chris, and Chris may select Tina and Spike from the list. As another example, Chris may provide the e-mail addresses of Tina and Spike. Thesystem 242 can store the sharing information (e.g., user ids of other users having access to the document, permissions levels for the users, and the like) in theaccess information 274. In some implementations, thesystem 242 may send messages (e.g., e-mail, text messages, instant messages, and the like) to users who have received document privileges. In some implementations, users who have received document privileges may receive a link (e.g., a hyperlink or URL) to the shared document. - Upon receiving notification of the shared document, Tina and Spike may access the document using their
web browsers system 242 can provide HTML/JavaScript 276 to thebrowser JavaScript 276 as thebrowser applications - Additionally, an
active model manager 264 included the hosteddocument system 242 can identify which documents are currently open by users of the system, and users who are active in the document (i.e., Chris), and can set up a collaborative session. For example, theactive model manager 264 can determine that the document requested by Tina and by Spike is associated with one or more of theactive models 262. Thesystem 242 can then forward the document request to a computer hosting the document, and the computer can associate Tina and Spike with the current session. Additionally, thebrowser applications system 242 can create model instances for Tina and for Spike and can add the instances to theactive models 262. - In the present example, users may be able to view their own cursors as well as the cursors of other users in a collaborative session. For purposes of illustration, each user's cursor appears to himself/herself as a square. For example, Chris may view his own cursor as a square, and the other users' cursors as a circle or as a triangle. Correspondingly, Tina and Spike may also view their own cursor as a square, and the other users' cursors as circles or triangles. In some implementations, the cursors may appear as a different color (which could not be shown here). For example, cursors may generally appear as underlines or vertical bars, where the cursors are different colors for each user.
- In the present example, changes made by each of the users can be sent by the
browser applications document system 242, coordinated, and sent back to the other users. In some implementations, the changes can be sent at time intervals (e.g., once every 100 milliseconds, once every 200 milliseconds, once every 500 milliseconds, once every second, once every 2 seconds, or another appropriate time interval). In some implementations, sending can be based at least in part on user activity or inactivity. For example, during periods of user inactivity, changes may be sent or received less frequently than during periods of user activity. When a user is entering data or when a local user hovers over a cursor for another user, a pop-up label that identifies the other user may be displayed, so that the local user can identify who is making changes—though the label may then disappear so that it does not continue to block the document. - To coordinate multiple document changes made by multiple users, for example, the hosted
document system 242 can includecollaboration logic 266. For example, thecollaboration logic 266 can be executed by one or more code modules executed by one or more computer servers associated with thesystem 242. In some implementations, portions of the collaboration logic can be executed by thebrowser applications logic 266 can resolve data collisions (e.g., instances where multiple users edit the same document portion or apply conflicting document formats) by applying a consistent set of rules to all user changes. Although, in some instances, one or more users may be prompted to disambiguate a change. For example, if Tina makes a document change and Spike makes a conflicting document change before receiving Tina's change, Spike may be presented with a message from thebrowser application 250 including possible conflict resolution scenarios. In some implementations, one user may be identified as trumping other users in collision situations. Chris, as the document creator, for example, may be able to apply his changes over changes made by either Tina or Spike in cases of conflict. For example, if Spike edits a passage at the same time as Chris deletes it, the passage (including Spike's edits) may be deleted. - Thus, the system shown in
FIG. 2C may handle collaborative editing of a hosted document by multiple users at one time. The management of such editing can involve a low amount of data passing between the various sub-systems in the system -
FIG. 3A is a flow chart of an example client-side process for collaborative editing of an electronic document. In general, the process centers around steps that are taken when he client-side application receives input from a user of the application at essentially the same time that another user working on another client is providing input to the same document with a corresponding application at his or her client device. The process here aims to maintain a single true document on both clients and the server. - The process begins at
box 300, where the client opens a browser channel to a server system. In this step, an initial communication session is opened so that subsequent communications may be instigated easily by the client and by the server system. Atbox 302, the client downloads a compiled set of mutations made to the model, if the client currently has an older version of the model, or may download a current version of the model from scratch. When the mutations are received, the client application may transform the stale version of the model using the mutations, so that the now-current version of the model on the client matches a fresh version of the model on the server system. - At
box 304, the client system begins receiving user edits to the document. For example, a user may position a cursor at a location in the document and begin typing text into the document, and deleting text from the document. Such interaction by the user may be implemented by a model-view-controller arrangement like that described above. As one example, a controller may track the location of the cursor in the document, and may generate messages that describe mutations that the user has made to the document. Those messages may, in particular, include information that identifies a particular location in the document model that corresponds to a location on a canvas at which the mutations were made by the user. - At
box 306, the client device updates its own local model to reflect the received mutations, and caches those mutations. The client device may build up a list of mutations in the cache to minimize the number of transmissions that need to be sent to the server system. However, the timing of the uploads may be set such that a user of the client device or another client device does not get too far out-of-sync with other users who are editing the document at the same time. Atbox 308, the client device receives an update from the server system, which may be a set or batch of mutations that were previously submitted to the server system by another client device in the top been processed and forwarded from the court from the server system to the first client device. Thus, in this example, there are overlapping mutations in time that may the effect of interfering with each other. - At
box 310, the client device transforms its own mutations against the received update. Thus, as one simple example, if the client device had previously recorded the inputs from its user as occurring in a particular location in the document, and mutations received from the server system were provided in an earlier location in the document, the location for the input provided on the client device may be shifted backward by an indexed amount that matches the number of characters in the received mutations. Other transformations that follow from a standard operational transformation rule set may also be applied as is appropriate at this portion of the process. In implementations in which the first client has already placed its own mutations into a view of the model, the view may be updated from the newly transformed model, such as by rendering the newly transformed model into a DOM that is accessible to a web browser that the user is employing. - At
box 312, the device determines that it has been collecting inputs from its user long enough, and triggers a batch shipment to the server system of mutations provided by its user. Atbox 314, those cached mutations are sent to the server system. In addition, an identifier for the last synchronization that the client had with the server system may be sent. Such an identifier may be used by the server system so as to properly set a baseline for transformations that it will need to perform on the newly received mutations from the first client. - In addition, the first client may provide an identifier for itself, or the server system may otherwise determine that the particular mutations have arrived from that client. Such information may be useful in permitting the server system to keep track of the source of various mutations, and to link mutations to particular users, so that, for example, the server system can make appropriate transformations to batches of mutations that it receives and can forwarded transformed mutations to the appropriate other clients. Also, the server system may pass identifying information for a first client to other clients so that each client application may show a tag next to newly entered or edited text, where the tag is a pop-up that indicates the identity of user who performed the editing or entry. The user identifications may be stored, at least temporarily, in the various versions of the document model, so that users can, for example, hover over a portion of text, and see a pop-up box that indicates the identity of the user who provided the text, and optionally a date stamp to indicate when the particular edit occurred.
- At
box 316, the client receives confirmation from the server system that the batch of mutations has been entered at the server system. Such confirmation may cause the client system to dump the pending mutation from a queue that tracks pending mutations, and also to index its revision number forward one position (box 318). - In this manner, a client device may operate optimistically in updating its own version of a document model, and may also have some assurance that its version of the document model will match, or will be matched, relatively quickly to other versions of the document model in the system. The end result is that users who are editing or operating in a document in a collaborative fashion may quickly see changes that they have made and the other users have made, and interference between the changes may be conveniently handled in a manner that maintains the integrity of each of the versions of the document.
-
FIG. 3B is a flow chart of an example server-side process for collaborative editing of an electronic document. In general, the process highlights actions that may be performed on a central server system that is coordinating edits made to a common document in a collaborative manner by multiple users at different client computing devices. - The process begins at
box 320, where the server system receives a channel request from one or more browsers. Upon receiving a request, the server system may open the channel, and may serve to the requesting browser a list or group of compiled mutations. Such mutations may be calibrated to include all mutations that have occurred since the particular client device was last provided mutations for updating of its document model. The server system may then wait to receive information from the various clients that are currently active in a session and may remain idle during such a period. - At
box 324, a communication is received from one of the clients. The communication consists of a batch of mutations which may be termed “P” in this example, and an identifier for the last revision that the client has recorded as being synchronized between the client and the server system, which will be denoted “R” here. Atbox 326, the server system appends the received batch from the particular client to a queue of pending mutations. In certain implementations, where the server system is able to process requests as fast as they arrive, a queue will not be necessary, or in certain situations, different queues may be maintained for each of the clients, and may be coordinated so that they are processed according to the time at which the particular request arrived. - At
box 328, the server system creates a list, denoted as the letter “S”, of all mutations that arrived since the last batch of mutations from the particular client have been processed, as indicated by the letter “R.” Atbox 330, the server system transforms the newly-received mutations from the client against the mutations received from the group of clients since time “R,” and such processing is used to create a group of transformed mutations referenced here as Pt. This newly created entity is then appended to the server mutation log and is processed in due course by the server system (box 332). - The server system may then send communications to each of the clients regarding the received mutations. For example, at
box 336, the server system sends a confirmation message back to the originating client for the batch of vacations, so that the originating client may know that its mutations were received and processed, and may index its revision tracking number forward a position. Atbox 334, in contrast, the server system may send information to the other client so that they may implement the mutations received from the first client in appropriate manners. To do so, the server system may send the Pt batch to all the clients other than the submitting client, a revision number for that batch, an identification of the originating client for the mutations, and a current time, where such information is appropriate. Each of the other clients may then process the received information in an appropriate manner, such as by using mechanisms described above, including the process described inFIG. 3A . -
FIG. 4 is an activity diagram showing status of two clients and a server at various steps in a document collaboration process. In general, the process shows how text typed by the two different users of the two clients may be propagated through the server and passed to the other client. In the top row, each of the sub-systems is simply initialized. Each client may track the number of revisions it has sent to the server, and that number may initially set to zero. The sent and unsent queues for the client application (in the middle of each box for both clients) are also empty, and the output of the client-stored models is an empty set. Likewise, the server system has no document to display yet, and also nothing to place in log or batches storage. - After the first row of boxes in time, user Chris types the message “Hello”, which appears in the document on Chris's device, and is reformatted into a mutation of the form: insert @1 “Hello”. That mutation then enters Chris' unsent queue for a short period, such as a small fraction of a second, and is then transmitted to the to the server system, along with an indication that the revision number is 0. The device for Chris also updates its queues. Specifically, to show that the first revision has been sent. Through this time, user Spike has not been interacting with his word processing application, so both the server system and Spike's client have been idle through this period.
- In the third row then, Chris's queues have been updated, and the server now has a batch to be processed that includes the mutation, the revision number passed by Chris's client device, and an identifier to indicate that the edits came from Chris.
- Between rows three and four, Chris has continued typing and the server system has processed the submission of the first mutation (or more properly, a batch of five mutations) by transforming the received mutations against its own version of the model. Thus, by row four, the original mutation from Chris's device has moved into the log for the server system and has been assigned a logging number. At the same time the unsent queue on Chris's machine has received the term “world” from Chris's continued typing on his client device. Again, Spike has remained quiet
- At row five, a couple interesting actions occur. First, the server system recognizes the presence of the first revision in its log, and sends a confirmation message back to Chris's device. Second, Chris's second set of mutations has arrived at the server system and is waiting to be processed. Third, Spike has begun typing at his device, and has entered the letters “foo”. Thus, after the row of boxes in the fifth row, multiple messages are being sent, including an upload of Spike's first revision, a confirmation of Chris's first revision, and a reporting to Spike of Chris's first revision.
- In the sixth row of boxes, Chris's device has incremented its revision number as a result of receiving the confirmation, so that it can properly track and compare mutations or batches of mutations when mutations are received from Spike via the server system. Also, the server system has receive Spike's mutations and is processing Chris's second set of mutations. And Spike's computer is transforming its pending mutations against the mutations from Chris that were just received from the server system. In this manner, Spike's computer will be performing the same mutations performed by the server system, and will not give his own entry prominence over Chris's first entry. The process, of course, may continue as each of Chris and Spike enter and edit text in their own copies of the document model, and the various document models are processed so as to bring them back into line with each other.
-
FIG. 4 shows an example of a generic computer device 400 and a generic mobile computer device 450, which may be used with the techniques described here. Computing device 400 is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other appropriate computers. Computing device 450 is intended to represent various forms of mobile devices, such as personal digital assistants, cellular telephones, smartphones, and other similar computing devices. The components shown here, their connections and relationships, and their functions, are meant to be exemplary only, and are not meant to limit implementations of the inventions described and/or claimed in this document. - Computing device 400 includes a processor 402, memory 404, a storage device 406, a high-speed interface 408 connecting to memory 404 and high-speed expansion ports 410, and a low speed interface 412 connecting to low speed bus 414 and storage device 406. Each of the components 402, 404, 406, 408, 410, and 412, are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate. The processor 402 can process instructions for execution within the computing device 400, including instructions stored in the memory 404 or on the storage device 406 to display graphical information for a GUI on an external input/output device, such as display 416 coupled to high speed interface 408. In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices 400 may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system).
- The memory 404 stores information within the computing device 400. In one implementation, the memory 404 is a volatile memory unit or units. In another implementation, the memory 404 is a non-volatile memory unit or units. The memory 404 may also be another form of computer-readable medium, such as a magnetic or optical disk.
- The storage device 406 is capable of providing mass storage for the computing device 400. In one implementation, the storage device 406 may be or contain a computer-readable medium, such as a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. A computer program product can be tangibly embodied in an information carrier. The computer program product may also contain instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory 404, the storage device 406, memory on processor 402, or a propagated signal.
- The high speed controller 408 manages bandwidth-intensive operations for the computing device 400, while the low speed controller 412 manages lower bandwidth-intensive operations. Such allocation of functions is exemplary only. In one implementation, the high-speed controller 408 is coupled to memory 404, display 416 (e.g., through a graphics processor or accelerator), and to high-speed expansion ports 410, which may accept various expansion cards (not shown). In the implementation, low-speed controller 412 is coupled to storage device 406 and low-speed expansion port 414. The low-speed expansion port, which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet) may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter.
- The computing device 400 may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server 420, or multiple times in a group of such servers. It may also be implemented as part of a rack server system 424. In addition, it may be implemented in a personal computer such as a laptop computer 422. Alternatively, components from computing device 400 may be combined with other components in a mobile device (not shown), such as device 450. Each of such devices may contain one or more of computing device 400, 450, and an entire system may be made up of multiple computing devices 400, 450 communicating with each other.
- Computing device 450 includes a processor 452, memory 464, an input/output device such as a display 454, a communication interface 466, and a transceiver 468, among other components. The device 450 may also be provided with a storage device, such as a microdrive or other device, to provide additional storage. Each of the components 450, 452, 464, 454, 466, and 468, are interconnected using various buses, and several of the components may be mounted on a common motherboard or in other manners as appropriate.
- The processor 452 can execute instructions within the computing device 450, including instructions stored in the memory 464. The processor may be implemented as a chipset of chips that include separate and multiple analog and digital processors. The processor may provide, for example, for coordination of the other components of the device 450, such as control of user interfaces, applications run by device 450, and wireless communication by device 450.
- Processor 452 may communicate with a user through control interface 458 and display interface 456 coupled to a display 454. The display 454 may be, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display) or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology. The display interface 456 may comprise appropriate circuitry for driving the display 454 to present graphical and other information to a user. The control interface 458 may receive commands from a user and convert them for submission to the processor 452. In addition, an external interface 462 may be provide in communication with processor 452, so as to enable near area communication of device 450 with other devices. External interface 462 may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces may also be used.
- The memory 464 stores information within the computing device 450. The memory 464 can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units. Expansion memory 474 may also be provided and connected to device 450 through expansion interface 472, which may include, for example, a SIMM (Single In Line Memory Module) card interface. Such expansion memory 474 may provide extra storage space for device 450, or may also store applications or other information for device 450. Specifically, expansion memory 474 may include instructions to carry out or supplement the processes described above, and may include secure information also. Thus, for example, expansion memory 474 may be provide as a security module for device 450, and may be programmed with instructions that permit secure use of device 450. In addition, secure applications may be provided via the SIMM cards, along with additional information, such as placing identifying information on the SIMM card in a non-hackable manner.
- The memory may include, for example, flash memory and/or NVRAM memory, as discussed below. In one implementation, a computer program product is tangibly embodied in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory 464, expansion memory 474, memory on processor 452, or a propagated signal that may be received, for example, over transceiver 468 or external interface 462.
- Device 450 may communicate wirelessly through communication interface 466, which may include digital signal processing circuitry where necessary. Communication interface 466 may provide for communications under various modes or protocols, such as GSM voice calls, SMS, EMS, or MMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others. Such communication may occur, for example, through radio-frequency transceiver 468. In addition, short-range communication may occur, such as using a Bluetooth, WiFi, or other such transceiver (not shown). In addition, GPS (Global Positioning System) receiver module 470 may provide additional navigation- and location-related wireless data to device 450, which may be used as appropriate by applications running on device 450.
- Device 450 may also communicate audibly using audio codec 460, which may receive spoken information from a user and convert it to usable digital information. Audio codec 460 may likewise generate audible sound for a user, such as through a speaker, e.g., in a handset of device 450. Such sound may include sound from voice telephone calls, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on device 450.
- The computing device 450 may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a cellular telephone 480. It may also be implemented as part of a smartphone 482, personal digital assistant, or other similar mobile device.
- Various implementations of the systems and techniques described here can be realized in digital electronic circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device.
- These computer programs (also known as programs, software, software applications or code) include machine instructions for a programmable processor, and can be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the terms “machine-readable medium” “computer-readable medium” refers to any computer program product, apparatus and/or device (e.g., magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions as a machine-readable signal. The term “machine-readable signal” refers to any signal used to provide machine instructions and/or data to a programmable processor.
- To provide for interaction with a user, the systems and techniques described here can be implemented on a computer having a display device (e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor) for displaying information to the user and a keyboard and a pointing device (e.g., a mouse or a trackball) by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback (e.g., visual feedback, auditory feedback, or tactile feedback); and input from the user can be received in any form, including acoustic, speech, or tactile input.
- The systems and techniques described here can be implemented in a computing system that includes a back end component (e.g., as a data server), or that includes a middleware component (e.g., an application server), or that includes a front end component (e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the systems and techniques described here), or any combination of such back end, middleware, or front end components. The components of the system can be interconnected by any form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network (“LAN”), a wide area network (“WAN”), and the Internet.
- The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.
- A number of embodiments have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the invention. In addition, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. In addition, other steps may be provided, or steps may be eliminated, from the described flows, and other components may be added to, or removed from, the described systems. Accordingly, other embodiments are within the scope of the following claims.
Claims (19)
1. A computer-implemented method for coordinating documents between computer systems, the method comprising:
identifying, on a computing device, changes made by a user to a document having a model stored on the computing device, with corresponding models stored on a remote client and a remote server system;
generating from the identified changes, one or more mutations that describe the changes and a one or more locations that correspond to positions in the model where the changes are to be provided;
receiving one or more mutations from the server system and transforming the generated mutations using the received mutations; and
updating the model stored on the computing device using the transformed mutations.
2. The method of claim 1 , wherein the model stored on the computing device comprises a one-dimensional character string that includes content for the document, and a style map having pointers to indexed locations in the character string.
3. The method of claim 1 , wherein updating the model comprises applying an updating rule set that is complementary to updating rules sets at the remote client and the remote server system.
4. The method of claim 1 , further comprising periodically receiving a model reset signal and an updated model definition from the remote server system, and replacing a current model on the computing device with the updated model definition.
5. The method of claim 1 , further comprising caching mutations at the computing device and, upon receiving one or more mutations form the server system, applying conflict resolution rules between the cached mutations and the received mutations.
6. The method of claim 1 , further comprising rendering the updated model by generating a document object model (DOM) from the updated model.
7. A computer-implemented system for coordinating electronic document changes between computer systems, comprising:
a document model stored on a first client computing device that defines content and formatting for an electronic document;
a layout engine in communication with the document model and programmed to render the document model to a document object model (DOM) that is accessible to a web browser that is executable on the first client computing device; and
a mutation resolver on the client computing device programmed to transform mutations made to the model on the first client computing device that have not been transmitted to a server system, using mutations sent to the first client computing device by the server system, and then applying the transformed mutations to the model on the first client computing device.
8. The system of claim 7 , wherein the document model stored on the first client computing device comprises a one-dimensional character string that includes content for a document, and a style map having pointers to indexed locations in the character string.
9. The system of claim 7 , wherein the first client computing device is programmed to update the model by applying an updating rule set that is complementary to updating rules sets at the remote client and the remote server system.
10. The system of claim 7 , further comprising a server system programmed to periodically send to a plurality of remote computing devices, including the first client computing device, a model reset signal and an updated model definition for the computing devices to use in refreshing document models at each of the computing devices.
11. The system of claim 7 , further comprising a mutation cache storing mutations waiting to be uploaded to a server system, and wherein the mutation resolver operates on mutations received from the server system by comparing them to mutations in the mutation cache.
12. The system of claim 7 , wherein the first client computing device is programmed to render an updated model by generating a document object model (DOM) from an updated model.
13. A computer-implemented system for coordinating electronic document changes between computer systems, comprising:
a document model stored on a first client computing device that defines content and formatting for an electronic document;
a layout engine in communication with the document model and programmed to render the document model to a document object model (DOM) that is accessible to a web browser that is executable on the first client computing device; and
means for resolving conflicting time-wise overlapping mutations made by the first client computing device and one or more other client computing devices.
14. One or more tangible computer-readable media storing instructions that, when executed, cause one or more computers to perform operations comprising:
identifying, on a computing device, changes made by a user to a document having a model stored on the computing device, with corresponding models stored on a remote client and a remote server system;
generating from the identified changes, one or more mutations that describe the changes and a one or more locations that correspond to positions in the model where the changes are to be provided;
receiving one or more mutations from the server system and transforming the generated mutations using the received mutations; and
updating the model stored on the computing device using the transformed mutations.
15. The tangible computer-readable media of claim 14 , wherein the model stored on the computing device comprises a one-dimensional character string that includes content for the document, and a style map having pointers to indexed locations in the character string.
16. The tangible computer-readable media of claim 14 , wherein updating the model comprises applying an updating rule set that is complementary to updating rules sets at the remote client and the remote server system.
17. The tangible computer-readable media of claim 14 , wherein the operations further comprise periodically receiving a model reset signal and an updated model definition from the remote server system, and replacing a current model on the computing device with the updated model definition.
18. The tangible computer-readable media of claim 14 , wherein the operations further comprise caching mutations at the computing device and, upon receiving one or more mutations form the server system, applying conflict resolution rules between the cached mutations and the received mutations.
19. The tangible computer-readable media of claim 1 , wherein the operations further comprises rendering the updated model by generating a document object model (DOM) from the updated model.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/085,325 US20110252312A1 (en) | 2010-04-12 | 2011-04-12 | Real-Time Collaboration in a Hosted Word Processor |
US13/271,682 US20120030563A1 (en) | 2010-04-12 | 2011-10-12 | Real-Time Collaboration in a Hosted Word Processor |
US14/989,417 US10678999B2 (en) | 2010-04-12 | 2016-01-06 | Real-time collaboration in a hosted word processor |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US32327510P | 2010-04-12 | 2010-04-12 | |
US13/085,325 US20110252312A1 (en) | 2010-04-12 | 2011-04-12 | Real-Time Collaboration in a Hosted Word Processor |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/271,682 Continuation US20120030563A1 (en) | 2010-04-12 | 2011-10-12 | Real-Time Collaboration in a Hosted Word Processor |
Publications (1)
Publication Number | Publication Date |
---|---|
US20110252312A1 true US20110252312A1 (en) | 2011-10-13 |
Family
ID=44144785
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/085,325 Abandoned US20110252312A1 (en) | 2010-04-12 | 2011-04-12 | Real-Time Collaboration in a Hosted Word Processor |
US13/271,682 Abandoned US20120030563A1 (en) | 2010-04-12 | 2011-10-12 | Real-Time Collaboration in a Hosted Word Processor |
US14/989,417 Active 2033-07-06 US10678999B2 (en) | 2010-04-12 | 2016-01-06 | Real-time collaboration in a hosted word processor |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/271,682 Abandoned US20120030563A1 (en) | 2010-04-12 | 2011-10-12 | Real-Time Collaboration in a Hosted Word Processor |
US14/989,417 Active 2033-07-06 US10678999B2 (en) | 2010-04-12 | 2016-01-06 | Real-time collaboration in a hosted word processor |
Country Status (5)
Country | Link |
---|---|
US (3) | US20110252312A1 (en) |
EP (1) | EP2558960A1 (en) |
AU (1) | AU2011240695A1 (en) |
CA (1) | CA2795917A1 (en) |
WO (1) | WO2011130307A1 (en) |
Cited By (77)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070156522A1 (en) * | 2005-12-30 | 2007-07-05 | Microsoft Corporation | Social context monitor |
US20110252303A1 (en) * | 2010-04-12 | 2011-10-13 | Micah Lemonik | Rich Content in a Browser-Based Work Processor |
US20110252304A1 (en) * | 2010-04-12 | 2011-10-13 | Google Inc. | Rich Browser-Based Word Processor |
US20120054677A1 (en) * | 2010-08-30 | 2012-03-01 | Sap Ag | Dynamic view computation and display |
US20120173612A1 (en) * | 2010-12-06 | 2012-07-05 | Zoho Corporation | Editing an unhosted third party application |
US20120299843A1 (en) * | 2011-05-23 | 2012-11-29 | Kim Hak-Doo | Real-time object transfer and information sharing method |
US20120324372A1 (en) * | 2011-06-15 | 2012-12-20 | Sap Ag | Systems and Methods for Augmenting Physical Media from Multiple Locations |
US20130185651A1 (en) * | 2012-01-18 | 2013-07-18 | Microsoft Corporation | People presence detection in a multidocument knowledge base |
US20130218829A1 (en) * | 2013-03-15 | 2013-08-22 | Deneen Lizette Martinez | Document management system and method |
US20130246901A1 (en) * | 2012-03-19 | 2013-09-19 | Litera Technologies, LLC. | System and method for synchronizing bi-directional document management |
US20130268850A1 (en) * | 2012-04-10 | 2013-10-10 | Nikos Kyprianou | Methods and apparatus to copy and insert information |
US20130325795A1 (en) * | 2012-05-31 | 2013-12-05 | Google Inc. | Systems and Methods for Dynamically Loading Web Fonts and Dynamic Availability for Fonts Based on Language Settings |
US20140082473A1 (en) * | 2012-09-14 | 2014-03-20 | David H. Sitrick | Systems And Methodologies Of Event Content Based Document Editing, Generating Of Respective Events Comprising Event Content, Then Defining A Selected Set Of Events, And Generating Of A Display Presentation Responsive To Processing Said Selected Set Of Events, For One To Multiple Users |
US20140136403A1 (en) * | 2011-09-14 | 2014-05-15 | Microsoft Corporation | Multi tenancy for single tenancy applications |
US20140258371A1 (en) * | 2013-03-11 | 2014-09-11 | John Hammersley | Collaborative editing |
US20150039556A1 (en) * | 2013-07-30 | 2015-02-05 | Box, Inc. | Scalability improvement in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform |
US20150067058A1 (en) * | 2013-08-30 | 2015-03-05 | RedDrummer LLC | Systems and methods for providing a collective post |
US20150199316A1 (en) * | 2012-06-11 | 2015-07-16 | Brian Lewis Cairns | System and Method of Document Embedding in Collaborative Editors |
US9286271B2 (en) | 2010-05-26 | 2016-03-15 | Google Inc. | Providing an electronic document collection |
US20160147722A1 (en) * | 2014-11-24 | 2016-05-26 | Google Inc. | Systems and Methods for Editing a File in a Non-Native Application Using an Application Engine |
US9367570B1 (en) * | 2012-04-09 | 2016-06-14 | Google Inc. | Ad hoc queryable JSON with audit trails |
US9372833B2 (en) | 2012-09-14 | 2016-06-21 | David H. Sitrick | Systems and methodologies for document processing and interacting with a user, providing storing of events representative of document edits relative to a document; selection of a selected set of document edits; generating presentation data responsive to said selected set of documents edits and the stored events; and providing a display presentation responsive to the presentation data |
US9384285B1 (en) | 2012-12-18 | 2016-07-05 | Google Inc. | Methods for identifying related documents |
US9396216B2 (en) | 2012-05-04 | 2016-07-19 | Box, Inc. | Repository redundancy implementation of a system which incrementally updates clients with events that occurred via a cloud-enabled platform |
US9396245B2 (en) | 2013-01-02 | 2016-07-19 | Box, Inc. | Race condition handling in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform |
US20160321226A1 (en) * | 2015-05-01 | 2016-11-03 | Microsoft Technology Licensing, Llc | Insertion of unsaved content via content channel |
US9507795B2 (en) | 2013-01-11 | 2016-11-29 | Box, Inc. | Functionalities, features, and user interface of a synchronization client to a cloud-based environment |
US9514113B1 (en) | 2013-07-29 | 2016-12-06 | Google Inc. | Methods for automatic footnote generation |
US9529791B1 (en) | 2013-12-12 | 2016-12-27 | Google Inc. | Template and content aware document and template editing |
US9529916B1 (en) | 2012-10-30 | 2016-12-27 | Google Inc. | Managing documents based on access context |
US9542366B2 (en) | 2011-12-20 | 2017-01-10 | Apple Inc. | Smart text in document chat |
US9542374B1 (en) | 2012-01-20 | 2017-01-10 | Google Inc. | Method and apparatus for applying revision specific electronic signatures to an electronically stored document |
US9553758B2 (en) | 2012-09-18 | 2017-01-24 | Box, Inc. | Sandboxing individual applications to specific user folders in a cloud-based service |
US9558202B2 (en) | 2012-08-27 | 2017-01-31 | Box, Inc. | Server side techniques for reducing database workload in implementing selective subfolder synchronization in a cloud-based environment |
US20170039170A1 (en) * | 2015-08-04 | 2017-02-09 | Google Inc. | Systems and methods for interactively presenting a visible portion of a rendering surface on a user device |
US9575981B2 (en) | 2012-04-11 | 2017-02-21 | Box, Inc. | Cloud service enabled to handle a set of files depicted to a user as a single file in a native operating system |
US9633037B2 (en) | 2013-06-13 | 2017-04-25 | Box, Inc | Systems and methods for synchronization event building and/or collapsing by a synchronization component of a cloud-based platform |
US9652741B2 (en) | 2011-07-08 | 2017-05-16 | Box, Inc. | Desktop application for access and interaction with workspaces in a cloud-based content management system and synchronization mechanisms thereof |
US9667676B1 (en) * | 2016-01-29 | 2017-05-30 | Dropbox, Inc. | Real time collaboration and document editing by multiple participants in a content management system |
US9703763B1 (en) | 2014-08-14 | 2017-07-11 | Google Inc. | Automatic document citations by utilizing copied content for candidate sources |
US9773051B2 (en) | 2011-11-29 | 2017-09-26 | Box, Inc. | Mobile platform file and folder selection functionalities for offline access and synchronization |
US9794256B2 (en) | 2012-07-30 | 2017-10-17 | Box, Inc. | System and method for advanced control tools for administrators in a cloud-based service |
US9805050B2 (en) | 2013-06-21 | 2017-10-31 | Box, Inc. | Maintaining and updating file system shadows on a local device by a synchronization client of a cloud-based platform |
US9842113B1 (en) | 2013-08-27 | 2017-12-12 | Google Inc. | Context-based file selection |
US20180074998A1 (en) * | 2016-09-13 | 2018-03-15 | Microsoft Technology Licensing, Llc | Visual feedback for broken text selection |
US9953036B2 (en) | 2013-01-09 | 2018-04-24 | Box, Inc. | File system monitoring in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform |
US20180191660A1 (en) * | 2016-12-29 | 2018-07-05 | Dropbox, Inc. | Comment management in shared documents |
US10025782B2 (en) | 2013-06-18 | 2018-07-17 | Litera Corporation | Systems and methods for multiple document version collaboration and management |
US20180248914A1 (en) * | 2013-01-23 | 2018-08-30 | The Privacy Factor, LLC | Monitoring a privacy rating for an application or website |
US20180335935A1 (en) * | 2017-05-22 | 2018-11-22 | Dropbox, Inc. | Author Sharing and Recipient Creation Of Copied Collaborative Content Items |
US10235383B2 (en) | 2012-12-19 | 2019-03-19 | Box, Inc. | Method and apparatus for synchronization of items with read-only permissions in a cloud-based environment |
US10241983B1 (en) | 2015-09-28 | 2019-03-26 | Amazon Technologies, Inc. | Vector-based encoding for content rendering |
US20190129889A1 (en) * | 2016-08-04 | 2019-05-02 | Hancom Inc. | Document cooperation supporting apparatus for supporting simultaneous edit of document, and operating method thereof |
US10296580B1 (en) | 2015-09-18 | 2019-05-21 | Amazon Technologies, Inc. | Delivering parsed content items |
US10341345B1 (en) | 2015-12-15 | 2019-07-02 | Amazon Technologies, Inc. | Network browser configuration |
US10348797B1 (en) | 2015-12-15 | 2019-07-09 | Amazon Technologies, Inc. | Network browser configuration |
US10353960B1 (en) * | 2015-05-04 | 2019-07-16 | Google Llc | Systems and methods for caching structural elements of electronic documents |
US10382547B2 (en) * | 2017-01-31 | 2019-08-13 | Box, Inc. | Collaborative cloud-based document editing from a browser-enabled platform native application |
US10402485B2 (en) * | 2011-05-06 | 2019-09-03 | David H. Sitrick | Systems and methodologies providing controlled collaboration among a plurality of users |
US10491658B2 (en) * | 2016-12-30 | 2019-11-26 | Dropbox, Inc. | In-collaborative content item notifications in shared collaborative content items |
US10530854B2 (en) | 2014-05-30 | 2020-01-07 | Box, Inc. | Synchronization of permissioned content in cloud-based environments |
US10601894B1 (en) | 2015-09-28 | 2020-03-24 | Amazon Technologies, Inc. | Vector-based encoding for content rendering |
US10599671B2 (en) | 2013-01-17 | 2020-03-24 | Box, Inc. | Conflict resolution, retry condition management, and handling of problem files for the synchronization client to a cloud-based platform |
US10642928B2 (en) * | 2013-06-03 | 2020-05-05 | International Business Machines Corporation | Annotation collision detection in a question and answer system |
US10725968B2 (en) | 2013-05-10 | 2020-07-28 | Box, Inc. | Top down delete or unsynchronization on delete of and depiction of item synchronization with a synchronization client to a cloud-based platform |
US10762282B2 (en) | 2015-09-25 | 2020-09-01 | Amazon Technologies, Inc. | Content rendering |
US10846074B2 (en) | 2013-05-10 | 2020-11-24 | Box, Inc. | Identification and handling of items to be ignored for synchronization with a cloud-based platform by a synchronization client |
US11080165B1 (en) * | 2011-05-13 | 2021-08-03 | Amazon Technologies, Inc. | Hierarchical performance instrumentation injection |
US11233852B1 (en) * | 2021-04-06 | 2022-01-25 | Microsoft Technology Licensing, Llc | Computing system for co-controlling presentation of content |
US20220058052A1 (en) * | 2020-08-21 | 2022-02-24 | Leica Microsystems Cms Gmbh | Data processing management methods for imaging applications |
US11270069B1 (en) * | 2018-04-30 | 2022-03-08 | InVisionApp Inc. | Collaboration synchronization across devices |
US11308037B2 (en) | 2012-10-30 | 2022-04-19 | Google Llc | Automatic collaboration |
US20230077024A1 (en) * | 2011-12-29 | 2023-03-09 | Intel Corporation | Management of collaborative teams |
US11611595B2 (en) | 2011-05-06 | 2023-03-21 | David H. Sitrick | Systems and methodologies providing collaboration among a plurality of computing appliances, utilizing a plurality of areas of memory to store user input as associated with an associated computing appliance providing the input |
US20230169266A1 (en) * | 2010-10-08 | 2023-06-01 | Salesforce.Com, Inc. | Structured data in a business networking feed |
WO2023239402A1 (en) * | 2022-06-09 | 2023-12-14 | Google Llc | Using operational transforms to perform operations on parallel copies of a document model |
US11935007B1 (en) | 2022-12-27 | 2024-03-19 | Dropbox, Inc. | Generating collaborative content items to provide customizable graphical representations in online graphical user interfaces |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010059747A2 (en) | 2008-11-18 | 2010-05-27 | Workshare Technology, Inc. | Methods and systems for exact data match filtering |
US10783326B2 (en) | 2013-03-14 | 2020-09-22 | Workshare, Ltd. | System for tracking changes in a collaborative document editing environment |
US10025759B2 (en) | 2010-11-29 | 2018-07-17 | Workshare Technology, Inc. | Methods and systems for monitoring documents exchanged over email applications |
US10853319B2 (en) * | 2010-11-29 | 2020-12-01 | Workshare Ltd. | System and method for display of document comparisons on a remote device |
US11030163B2 (en) | 2011-11-29 | 2021-06-08 | Workshare, Ltd. | System for tracking and displaying changes in a set of related electronic documents |
US9613340B2 (en) | 2011-06-14 | 2017-04-04 | Workshare Ltd. | Method and system for shared document approval |
US9170990B2 (en) | 2013-03-14 | 2015-10-27 | Workshare Limited | Method and system for document retrieval with selective document comparison |
US10963584B2 (en) | 2011-06-08 | 2021-03-30 | Workshare Ltd. | Method and system for collaborative editing of a remotely stored document |
US10574729B2 (en) | 2011-06-08 | 2020-02-25 | Workshare Ltd. | System and method for cross platform document sharing |
US10880359B2 (en) | 2011-12-21 | 2020-12-29 | Workshare, Ltd. | System and method for cross platform document sharing |
AU2012269732B2 (en) * | 2011-06-17 | 2014-11-13 | Cruiser Interactive Pty Ltd | A system, method and computer program for interacting with data |
CN103530279A (en) * | 2012-07-06 | 2014-01-22 | 北京四维图新科技股份有限公司 | Electronic map editing collision detection method and device |
US11567907B2 (en) | 2013-03-14 | 2023-01-31 | Workshare, Ltd. | Method and system for comparing document versions encoded in a hierarchical representation |
WO2014153010A2 (en) * | 2013-03-14 | 2014-09-25 | Quip, Inc. | Systems and methods for concurrent online and offline document processing |
US10911492B2 (en) | 2013-07-25 | 2021-02-02 | Workshare Ltd. | System and method for securing documents prior to transmission |
US11130055B2 (en) | 2013-09-04 | 2021-09-28 | Nvidia Corporation | System and method for granting remote access to a video game executed on a video game console or network client |
US9898520B2 (en) * | 2014-03-25 | 2018-02-20 | Open Text Sa Ulc | Systems and methods for seamless access to remotely managed documents using synchronization of locally stored documents |
WO2015200495A1 (en) * | 2014-06-24 | 2015-12-30 | Google Inc. | Systems and methods for managing suggested edits in a collaborative document editing environment |
US10133723B2 (en) | 2014-12-29 | 2018-11-20 | Workshare Ltd. | System and method for determining document version geneology |
US11182551B2 (en) | 2014-12-29 | 2021-11-23 | Workshare Ltd. | System and method for determining document version geneology |
US9292482B1 (en) | 2015-04-30 | 2016-03-22 | Workiva Inc. | System and method for convergent document collaboration |
US10325014B2 (en) | 2015-04-30 | 2019-06-18 | Workiva Inc. | System and method for convergent document collaboration |
US10909080B2 (en) * | 2015-05-04 | 2021-02-02 | Microsoft Technology Licensing, Llc | System and method for implementing shared document edits in real-time |
TWI681474B (en) * | 2015-05-08 | 2020-01-01 | 日商Jsr股份有限公司 | Solder electrode manufacturing method, solder electrode, laminated body manufacturing method, laminated body, electronic component, and photosensitive resin composition for injection molding solder |
US11763013B2 (en) | 2015-08-07 | 2023-09-19 | Workshare, Ltd. | Transaction document management system and method |
US10290068B2 (en) | 2016-02-26 | 2019-05-14 | Navigatorsvrs, Inc. | Graphical platform for interacting with unstructured data |
US11287951B2 (en) * | 2016-09-16 | 2022-03-29 | Google Llc | Systems and methods for a touchscreen user interface for a collaborative editing tool |
US11003632B2 (en) | 2016-11-28 | 2021-05-11 | Open Text Sa Ulc | System and method for content synchronization |
US11301431B2 (en) | 2017-06-02 | 2022-04-12 | Open Text Sa Ulc | System and method for selective synchronization |
US10721084B2 (en) * | 2017-09-25 | 2020-07-21 | Microsoft Technology Licensing, Llc | Providing a private mode in asynchronous collaboration for a synchronous collaboration environment |
US10628631B1 (en) * | 2017-10-31 | 2020-04-21 | Amazon Technologies, Inc. | Document editing and feedback |
US11019002B2 (en) * | 2017-12-15 | 2021-05-25 | Google Llc | Secure electronic messaging with dynamic content |
US11755825B2 (en) | 2019-09-12 | 2023-09-12 | Workiva Inc. | Method, system, and computing device for facilitating private drafting |
LU101705B1 (en) * | 2020-03-26 | 2021-09-27 | Microsoft Technology Licensing Llc | Document control item |
US11100281B1 (en) | 2020-08-17 | 2021-08-24 | Workiva Inc. | System and method for maintaining links and revisions |
US11443108B2 (en) | 2020-08-17 | 2022-09-13 | Workiva Inc. | System and method for document management using branching |
US11100277B1 (en) | 2021-02-15 | 2021-08-24 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
US11354362B1 (en) | 2021-05-06 | 2022-06-07 | Workiva Inc. | System and method for copying linked documents |
US11640495B1 (en) | 2021-10-15 | 2023-05-02 | Workiva Inc. | Systems and methods for translation comments flowback |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6662210B1 (en) * | 1997-03-31 | 2003-12-09 | Ncr Corporation | Method of remote collaboration system |
US7039643B2 (en) * | 2001-04-10 | 2006-05-02 | Adobe Systems Incorporated | System, method and apparatus for converting and integrating media files |
US20110154185A1 (en) * | 2009-01-08 | 2011-06-23 | International Business Machines Corporation | Method for server-side logging of client browser state through markup language |
Family Cites Families (130)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5528743A (en) | 1993-05-27 | 1996-06-18 | Apple Computer, Inc. | Method and apparatus for inserting text on a pen-based computer system |
US5793966A (en) | 1995-12-01 | 1998-08-11 | Vermeer Technologies, Inc. | Computer system and computer-implemented process for creation and maintenance of online services |
US5761669A (en) | 1995-06-06 | 1998-06-02 | Microsoft Corporation | Controlling access to objects on multiple operating systems |
US6651108B2 (en) | 1995-08-14 | 2003-11-18 | Next Software, Inc. | Method and apparatus for generating object-oriented world wide web pages |
US5930813A (en) | 1995-12-21 | 1999-07-27 | Adobe Systems Incorporated | Method and system for designating objects |
US5758358A (en) | 1996-01-29 | 1998-05-26 | Microsoft Corporation | Method and system for reconciling sections of documents |
US6006239A (en) | 1996-03-15 | 1999-12-21 | Microsoft Corporation | Method and system for allowing multiple users to simultaneously edit a spreadsheet |
US5895476A (en) | 1996-09-09 | 1999-04-20 | Design Intelligence, Inc. | Design engine for automatic reformatting for design and media |
US6006252A (en) | 1996-10-08 | 1999-12-21 | Wolfe; Mark A. | System and method for communicating information relating to a network resource |
JP3739525B2 (en) | 1996-12-27 | 2006-01-25 | 富士通株式会社 | Variable delay circuit and semiconductor integrated circuit device |
JP3143079B2 (en) | 1997-05-30 | 2001-03-07 | 松下電器産業株式会社 | Dictionary index creation device and document search device |
US7031954B1 (en) | 1997-09-10 | 2006-04-18 | Google, Inc. | Document retrieval system with access control |
JPH11208130A (en) | 1998-01-23 | 1999-08-03 | Fujicopian Co Ltd | Thermal transfer recording medium |
AUPP252298A0 (en) | 1998-03-24 | 1998-04-23 | 80-20 Software Pty Limited | Document management software |
US6154738A (en) | 1998-03-27 | 2000-11-28 | Call; Charles Gainor | Methods and apparatus for disseminating product information via the internet using universal product codes |
US6243706B1 (en) | 1998-07-24 | 2001-06-05 | Avid Technology, Inc. | System and method for managing the creation and production of computer generated works |
US6377354B1 (en) | 1998-09-21 | 2002-04-23 | Microsoft Corporation | System and method for printing a document having merged text and graphics contained therein |
JP3904752B2 (en) | 1999-01-26 | 2007-04-11 | アルプス電気株式会社 | Reflective liquid crystal display device and manufacturing method thereof |
US6708309B1 (en) * | 1999-03-11 | 2004-03-16 | Roxio, Inc. | Method and system for viewing scalable documents |
US6512531B1 (en) | 1999-04-09 | 2003-01-28 | Adobe Systems Incorporated | Font navigation tool |
US7064757B1 (en) | 1999-05-07 | 2006-06-20 | Apple Computer, Inc. | Automatic synthesis of font tables for character layout |
US6501779B1 (en) | 1999-05-26 | 2002-12-31 | Nxi Communications, Inc. | Network communication system |
US7330875B1 (en) | 1999-06-15 | 2008-02-12 | Microsoft Corporation | System and method for recording a presentation for on-demand viewing over a computer network |
US6971105B1 (en) | 1999-07-29 | 2005-11-29 | Rehle Visual Communications Llc | Method, apparatus, and computer program product for deferred completion of multi-step user transaction applications |
US6327584B1 (en) | 1999-07-30 | 2001-12-04 | Hewlett-Packard Company | Apparatus and method for using version control to dynamically update files while the files are available for access |
JP3498020B2 (en) | 1999-09-29 | 2004-02-16 | Nec液晶テクノロジー株式会社 | Active matrix substrate and manufacturing method thereof |
US7047033B2 (en) | 2000-02-01 | 2006-05-16 | Infogin Ltd | Methods and apparatus for analyzing, processing and formatting network information such as web-pages |
US6704798B1 (en) | 2000-02-08 | 2004-03-09 | Hewlett-Packard Development Company, L.P. | Explicit server control of transcoding representation conversion at a proxy or client location |
US7009626B2 (en) | 2000-04-14 | 2006-03-07 | Picsel Technologies Limited | Systems and methods for generating visual representations of graphical data and digital document processing |
US7210099B2 (en) | 2000-06-12 | 2007-04-24 | Softview Llc | Resolution independent vector display of internet content |
US7035910B1 (en) | 2000-06-29 | 2006-04-25 | Microsoft Corporation | System and method for document isolation |
US6983316B1 (en) | 2000-07-18 | 2006-01-03 | Western Digital Ventures, Inc. | Method of and content delivery server for delivering content to a personal computer having a disk drive which includes a network address for the content delivery server and a server-contacting program |
AU2001287421A1 (en) | 2000-08-21 | 2002-03-04 | Thoughtslinger Corporation | Simultaneous multi-user document editing system |
US6972748B1 (en) | 2000-08-31 | 2005-12-06 | Microsoft Corporation | J-key input for computer systems |
US7685183B2 (en) | 2000-09-01 | 2010-03-23 | OP40, Inc | System and method for synchronizing assets on multi-tiered networks |
US7152203B2 (en) | 2000-09-11 | 2006-12-19 | Appeon Corporation | Independent update and assembly of web page elements |
US6717593B1 (en) | 2000-09-12 | 2004-04-06 | Avaya Technology Corp. | Mark-up language implementation of graphical or non-graphical user interfaces |
TW538275B (en) | 2000-09-18 | 2003-06-21 | Alps Electric Co Ltd | Reflective liquid crystal display device |
US20020035580A1 (en) | 2000-09-21 | 2002-03-21 | Yoshinori Tanabe | Computer readable medium containing HTML document generation program |
US20020133492A1 (en) | 2000-11-16 | 2002-09-19 | Samson Information Tech, L.L.C. | System and methods for web browser based document scanning, remote storage, and retrieval |
US6766334B1 (en) | 2000-11-21 | 2004-07-20 | Microsoft Corporation | Project-based configuration management method and apparatus |
US6879997B1 (en) | 2000-11-27 | 2005-04-12 | Nokia Corporation | Synchronously shared online documents |
US8255791B2 (en) | 2000-11-29 | 2012-08-28 | Dov Koren | Collaborative, flexible, interactive real-time displays |
US20020129096A1 (en) | 2001-02-14 | 2002-09-12 | Mansour Peter M. | Platform-independent distributed user interface client architecture |
KR100685946B1 (en) | 2001-03-02 | 2007-02-23 | 엘지.필립스 엘시디 주식회사 | Liquid crystal display panel and method for fabricating the same |
GB2373085B (en) | 2001-03-08 | 2004-10-06 | Ibm | Method, computer program and system for style sheet generation |
US6725219B2 (en) | 2001-03-13 | 2004-04-20 | Seiko Epson Corporation | Internet presentation system |
JP3692054B2 (en) | 2001-05-21 | 2005-09-07 | 株式会社東芝 | Document structure conversion method, document structure conversion apparatus, and program |
JP4081643B2 (en) | 2001-08-01 | 2008-04-30 | 株式会社日立製作所 | Liquid crystal display |
CN1537285A (en) | 2001-08-03 | 2004-10-13 | �ʼҷ����ֵ��ӹɷ�����˾ | Method and system for updating document |
US7529778B1 (en) | 2001-12-12 | 2009-05-05 | Microsoft Corporation | System and method for providing access to consistent point-in-time file versions |
US6938070B2 (en) | 2001-12-17 | 2005-08-30 | Dassault Systemes | Conflict resolution for collaborative work system |
US20030179230A1 (en) | 2002-03-25 | 2003-09-25 | Gerry Seidman | Method and apparatus for providing remote peer-to-peer collaborative user interfaces |
US7114160B2 (en) | 2002-04-17 | 2006-09-26 | Sbc Technology Resources, Inc. | Web content customization via adaptation Web services |
JP3857663B2 (en) | 2002-04-30 | 2006-12-13 | 株式会社東芝 | Structured document editing apparatus, structured document editing method and program |
US7190468B2 (en) | 2002-07-17 | 2007-03-13 | Hewlett-Packard Development Company, L.P. | Background document rendering system and method |
US8374966B1 (en) * | 2002-08-01 | 2013-02-12 | Oracle International Corporation | In memory streaming with disk backup and recovery of messages captured from a database redo stream |
US6928476B2 (en) | 2002-08-23 | 2005-08-09 | Mirra, Inc. | Peer to peer remote data storage and collaboration |
CA2421825C (en) | 2002-09-20 | 2012-07-10 | Mks Inc. | Version control system for software development |
US7231597B1 (en) | 2002-10-07 | 2007-06-12 | Microsoft Corporation | Method, apparatus, and computer-readable medium for creating asides within an electronic document |
US20040088374A1 (en) | 2002-10-31 | 2004-05-06 | Webb James D. | Aggregation and sharing of patient data |
US7818678B2 (en) | 2002-10-31 | 2010-10-19 | Litera Technology Llc | Collaborative document development and review system |
US7904807B2 (en) | 2002-11-05 | 2011-03-08 | Xerox Corporation | System and method for copying formatting information between Web pages |
EP1623302A4 (en) | 2003-03-18 | 2012-11-21 | Networks Dynamics Inc | Network operating system and method |
GB0307714D0 (en) | 2003-04-03 | 2003-05-07 | Ibm | System and method for information collation |
US7506069B2 (en) | 2003-04-25 | 2009-03-17 | Sap Ag | Accessing data in a computer network |
US7426543B2 (en) | 2003-04-25 | 2008-09-16 | Sap Ag | Accessing data stored in multiple locations |
US7349929B2 (en) | 2003-04-25 | 2008-03-25 | Sap Ag | Accessing data based on user identity |
US7890928B2 (en) | 2003-07-26 | 2011-02-15 | Pilla Gurumurty Patrudu | Mechanism and system for representing and processing rules |
US20050033811A1 (en) | 2003-08-07 | 2005-02-10 | International Business Machines Corporation | Collaborative email |
JP2005131915A (en) | 2003-10-30 | 2005-05-26 | Seiko Epson Corp | Printing apparatus, printing method and program for printing apparatus |
US20050125461A1 (en) | 2003-12-08 | 2005-06-09 | International Business Machines Corporation | Version control of metadata |
GB2410814A (en) | 2004-02-05 | 2005-08-10 | Stephen John Doyle | Document conversion enabling browser content across different types of terminal devices |
US7812860B2 (en) | 2004-04-01 | 2010-10-12 | Exbiblio B.V. | Handheld device for capturing text from both a document printed on paper and a document displayed on a dynamic display device |
US7818679B2 (en) | 2004-04-20 | 2010-10-19 | Microsoft Corporation | Method, system, and apparatus for enabling near real time collaboration on an electronic document through a plurality of computer systems |
US7487448B2 (en) | 2004-04-30 | 2009-02-03 | Microsoft Corporation | Document mark up methods and systems |
US20060031751A1 (en) | 2004-05-26 | 2006-02-09 | Shai Ehud | Method for creating editable web sites with increased performance & stability |
US7707498B2 (en) | 2004-09-30 | 2010-04-27 | Microsoft Corporation | Specific type content manager in an electronic document |
US7656543B2 (en) | 2004-11-12 | 2010-02-02 | Hewlett-Packard Development Company, L.P. | Albuming images |
US8065604B2 (en) | 2004-12-30 | 2011-11-22 | Massachusetts Institute Of Technology | Techniques for relating arbitrary metadata to media files |
US7792788B2 (en) | 2005-03-04 | 2010-09-07 | Microsoft Corporation | Method and system for resolving conflicts operations in a collaborative editing environment |
US7653875B2 (en) | 2005-04-07 | 2010-01-26 | Microsoft Corporation | Browser sensitive web content delivery |
US20060248121A1 (en) | 2005-04-15 | 2006-11-02 | Michael Cacenco | System and method for supporting packaging, publishing and republishing of wireless component applications |
US7491399B2 (en) | 2005-06-23 | 2009-02-17 | University Of Maryland Biotechnology Institute | In Ovo vaccine against infectious bursal disease |
US8539604B2 (en) | 2005-08-03 | 2013-09-17 | International Business Machines Corporation | Method, system and program product for versioning access control settings |
US7953696B2 (en) | 2005-09-09 | 2011-05-31 | Microsoft Corporation | Real-time synchronization of XML data between applications |
US20070061714A1 (en) | 2005-09-09 | 2007-03-15 | Microsoft Corporation | Quick styles for formatting of documents |
CN101300621B (en) | 2005-09-13 | 2010-11-10 | 时空3D公司 | System and method for providing three-dimensional graphical user interface |
US20070073899A1 (en) | 2005-09-15 | 2007-03-29 | Judge Francis P | Techniques to synchronize heterogeneous data sources |
US7958448B2 (en) | 2005-10-25 | 2011-06-07 | Celartem, Inc. | Systems, methods, user interfaces, and computer-readable media for activating and managing fonts |
CA2524527A1 (en) | 2005-10-26 | 2007-04-26 | Ibm Canada Limited - Ibm Canada Limitee | Systems, methods and tools for facilitating group collaborations |
US7774703B2 (en) | 2006-02-09 | 2010-08-10 | Microsoft Corporation | Virtual shadow awareness for multi-user editors |
US20070220068A1 (en) | 2006-02-15 | 2007-09-20 | Bruce Thompson | Electronic document and business process control |
US8307119B2 (en) | 2006-03-31 | 2012-11-06 | Google Inc. | Collaborative online spreadsheet application |
US7743018B2 (en) | 2006-04-10 | 2010-06-22 | International Business Machines Corporation | Transient storage in distributed collaborative computing environments |
US8230351B2 (en) | 2006-04-11 | 2012-07-24 | Sri International | Method and apparatus for collaborative work |
US7769727B2 (en) * | 2006-05-31 | 2010-08-03 | Microsoft Corporation | Resolving update-delete conflicts |
JP4795127B2 (en) | 2006-06-06 | 2011-10-19 | 三菱電機株式会社 | Liquid crystal display device and manufacturing method thereof |
US8745227B2 (en) | 2006-06-07 | 2014-06-03 | Apple Inc. | Distributed secure content delivery |
US8250082B2 (en) | 2006-06-23 | 2012-08-21 | Microsoft Corporation | Cross domain communication |
US20080028302A1 (en) | 2006-07-31 | 2008-01-31 | Steffen Meschkat | Method and apparatus for incrementally updating a web page |
US20080059539A1 (en) | 2006-08-08 | 2008-03-06 | Richard Chin | Document Collaboration System and Method |
JP4979312B2 (en) | 2006-09-09 | 2012-07-18 | ソニー株式会社 | Information processing apparatus, information processing method, and computer program |
US7624145B2 (en) | 2007-01-06 | 2009-11-24 | Microsoft Corporation | Persistent collaborative framework for interactive web applications |
US8019780B1 (en) | 2007-03-30 | 2011-09-13 | Google Inc. | Handling document revision history information in the presence of a multi-user permissions model |
US8190987B2 (en) | 2007-10-25 | 2012-05-29 | Microsoft Corporation | Private views of data and local calculations during real time collaboration |
US20090192845A1 (en) | 2008-01-30 | 2009-07-30 | Microsoft Corporation | Integrated real time collaboration experiences with online workspace |
US9436927B2 (en) | 2008-03-14 | 2016-09-06 | Microsoft Technology Licensing, Llc | Web-based multiuser collaboration |
GB2458388A (en) | 2008-03-21 | 2009-09-23 | Dressbot Inc | A collaborative online shopping environment, virtual mall, store, etc. in which payments may be shared, products recommended and users modelled. |
US7478330B1 (en) | 2008-04-30 | 2009-01-13 | International Business Machines Corporation | Systems and methods involving improved web browsing |
US8209706B2 (en) | 2008-06-27 | 2012-06-26 | Microsoft Corporation | Inter-frame messaging between different domains |
US8321783B2 (en) | 2008-09-30 | 2012-11-27 | Apple Inc. | Visualizing content positioning within a document using layers |
US8073812B2 (en) | 2008-10-15 | 2011-12-06 | Microsoft Corporation | Preserving user intention in distributed data systems |
US9785914B2 (en) * | 2008-12-08 | 2017-10-10 | Adobe Systems Incorporated | Collaborative review apparatus, systems, and methods |
US20100153948A1 (en) | 2008-12-11 | 2010-06-17 | Ghost, Inc. | Combined web and local computing environment |
JP2010181978A (en) | 2009-02-03 | 2010-08-19 | Seiko Epson Corp | Collaborative work apparatus and method of controlling collaborative work |
US8775939B2 (en) | 2009-02-20 | 2014-07-08 | Fuji Xerox Co., Ltd. | Systems and methods for audience-enabled access to presentation content |
US8700776B2 (en) | 2009-03-23 | 2014-04-15 | Google Inc. | System and method for editing a conversation in a hosted conversation system |
US8446377B2 (en) | 2009-03-24 | 2013-05-21 | Microsoft Corporation | Dual screen portable touch sensitive computing system |
US8782524B2 (en) | 2009-03-31 | 2014-07-15 | Samsung Electronics Co., Ltd | Method and apparatus for controlling presentation slides |
US8612380B2 (en) * | 2009-05-26 | 2013-12-17 | Adobe Systems Incorporated | Web-based collaboration for editing electronic documents |
US8179417B2 (en) | 2009-07-22 | 2012-05-15 | Hewlett-Packard Development Company, L.P. | Video collaboration |
US8327812B2 (en) | 2009-07-24 | 2012-12-11 | Deere & Company | Nucleate boiling cooling system |
US9049258B2 (en) | 2009-09-17 | 2015-06-02 | Border Stylo, LLC | Systems and methods for anchoring content objects to structured documents |
JP5503300B2 (en) | 2010-01-14 | 2014-05-28 | 株式会社ジャパンディスプレイ | Method for manufacturing liquid crystal display device, liquid crystal display device and electronic apparatus |
US20110178981A1 (en) | 2010-01-21 | 2011-07-21 | International Business Machines Corporation | Collecting community feedback for collaborative document development |
US8572022B2 (en) * | 2010-03-02 | 2013-10-29 | Microsoft Corporation | Automatic synchronization conflict resolution |
US8892632B2 (en) | 2010-06-04 | 2014-11-18 | Microsoft Corporation | Client-server interaction frequency control |
US20120072819A1 (en) | 2010-09-21 | 2012-03-22 | Google, Inc. | Asynchronous Redrawing in Online Document Processors |
DE202011110895U1 (en) | 2010-11-02 | 2017-01-31 | Google Inc. | Real-time synchronized editing of documents by multiple users for blogging |
-
2011
- 2011-04-12 US US13/085,325 patent/US20110252312A1/en not_active Abandoned
- 2011-04-12 EP EP11717831A patent/EP2558960A1/en not_active Withdrawn
- 2011-04-12 WO PCT/US2011/032162 patent/WO2011130307A1/en active Application Filing
- 2011-04-12 AU AU2011240695A patent/AU2011240695A1/en not_active Abandoned
- 2011-04-12 CA CA2795917A patent/CA2795917A1/en not_active Abandoned
- 2011-10-12 US US13/271,682 patent/US20120030563A1/en not_active Abandoned
-
2016
- 2016-01-06 US US14/989,417 patent/US10678999B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6662210B1 (en) * | 1997-03-31 | 2003-12-09 | Ncr Corporation | Method of remote collaboration system |
US7039643B2 (en) * | 2001-04-10 | 2006-05-02 | Adobe Systems Incorporated | System, method and apparatus for converting and integrating media files |
US20110154185A1 (en) * | 2009-01-08 | 2011-06-23 | International Business Machines Corporation | Method for server-side logging of client browser state through markup language |
Non-Patent Citations (3)
Title |
---|
"Googlepedia: The Ultimate Google Resource", Third Edition, Pages 1-24 (Pages 276-287 in original source). * |
"Using Adobe Buzzword", 2008, Pages 1-35. * |
Holzner, Steven; "Google Docs 4 Everyone", February 9, 2009; Pages 30-41, 104-107. * |
Cited By (125)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8788319B2 (en) | 2005-12-30 | 2014-07-22 | Microsoft Corporation | Social context monitor |
US20070156522A1 (en) * | 2005-12-30 | 2007-07-05 | Microsoft Corporation | Social context monitor |
US20110252303A1 (en) * | 2010-04-12 | 2011-10-13 | Micah Lemonik | Rich Content in a Browser-Based Work Processor |
US20110252304A1 (en) * | 2010-04-12 | 2011-10-13 | Google Inc. | Rich Browser-Based Word Processor |
US9448978B2 (en) | 2010-04-12 | 2016-09-20 | Google Inc. | Rich browser-based word processor |
US9384176B2 (en) | 2010-04-12 | 2016-07-05 | Google Inc. | Rich content in a browser-based word processor |
US8413045B2 (en) * | 2010-04-12 | 2013-04-02 | Google Inc. | Rich browser-based word processor |
US8479090B2 (en) * | 2010-04-12 | 2013-07-02 | Google Inc. | Rich content in a browser-based work processor |
US9286271B2 (en) | 2010-05-26 | 2016-03-15 | Google Inc. | Providing an electronic document collection |
US9292479B2 (en) | 2010-05-26 | 2016-03-22 | Google Inc. | Providing an electronic document collection |
US20120054677A1 (en) * | 2010-08-30 | 2012-03-01 | Sap Ag | Dynamic view computation and display |
US20230169266A1 (en) * | 2010-10-08 | 2023-06-01 | Salesforce.Com, Inc. | Structured data in a business networking feed |
US20120173612A1 (en) * | 2010-12-06 | 2012-07-05 | Zoho Corporation | Editing an unhosted third party application |
US20180183854A1 (en) * | 2010-12-06 | 2018-06-28 | Zoho Corporation Private Unlimited | Editing an unhosted third party application |
US11539781B2 (en) * | 2010-12-06 | 2022-12-27 | Zoho Corporation Private Limited | Editing an unhosted third party application |
US9930092B2 (en) * | 2010-12-06 | 2018-03-27 | Zoho Corporation Private Limited | Editing an unhosted third party application |
US10951681B2 (en) * | 2010-12-06 | 2021-03-16 | Zoho Corporation Private Limited | Editing an unhosted third party application |
US11003842B2 (en) * | 2011-05-06 | 2021-05-11 | David Howard Sitrick | System and methodologies for collaboration utilizing an underlying common display presentation |
US11611595B2 (en) | 2011-05-06 | 2023-03-21 | David H. Sitrick | Systems and methodologies providing collaboration among a plurality of computing appliances, utilizing a plurality of areas of memory to store user input as associated with an associated computing appliance providing the input |
US10402485B2 (en) * | 2011-05-06 | 2019-09-03 | David H. Sitrick | Systems and methodologies providing controlled collaboration among a plurality of users |
US11080165B1 (en) * | 2011-05-13 | 2021-08-03 | Amazon Technologies, Inc. | Hierarchical performance instrumentation injection |
US20120299843A1 (en) * | 2011-05-23 | 2012-11-29 | Kim Hak-Doo | Real-time object transfer and information sharing method |
US20120324372A1 (en) * | 2011-06-15 | 2012-12-20 | Sap Ag | Systems and Methods for Augmenting Physical Media from Multiple Locations |
US9858552B2 (en) * | 2011-06-15 | 2018-01-02 | Sap Ag | Systems and methods for augmenting physical media from multiple locations |
US9652741B2 (en) | 2011-07-08 | 2017-05-16 | Box, Inc. | Desktop application for access and interaction with workspaces in a cloud-based content management system and synchronization mechanisms thereof |
US20140136403A1 (en) * | 2011-09-14 | 2014-05-15 | Microsoft Corporation | Multi tenancy for single tenancy applications |
US11089088B2 (en) * | 2011-09-14 | 2021-08-10 | Microsoft Technology Licensing, Llc | Multi tenancy for single tenancy applications |
US9773051B2 (en) | 2011-11-29 | 2017-09-26 | Box, Inc. | Mobile platform file and folder selection functionalities for offline access and synchronization |
US11853320B2 (en) | 2011-11-29 | 2023-12-26 | Box, Inc. | Mobile platform file and folder selection functionalities for offline access and synchronization |
US11537630B2 (en) | 2011-11-29 | 2022-12-27 | Box, Inc. | Mobile platform file and folder selection functionalities for offline access and synchronization |
US10909141B2 (en) | 2011-11-29 | 2021-02-02 | Box, Inc. | Mobile platform file and folder selection functionalities for offline access and synchronization |
US9542366B2 (en) | 2011-12-20 | 2017-01-10 | Apple Inc. | Smart text in document chat |
US20230077024A1 (en) * | 2011-12-29 | 2023-03-09 | Intel Corporation | Management of collaborative teams |
US20130185651A1 (en) * | 2012-01-18 | 2013-07-18 | Microsoft Corporation | People presence detection in a multidocument knowledge base |
WO2013109480A1 (en) * | 2012-01-18 | 2013-07-25 | Microsoft Corporation | People presence detection in a multidocument knowledge base |
US9542374B1 (en) | 2012-01-20 | 2017-01-10 | Google Inc. | Method and apparatus for applying revision specific electronic signatures to an electronically stored document |
US20150378974A1 (en) * | 2012-03-19 | 2015-12-31 | Litera Corporation | System and method for synchronizing bi-directional document management |
US11256854B2 (en) | 2012-03-19 | 2022-02-22 | Litera Corporation | Methods and systems for integrating multiple document versions |
US9348802B2 (en) * | 2012-03-19 | 2016-05-24 | Litéra Corporation | System and method for synchronizing bi-directional document management |
US20130246901A1 (en) * | 2012-03-19 | 2013-09-19 | Litera Technologies, LLC. | System and method for synchronizing bi-directional document management |
US9367570B1 (en) * | 2012-04-09 | 2016-06-14 | Google Inc. | Ad hoc queryable JSON with audit trails |
EP2836923A4 (en) * | 2012-04-10 | 2016-01-13 | Blackberry Ltd | Methods and apparatus to copy and insert information |
US20130268850A1 (en) * | 2012-04-10 | 2013-10-10 | Nikos Kyprianou | Methods and apparatus to copy and insert information |
US9575981B2 (en) | 2012-04-11 | 2017-02-21 | Box, Inc. | Cloud service enabled to handle a set of files depicted to a user as a single file in a native operating system |
US9396216B2 (en) | 2012-05-04 | 2016-07-19 | Box, Inc. | Repository redundancy implementation of a system which incrementally updates clients with events that occurred via a cloud-enabled platform |
US20130325795A1 (en) * | 2012-05-31 | 2013-12-05 | Google Inc. | Systems and Methods for Dynamically Loading Web Fonts and Dynamic Availability for Fonts Based on Language Settings |
US9838444B2 (en) | 2012-05-31 | 2017-12-05 | Google Llc | Systems and methods for dynamically providing fonts based on language settings |
US20150199316A1 (en) * | 2012-06-11 | 2015-07-16 | Brian Lewis Cairns | System and Method of Document Embedding in Collaborative Editors |
US9286276B2 (en) * | 2012-06-11 | 2016-03-15 | Google Inc. | System and method of document embedding in collaborative editors |
US9794256B2 (en) | 2012-07-30 | 2017-10-17 | Box, Inc. | System and method for advanced control tools for administrators in a cloud-based service |
US9558202B2 (en) | 2012-08-27 | 2017-01-31 | Box, Inc. | Server side techniques for reducing database workload in implementing selective subfolder synchronization in a cloud-based environment |
US9372833B2 (en) | 2012-09-14 | 2016-06-21 | David H. Sitrick | Systems and methodologies for document processing and interacting with a user, providing storing of events representative of document edits relative to a document; selection of a selected set of document edits; generating presentation data responsive to said selected set of documents edits and the stored events; and providing a display presentation responsive to the presentation data |
US20140082473A1 (en) * | 2012-09-14 | 2014-03-20 | David H. Sitrick | Systems And Methodologies Of Event Content Based Document Editing, Generating Of Respective Events Comprising Event Content, Then Defining A Selected Set Of Events, And Generating Of A Display Presentation Responsive To Processing Said Selected Set Of Events, For One To Multiple Users |
US9553758B2 (en) | 2012-09-18 | 2017-01-24 | Box, Inc. | Sandboxing individual applications to specific user folders in a cloud-based service |
US11308037B2 (en) | 2012-10-30 | 2022-04-19 | Google Llc | Automatic collaboration |
US9529916B1 (en) | 2012-10-30 | 2016-12-27 | Google Inc. | Managing documents based on access context |
US11748311B1 (en) | 2012-10-30 | 2023-09-05 | Google Llc | Automatic collaboration |
US9384285B1 (en) | 2012-12-18 | 2016-07-05 | Google Inc. | Methods for identifying related documents |
US10235383B2 (en) | 2012-12-19 | 2019-03-19 | Box, Inc. | Method and apparatus for synchronization of items with read-only permissions in a cloud-based environment |
US9396245B2 (en) | 2013-01-02 | 2016-07-19 | Box, Inc. | Race condition handling in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform |
US9953036B2 (en) | 2013-01-09 | 2018-04-24 | Box, Inc. | File system monitoring in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform |
US9507795B2 (en) | 2013-01-11 | 2016-11-29 | Box, Inc. | Functionalities, features, and user interface of a synchronization client to a cloud-based environment |
US10599671B2 (en) | 2013-01-17 | 2020-03-24 | Box, Inc. | Conflict resolution, retry condition management, and handling of problem files for the synchronization client to a cloud-based platform |
US11588858B2 (en) | 2013-01-23 | 2023-02-21 | The Privacy Factor, LLC | Monitoring a privacy rating for an application or website |
US10893074B2 (en) | 2013-01-23 | 2021-01-12 | The Privacy Factor, LLC | Monitoring a privacy rating for an application or website |
US20180248914A1 (en) * | 2013-01-23 | 2018-08-30 | The Privacy Factor, LLC | Monitoring a privacy rating for an application or website |
US10498769B2 (en) * | 2013-01-23 | 2019-12-03 | The Privacy Factor, LLC | Monitoring a privacy rating for an application or website |
US20140258371A1 (en) * | 2013-03-11 | 2014-09-11 | John Hammersley | Collaborative editing |
US9729672B2 (en) * | 2013-03-11 | 2017-08-08 | Writelatex Limited | Collaborative editing |
US20130218829A1 (en) * | 2013-03-15 | 2013-08-22 | Deneen Lizette Martinez | Document management system and method |
US10846074B2 (en) | 2013-05-10 | 2020-11-24 | Box, Inc. | Identification and handling of items to be ignored for synchronization with a cloud-based platform by a synchronization client |
US10725968B2 (en) | 2013-05-10 | 2020-07-28 | Box, Inc. | Top down delete or unsynchronization on delete of and depiction of item synchronization with a synchronization client to a cloud-based platform |
US10642928B2 (en) * | 2013-06-03 | 2020-05-05 | International Business Machines Corporation | Annotation collision detection in a question and answer system |
US10877937B2 (en) | 2013-06-13 | 2020-12-29 | Box, Inc. | Systems and methods for synchronization event building and/or collapsing by a synchronization component of a cloud-based platform |
US9633037B2 (en) | 2013-06-13 | 2017-04-25 | Box, Inc | Systems and methods for synchronization event building and/or collapsing by a synchronization component of a cloud-based platform |
US10025782B2 (en) | 2013-06-18 | 2018-07-17 | Litera Corporation | Systems and methods for multiple document version collaboration and management |
US11531648B2 (en) | 2013-06-21 | 2022-12-20 | Box, Inc. | Maintaining and updating file system shadows on a local device by a synchronization client of a cloud-based platform |
US9805050B2 (en) | 2013-06-21 | 2017-10-31 | Box, Inc. | Maintaining and updating file system shadows on a local device by a synchronization client of a cloud-based platform |
US9514113B1 (en) | 2013-07-29 | 2016-12-06 | Google Inc. | Methods for automatic footnote generation |
US9535924B2 (en) * | 2013-07-30 | 2017-01-03 | Box, Inc. | Scalability improvement in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform |
US20150039556A1 (en) * | 2013-07-30 | 2015-02-05 | Box, Inc. | Scalability improvement in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform |
US9842113B1 (en) | 2013-08-27 | 2017-12-12 | Google Inc. | Context-based file selection |
US11681654B2 (en) | 2013-08-27 | 2023-06-20 | Google Llc | Context-based file selection |
US10817842B2 (en) * | 2013-08-30 | 2020-10-27 | Drumwave Inc. | Systems and methods for providing a collective post |
US20150067058A1 (en) * | 2013-08-30 | 2015-03-05 | RedDrummer LLC | Systems and methods for providing a collective post |
US9529791B1 (en) | 2013-12-12 | 2016-12-27 | Google Inc. | Template and content aware document and template editing |
US10530854B2 (en) | 2014-05-30 | 2020-01-07 | Box, Inc. | Synchronization of permissioned content in cloud-based environments |
US9703763B1 (en) | 2014-08-14 | 2017-07-11 | Google Inc. | Automatic document citations by utilizing copied content for candidate sources |
US20160147722A1 (en) * | 2014-11-24 | 2016-05-26 | Google Inc. | Systems and Methods for Editing a File in a Non-Native Application Using an Application Engine |
US9639511B2 (en) * | 2014-11-24 | 2017-05-02 | Google Inc. | Systems and methods for editing a file in a non-native application using an application engine |
US20160321226A1 (en) * | 2015-05-01 | 2016-11-03 | Microsoft Technology Licensing, Llc | Insertion of unsaved content via content channel |
US11170057B1 (en) | 2015-05-04 | 2021-11-09 | Google Llc | Systems and methods for caching structural elements of electronic documents |
US10353960B1 (en) * | 2015-05-04 | 2019-07-16 | Google Llc | Systems and methods for caching structural elements of electronic documents |
US20170039170A1 (en) * | 2015-08-04 | 2017-02-09 | Google Inc. | Systems and methods for interactively presenting a visible portion of a rendering surface on a user device |
US11537278B2 (en) * | 2015-08-04 | 2022-12-27 | Google Llc | Interactively presenting a visible portion of a rendering surface on a user device |
US10990258B2 (en) * | 2015-08-04 | 2021-04-27 | Google Llc | Interactively presenting a visible portion of a rendering surface on a user device |
US10296580B1 (en) | 2015-09-18 | 2019-05-21 | Amazon Technologies, Inc. | Delivering parsed content items |
US10762282B2 (en) | 2015-09-25 | 2020-09-01 | Amazon Technologies, Inc. | Content rendering |
US10241983B1 (en) | 2015-09-28 | 2019-03-26 | Amazon Technologies, Inc. | Vector-based encoding for content rendering |
US10601894B1 (en) | 2015-09-28 | 2020-03-24 | Amazon Technologies, Inc. | Vector-based encoding for content rendering |
US10341345B1 (en) | 2015-12-15 | 2019-07-02 | Amazon Technologies, Inc. | Network browser configuration |
US10348797B1 (en) | 2015-12-15 | 2019-07-09 | Amazon Technologies, Inc. | Network browser configuration |
US10893081B2 (en) * | 2016-01-29 | 2021-01-12 | Dropbox, Inc. | Real time collaboration and document editing by multiple participants in a content management system |
US20170257405A1 (en) * | 2016-01-29 | 2017-09-07 | Dropbox, Inc. | Real Time Collaboration And Document Editing By Multiple Participants In A Content Management System |
US11172004B2 (en) * | 2016-01-29 | 2021-11-09 | Dropbox, Inc. | Real time collaboration and document editing by multiple participants in a content management system |
US9667676B1 (en) * | 2016-01-29 | 2017-05-30 | Dropbox, Inc. | Real time collaboration and document editing by multiple participants in a content management system |
US10298630B2 (en) * | 2016-01-29 | 2019-05-21 | Dropbox, Inc. | Real time collaboration and document editing by multiple participants in a content management system |
US20190129889A1 (en) * | 2016-08-04 | 2019-05-02 | Hancom Inc. | Document cooperation supporting apparatus for supporting simultaneous edit of document, and operating method thereof |
US11409706B2 (en) | 2016-08-04 | 2022-08-09 | Hancom Inc. | Document cooperation supporting apparatus for supporting simultaneous edit of document, and operating method thereof |
US20180074998A1 (en) * | 2016-09-13 | 2018-03-15 | Microsoft Technology Licensing, Llc | Visual feedback for broken text selection |
US10374999B2 (en) * | 2016-12-29 | 2019-08-06 | Dropbox, Inc. | Comment management in shared documents |
US20180191660A1 (en) * | 2016-12-29 | 2018-07-05 | Dropbox, Inc. | Comment management in shared documents |
US11128691B2 (en) * | 2016-12-30 | 2021-09-21 | Dropbox, Inc. | In-collaborative content item notifications in shared collaborative content items |
US10491658B2 (en) * | 2016-12-30 | 2019-11-26 | Dropbox, Inc. | In-collaborative content item notifications in shared collaborative content items |
US11019144B2 (en) * | 2017-01-31 | 2021-05-25 | Box, Inc. | Collaborative cloud-based document editing from a browser-enabled platform native application |
US10382547B2 (en) * | 2017-01-31 | 2019-08-13 | Box, Inc. | Collaborative cloud-based document editing from a browser-enabled platform native application |
US10585570B2 (en) * | 2017-05-22 | 2020-03-10 | Dropbox, Inc. | Author sharing and recipient creation of copied collaborative content items |
US20180335935A1 (en) * | 2017-05-22 | 2018-11-22 | Dropbox, Inc. | Author Sharing and Recipient Creation Of Copied Collaborative Content Items |
US11270069B1 (en) * | 2018-04-30 | 2022-03-08 | InVisionApp Inc. | Collaboration synchronization across devices |
US20220058052A1 (en) * | 2020-08-21 | 2022-02-24 | Leica Microsystems Cms Gmbh | Data processing management methods for imaging applications |
US11797337B2 (en) * | 2020-08-21 | 2023-10-24 | Leica Microsystems Cms Gmbh | Data processing management methods for imaging applications |
US11811869B2 (en) | 2021-04-06 | 2023-11-07 | Microsoft Technology Licensing, Llc | Computing system for co-controlling presentation of content |
US11233852B1 (en) * | 2021-04-06 | 2022-01-25 | Microsoft Technology Licensing, Llc | Computing system for co-controlling presentation of content |
WO2023239402A1 (en) * | 2022-06-09 | 2023-12-14 | Google Llc | Using operational transforms to perform operations on parallel copies of a document model |
US11935007B1 (en) | 2022-12-27 | 2024-03-19 | Dropbox, Inc. | Generating collaborative content items to provide customizable graphical representations in online graphical user interfaces |
Also Published As
Publication number | Publication date |
---|---|
AU2011240695A1 (en) | 2012-11-01 |
WO2011130307A1 (en) | 2011-10-20 |
US10678999B2 (en) | 2020-06-09 |
CA2795917A1 (en) | 2011-10-20 |
EP2558960A1 (en) | 2013-02-20 |
US20120030563A1 (en) | 2012-02-02 |
US20160117298A1 (en) | 2016-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10678999B2 (en) | Real-time collaboration in a hosted word processor | |
US10082927B2 (en) | Collaborative cursors in a hosted word processor | |
US8479090B2 (en) | Rich content in a browser-based work processor | |
US9448978B2 (en) | Rich browser-based word processor | |
AU2011240674A1 (en) | Collaborative cursors in a hosted word processor | |
US9720898B2 (en) | Row heights in electronic documents | |
US20110252335A1 (en) | Zooming in a Web Browser | |
US8839457B2 (en) | Image storage in electronic documents | |
AU2015202042A1 (en) | Rich browser-based word processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |