Mailspring/packages/client-app/docs/classes/ComposerExtension.html

1578 lines
40 KiB
HTML

<!DOCTYPE HTML>
<html lang="" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>ComposerExtension · Nylas Mail Plugin SDK</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.2">
<link rel="stylesheet" href="../gitbook/style.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-anchors/plugin.css">
<link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="../styles/website.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="ContenteditableExtension.html" />
<link rel="shortcut icon" href='../img/favicon.png' type="image/x-icon">
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="Type to search" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" >
<span>
Nylas Mail SDK Guides
</span>
</li>
<li class="chapter " data-level="1.2" data-path="../">
<a href="../">
Introduction
</a>
</li>
<li class="chapter " data-level="1.3" data-path="../guides/GettingStarted.html">
<a href="../guides/GettingStarted.html">
Getting Started
</a>
</li>
<li class="chapter " data-level="1.4" data-path="../guides/GettingStarted-2.html">
<a href="../guides/GettingStarted-2.html">
Getting Started Part 2
</a>
</li>
<li class="chapter " data-level="1.5" data-path="../guides/PackageOverview.html">
<a href="../guides/PackageOverview.html">
Building a Package
</a>
</li>
<li class="chapter " data-level="1.6" data-path="../guides/InterfaceConcepts.html">
<a href="../guides/InterfaceConcepts.html">
Interface Concepts
</a>
</li>
<li class="chapter " data-level="1.7" data-path="../guides/React.html">
<a href="../guides/React.html">
UI Components
</a>
</li>
<li class="chapter " data-level="1.8" data-path="../guides/Architecture.html">
<a href="../guides/Architecture.html">
Application Architecture
</a>
</li>
<li class="chapter " data-level="1.9" data-path="../guides/Debugging.html">
<a href="../guides/Debugging.html">
Debugging Nylas Mail
</a>
</li>
<li class="chapter " data-level="1.10" data-path="../guides/Database.html">
<a href="../guides/Database.html">
Accessing the Database
</a>
</li>
<li class="chapter " data-level="1.11" data-path="../guides/ComposerExtensions.html">
<a href="../guides/ComposerExtensions.html">
Extending the Composer
</a>
</li>
<li class="chapter " data-level="1.12" data-path="../guides/WritingSpecs.html">
<a href="../guides/WritingSpecs.html">
Writing Tests
</a>
</li>
<li class="chapter " data-level="1.13" data-path="../guides/IntegrationTesting.html">
<a href="../guides/IntegrationTesting.html">
Integration Testing
</a>
</li>
<li class="chapter " data-level="1.14" data-path="../guides/Windows.html">
<a href="../guides/Windows.html">
Developing on Windows
</a>
</li>
<li class="chapter " data-level="1.15" data-path="../guides/FAQ.html">
<a href="../guides/FAQ.html">
FAQ
</a>
</li>
<li class="header">Full Class Reference</li>
<li class="chapter " data-level="2.1" >
<span>
General
</span>
<ul class="articles">
<li class="chapter " data-level="2.1.1" data-path="Actions.html">
<a href="Actions.html">
Actions
</a>
</li>
<li class="chapter " data-level="2.1.2" data-path="BufferedProcess.html">
<a href="BufferedProcess.html">
BufferedProcess
</a>
</li>
<li class="chapter " data-level="2.1.3" data-path="ChangeFolderTask.html">
<a href="ChangeFolderTask.html">
ChangeFolderTask
</a>
</li>
<li class="chapter " data-level="2.1.4" data-path="ChangeLabelsTask.html">
<a href="ChangeLabelsTask.html">
ChangeLabelsTask
</a>
</li>
<li class="chapter " data-level="2.1.5" data-path="ChangeMailTask.html">
<a href="ChangeMailTask.html">
ChangeMailTask
</a>
</li>
<li class="chapter " data-level="2.1.6" data-path="Color.html">
<a href="Color.html">
Color
</a>
</li>
<li class="chapter " data-level="2.1.7" data-path="Config.html">
<a href="Config.html">
Config
</a>
</li>
<li class="chapter " data-level="2.1.8" data-path="Contenteditable.html">
<a href="Contenteditable.html">
Contenteditable
</a>
</li>
<li class="chapter " data-level="2.1.9" data-path="KeyCommandsRegion.html">
<a href="KeyCommandsRegion.html">
KeyCommandsRegion
</a>
</li>
<li class="chapter " data-level="2.1.10" data-path="NylasEnvConstructor.html">
<a href="NylasEnvConstructor.html">
NylasEnvConstructor
</a>
</li>
<li class="chapter " data-level="2.1.11" data-path="QueryResultSet.html">
<a href="QueryResultSet.html">
QueryResultSet
</a>
</li>
<li class="chapter " data-level="2.1.12" data-path="QuerySubscriptionPool.html">
<a href="QuerySubscriptionPool.html">
QuerySubscriptionPool
</a>
</li>
<li class="chapter " data-level="2.1.13" data-path="StyleManager.html">
<a href="StyleManager.html">
StyleManager
</a>
</li>
<li class="chapter " data-level="2.1.14" data-path="Task.html">
<a href="Task.html">
Task
</a>
</li>
<li class="chapter " data-level="2.1.15" data-path="TaskQueueStatusStore.html">
<a href="TaskQueueStatusStore.html">
TaskQueueStatusStore
</a>
</li>
<li class="chapter " data-level="2.1.16" data-path="ThemeManager.html">
<a href="ThemeManager.html">
ThemeManager
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.2" >
<span>
Component Kit
</span>
<ul class="articles">
<li class="chapter " data-level="2.2.1" data-path="EventedIFrame.html">
<a href="EventedIFrame.html">
EventedIFrame
</a>
</li>
<li class="chapter " data-level="2.2.2" data-path="Flexbox.html">
<a href="Flexbox.html">
Flexbox
</a>
</li>
<li class="chapter " data-level="2.2.3" data-path="InjectedComponent.html">
<a href="InjectedComponent.html">
InjectedComponent
</a>
</li>
<li class="chapter " data-level="2.2.4" data-path="InjectedComponentSet.html">
<a href="InjectedComponentSet.html">
InjectedComponentSet
</a>
</li>
<li class="chapter " data-level="2.2.5" data-path="Menu.html">
<a href="Menu.html">
Menu
</a>
</li>
<li class="chapter " data-level="2.2.6" data-path="MenuItem.html">
<a href="MenuItem.html">
MenuItem
</a>
</li>
<li class="chapter " data-level="2.2.7" data-path="MenuNameEmailItem.html">
<a href="MenuNameEmailItem.html">
MenuNameEmailItem
</a>
</li>
<li class="chapter " data-level="2.2.8" data-path="MultiselectActionBar.html">
<a href="MultiselectActionBar.html">
MultiselectActionBar
</a>
</li>
<li class="chapter " data-level="2.2.9" data-path="MultiselectList.html">
<a href="MultiselectList.html">
MultiselectList
</a>
</li>
<li class="chapter " data-level="2.2.10" data-path="ResizableRegion.html">
<a href="ResizableRegion.html">
ResizableRegion
</a>
</li>
<li class="chapter " data-level="2.2.11" data-path="RetinaImg.html">
<a href="RetinaImg.html">
RetinaImg
</a>
</li>
<li class="chapter " data-level="2.2.12" data-path="Spinner.html">
<a href="Spinner.html">
Spinner
</a>
</li>
<li class="chapter " data-level="2.2.13" data-path="UnsafeComponent.html">
<a href="UnsafeComponent.html">
UnsafeComponent
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.3" >
<span>
Extensions
</span>
<ul class="articles">
<li class="chapter active" data-level="2.3.1" data-path="ComposerExtension.html">
<a href="ComposerExtension.html">
ComposerExtension
</a>
</li>
<li class="chapter " data-level="2.3.2" data-path="ContenteditableExtension.html">
<a href="ContenteditableExtension.html">
ContenteditableExtension
</a>
</li>
<li class="chapter " data-level="2.3.3" data-path="DraftStoreExtension.html">
<a href="DraftStoreExtension.html">
DraftStoreExtension
</a>
</li>
<li class="chapter " data-level="2.3.4" data-path="MessageStoreExtension.html">
<a href="MessageStoreExtension.html">
MessageStoreExtension
</a>
</li>
<li class="chapter " data-level="2.3.5" data-path="MessageViewExtension.html">
<a href="MessageViewExtension.html">
MessageViewExtension
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.4" >
<span>
Models
</span>
<ul class="articles">
<li class="chapter " data-level="2.4.1" data-path="Contact.html">
<a href="Contact.html">
Contact
</a>
</li>
<li class="chapter " data-level="2.4.2" data-path="Message.html">
<a href="Message.html">
Message
</a>
</li>
<li class="chapter " data-level="2.4.3" data-path="Model.html">
<a href="Model.html">
Model
</a>
</li>
<li class="chapter " data-level="2.4.4" data-path="Thread.html">
<a href="Thread.html">
Thread
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.5" >
<span>
Stores
</span>
<ul class="articles">
<li class="chapter " data-level="2.5.1" data-path="AccountStore.html">
<a href="AccountStore.html">
AccountStore
</a>
</li>
<li class="chapter " data-level="2.5.2" data-path="ComponentRegistry.html">
<a href="ComponentRegistry.html">
ComponentRegistry
</a>
</li>
<li class="chapter " data-level="2.5.3" data-path="ContactStore.html">
<a href="ContactStore.html">
ContactStore
</a>
</li>
<li class="chapter " data-level="2.5.4" data-path="FocusedContentStore.html">
<a href="FocusedContentStore.html">
FocusedContentStore
</a>
</li>
<li class="chapter " data-level="2.5.5" data-path="TaskQueue.html">
<a href="TaskQueue.html">
TaskQueue
</a>
</li>
<li class="chapter " data-level="2.5.6" data-path="WorkspaceStore.html">
<a href="WorkspaceStore.html">
WorkspaceStore
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.6" >
<span>
Database
</span>
<ul class="articles">
<li class="chapter " data-level="2.6.1" data-path="Attribute.html">
<a href="Attribute.html">
Attribute
</a>
</li>
<li class="chapter " data-level="2.6.2" data-path="AttributeBoolean.html">
<a href="AttributeBoolean.html">
AttributeBoolean
</a>
</li>
<li class="chapter " data-level="2.6.3" data-path="AttributeCollection.html">
<a href="AttributeCollection.html">
AttributeCollection
</a>
</li>
<li class="chapter " data-level="2.6.4" data-path="AttributeDateTime.html">
<a href="AttributeDateTime.html">
AttributeDateTime
</a>
</li>
<li class="chapter " data-level="2.6.5" data-path="AttributeJoinedData.html">
<a href="AttributeJoinedData.html">
AttributeJoinedData
</a>
</li>
<li class="chapter " data-level="2.6.6" data-path="AttributeNumber.html">
<a href="AttributeNumber.html">
AttributeNumber
</a>
</li>
<li class="chapter " data-level="2.6.7" data-path="AttributeObject.html">
<a href="AttributeObject.html">
AttributeObject
</a>
</li>
<li class="chapter " data-level="2.6.8" data-path="AttributeServerId.html">
<a href="AttributeServerId.html">
AttributeServerId
</a>
</li>
<li class="chapter " data-level="2.6.9" data-path="AttributeString.html">
<a href="AttributeString.html">
AttributeString
</a>
</li>
<li class="chapter " data-level="2.6.10" data-path="DatabaseStore.html">
<a href="DatabaseStore.html">
DatabaseStore
</a>
</li>
<li class="chapter " data-level="2.6.11" data-path="Matcher.html">
<a href="Matcher.html">
Matcher
</a>
</li>
<li class="chapter " data-level="2.6.12" data-path="ModelQuery.html">
<a href="ModelQuery.html">
ModelQuery
</a>
</li>
<li class="chapter " data-level="2.6.13" data-path="SortOrder.html">
<a href="SortOrder.html">
SortOrder
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.7" >
<span>
Drafts
</span>
<ul class="articles">
<li class="chapter " data-level="2.7.1" data-path="DraftChangeSet.html">
<a href="DraftChangeSet.html">
DraftChangeSet
</a>
</li>
<li class="chapter " data-level="2.7.2" data-path="DraftEditingSession.html">
<a href="DraftEditingSession.html">
DraftEditingSession
</a>
</li>
<li class="chapter " data-level="2.7.3" data-path="DraftStore.html">
<a href="DraftStore.html">
DraftStore
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.8" >
<span>
NylasEnv
</span>
<ul class="articles">
<li class="chapter " data-level="2.8.1" data-path="PackageManager.html">
<a href="PackageManager.html">
PackageManager
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="2.9" >
<span>
Atom
</span>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
Published with GitBook
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href=".." >ComposerExtension</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h1 id="composerextension"><a name="composerextension" class="plugin-anchor" href="#composerextension"><i class="fa fa-link" aria-hidden="true"></i></a>ComposerExtension</h1>
<h2 id="summary"><a name="summary" class="plugin-anchor" href="#summary"><i class="fa fa-link" aria-hidden="true"></i></a>Summary</h2>
<p>To create ComposerExtensions that enhance the composer experience,
you should create objects that implement the interface defined at
{ComposerExtension}.</p>
<p>{ComposerExtension} extends {ContenteditableExtension}, so you can also
implement the methods defined there to further enhance the composer
experience.</p>
<p>To register your extension with the ExtensionRegistry, call
{ExtensionRegistry::Composer::register}. When your package is being
unloaded, you <em>must</em> call the corresponding
{ExtensionRegistry::Composer::unregister} to unhook your extension.</p>
<pre><code>coffee activate: -&gt; ExtensionRegistry.Composer.register(MyExtension)
...
deactivate: -&gt; ExtensionRegistry.Composer.unregister(MyExtension)
</code></pre><p><strong>Your ComposerExtension should be stateless</strong>. The user may have multiple
drafts open at any time, and the methods of your ComposerExtension may be
called for different drafts at any time. You should not expect that the
session you receive in <a href="#applyTransformsToDraft">applyTransformsToDraft</a> is for the same
draft you previously received in <a href="#warningsForSending">warningsForSending</a>, etc.</p>
<p>The ComposerExtension API does not currently expose any asynchronous or
{Promise}-based APIs, except for applyTransformsToDraft and unapplyTransformsToDraft,
which can optionally return a promsie. This will likely change in the future.
If you have a use-case for a ComposerExtension that is not possible with the current
API, please let us know.</p>
<ul>
</ul>
<h3 id="class-methods"><a name="class-methods" class="plugin-anchor" href="#class-methods"><i class="fa fa-link" aria-hidden="true"></i></a>Class Methods</h3>
<h4 id="sendActions" class="function-name"><a name="sendActions" class="plugin-anchor" href="#sendActions"><i class="fa fa-link" aria-hidden="true"></i></a>
sendActions(<span class="args"><span class="arg">title</span><span class="arg">performSendAction</span><span class="arg">isEnabled</span><span class="arg">iconUrl</span></span>) <a href="#sendActions" class="link"></a>
</h4>
<div class="function-description markdown-from-sourecode">
<p>Allows the addition of new types of send actions such as &quot;Send
Later&quot;
Return an array of objects that adhere to the following spec. If the draft data
indicates that your action should not be available, then return null.</p>
</div>
<p><strong>Parameters</strong></p>
<table class="arguments">
<tr>
<th>Argument</th>
<th>Description</th>
</tr>
<tr>
<td style="width:15%;">
<em>title</em>
</td>
<td class="markdown-from-sourecode">
A short, single string that is displayed to users when describing your component. It is used in the hover title text of your option in the dropdown menu. It is also used in the &quot;Default Send Behavior&quot; dropdown setting. If your string is selected, then the `core.sending.defaultSendType` will be set to your string and your option will appear as the default.
</td>
</tr>
<tr>
<td style="width:15%;">
<em>performSendAction</em>
</td>
<td class="markdown-from-sourecode">
Callback for when your option is clicked as the primary action. The function will be passed `{draft}` as its only argument. It does not need to return anything. It may be asynchronous and likely queue Tasks.
</td>
</tr>
<tr>
<td style="width:15%;">
<em>isEnabled</em>
</td>
<td class="markdown-from-sourecode">
Callback to determine if this send action should be rendered for the given draft. Takes a draft: A fully populated {Message} object that is about to be sent.
</td>
</tr>
<tr>
<td style="width:15%;">
<em>iconUrl</em>
</td>
<td class="markdown-from-sourecode">
A custom icon to be placed in the Send button. SendAction extensions have the form &quot;Send + {ICON}&quot;
</td>
</tr>
</table>
<h4 id="warningsForSending" class="function-name"><a name="warningsForSending" class="plugin-anchor" href="#warningsForSending"><i class="fa fa-link" aria-hidden="true"></i></a>
warningsForSending(<span class="args"><span class="arg">draft</span></span>) <a href="#warningsForSending" class="link"></a>
</h4>
<div class="function-description markdown-from-sourecode">
<p>Inspect the draft, and return any warnings that need to be
displayed before the draft is sent. Warnings should be string phrases,
such as &quot;without an attachment&quot; that fit into a message of the form:
&quot;Send #{phase1} and #{phase2}?&quot;</p>
</div>
<p><strong>Parameters</strong></p>
<table class="arguments">
<tr>
<th>Argument</th>
<th>Description</th>
</tr>
<tr>
<td style="width:15%;">
<em>draft</em>
</td>
<td class="markdown-from-sourecode">
A fully populated {Message} object that is about to be sent.
</td>
</tr>
</table>
<p><strong>Returns</strong></p>
<table class="arguments">
<tr>
<th>Return Values</th>
</tr>
<tr><td class="markdown-from-sourecode">Returns a list of warning strings, or an empty array if no warnings need
to be displayed.</td></tr>
</table>
<h4 id="prepareNewDraft" class="function-name"><a name="prepareNewDraft" class="plugin-anchor" href="#prepareNewDraft"><i class="fa fa-link" aria-hidden="true"></i></a>
prepareNewDraft(<span class="args"></span>) <a href="#prepareNewDraft" class="link"></a>
</h4>
<div class="function-description markdown-from-sourecode">
<p>Override prepareNewDraft to modify a brand new draft before it
is displayed in a composer. This is one of the only places in the
application where it&apos;s safe to modify the draft object you&apos;re given
directly to add participants to the draft, add a signature, etc.
By default, new drafts are considered `pristine`. If the user leaves the
composer without making any changes, the draft is discarded. If your
extension populates the draft in a way that makes it &quot;populated&quot; in a
valuable way, you should set `draft.pristine = false` so the draft
saves, even if no further changes are made.</p>
</div>
<h4 id="applyTransformsForSending" class="function-name"><a name="applyTransformsForSending" class="plugin-anchor" href="#applyTransformsForSending"><i class="fa fa-link" aria-hidden="true"></i></a>
applyTransformsForSending(<span class="args"><span class="arg">draft</span></span>) <a href="#applyTransformsForSending" class="link"></a>
</h4>
<div class="function-description markdown-from-sourecode">
<p>applyTransformsToDraft is called when a draft the user is editing
is saved to the server and/or sent. This method gives you an opportunity to
remove any annotations you&apos;ve inserted into the draft body, apply final changes
to the body, etc.
Note that your extension /must/ be able to reverse the changes it applies to
the draft in `applyTransformsToDraft`. If the user re-opens the draft,
`unapplyTransformsToDraft` will be called and must restore the draft to it&apos;s
previous edit-ready state.
Examples:
This method should return a modified {Message} object, or a {Promise} which resolves
to a modified Message object.</p>
</div>
<strong>Parameters</strong>
<table class="arguments">
<tr>
<th>Argument</th>
<th>Description</th>
</tr>
<tr>
<td style="width:15%;">
<em>draft</em>
</td>
<td class="markdown-from-sourecode">
A {Message} the user is about to finish editing.
</td>
</tr>
</table>
<h4 id="unapplyTransformsForSending" class="function-name"><a name="unapplyTransformsForSending" class="plugin-anchor" href="#unapplyTransformsForSending"><i class="fa fa-link" aria-hidden="true"></i></a>
unapplyTransformsForSending(<span class="args"></span>) <a href="#unapplyTransformsForSending" class="link"></a>
</h4>
<div class="function-description markdown-from-sourecode">
<p>unapplyTransformsToDraft should revert the changes made in
`applyTransformsToDraft`. See the documentation for that method for more
information.</p>
</div>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="ContenteditableExtension.html" class="navigation navigation-next navigation-unique" aria-label="Next page: ContenteditableExtension">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"ComposerExtension","level":"2.3.1","depth":2,"next":{"title":"ContenteditableExtension","level":"2.3.2","depth":2,"path":"classes/ContenteditableExtension.md","ref":"classes/ContenteditableExtension.md","articles":[]},"previous":{"title":"Extensions","level":"2.3","depth":1,"ref":"","articles":[{"title":"ComposerExtension","level":"2.3.1","depth":2,"path":"classes/ComposerExtension.md","ref":"classes/ComposerExtension.md","articles":[]},{"title":"ContenteditableExtension","level":"2.3.2","depth":2,"path":"classes/ContenteditableExtension.md","ref":"classes/ContenteditableExtension.md","articles":[]},{"title":"DraftStoreExtension","level":"2.3.3","depth":2,"path":"classes/DraftStoreExtension.md","ref":"classes/DraftStoreExtension.md","articles":[]},{"title":"MessageStoreExtension","level":"2.3.4","depth":2,"path":"classes/MessageStoreExtension.md","ref":"classes/MessageStoreExtension.md","articles":[]},{"title":"MessageViewExtension","level":"2.3.5","depth":2,"path":"classes/MessageViewExtension.md","ref":"classes/MessageViewExtension.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["search","lunr","-fontsettings","-sharing","anchors","github","editlink","favicon"],"root":"./docs_src","styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"editlink":{"label":"Edit This Page","multilingual":false,"base":"https://github.com/nylas/nylas-mail-docs/tree/master"},"github":{"url":"https://github.com/nylas/nylas-mail-docs"},"favicon":{"shortcut":"/img/favicon.png"},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"anchors":{},"highlight":{},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Nylas Mail Plugin SDK","links":{"sharing":{"facebook":false,"twitter":false}},"gitbook":"3.2.2"},"file":{"path":"classes/ComposerExtension.md","mtime":"2017-01-30T10:28:19.000Z","type":"markdown"},"gitbook":{"version":"3.2.2","time":"2017-01-30T10:28:53.038Z"},"basePath":"..","book":{"language":""}});
});
</script>
</div>
<script src="../gitbook/gitbook.js"></script>
<script src="../gitbook/theme.js"></script>
<script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="../gitbook/gitbook-plugin-search/search.js"></script>
<script src="../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
<script src="../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
<script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
<script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
</body>
</html>