Commit graph

1913 commits

Author SHA1 Message Date
Drew Regitsky
da15d4598c fix(signatures): Wrap signature in a nylas-n1-signature div to allow easy detection
Summary:
Changes the internal signatures plugin to wrap the signature in a
`<div class="nylas-n1-signature">` block, to make it easier to detect and handle
signatures from within other plugins.

Also:
- Fixes the QuickSchedule plugin to place the scheduling block above the signature.
- Fixes a small syntax error in Translate plugin

Test Plan: manual

Reviewers: evan

Reviewed By: evan

Differential Revision: https://phab.nylas.com/D2383
2015-12-29 15:33:49 -08:00
Drew Regitsky
be800ac89a refactor(templates): major additions and refactoring for the Templates plugin.
Summary:
Adds several new features to the templates plugin, fixes some existing bugs, and
refactors existing code.

New Plugin Features/Fixes:
- Changes the templates editor in preferences to allow variables to be entered with
 `{{brackets}}`. Handles many contenteditable complexities to implement.
- Better interaction for renaming and deleting of templates in the editor.
- Changes tabbing behavior when using templates. Tabbing between variables now wraps
  around, and typing tab from outside a variable region highlights the closest region.
- Prevents "Enter" key in the composer when inside a variable region, and strips all
  formatting/tags from within the region - this prevents major contenteditable issues
  that can result in inline CSS in the style of our variable regions, which will not be
  removed when sending.
- Shows a warning when choosing a template if it will replace existing text in a draft.
- Prevents invalid characters in template names (due to filenames, esp. on Windows),
  and shows an error message. Strips these characters from draft titles when making a
  template.
- Fixes a bug where TemplateStore's initialization code was being called multiple times.

New N1 code:
- Several new methods in `DOMUtils` useful for working with contenteditable.
- Implement some missing methods in `Editor`

Refactor:
- Major refactor/rewrite of template composer extension to use new DOMUtils methods
  and simplify the logic (while adding new functionality).

Remaining issues:
- `preferences-tempaltes.cjsx` and `template-editor.coffee` should be rewritten in ES6
  for consistency
- Need tests for new DOMUtils functions and for new Templates plugin code.

Test Plan: manual, need to update specs

Reviewers: evan, bengotow

Reviewed By: evan, bengotow

Subscribers: juan

Differential Revision: https://phab.nylas.com/D2382
2015-12-29 15:11:04 -08:00
Drew Regitsky
4bd46b055f fix(contenteditable): revert 36b4f3, call onClick in mouse-service 2015-12-29 14:57:07 -08:00
Ben Gotow
9dfb03727d lint(mail-rules): Fix build failure from linter issue 2015-12-29 14:41:30 -08:00
Drew Regitsky
c09632966d fix(contenteditable): hook up onClick handler for extensions
Summary: Add missing code to make onClick work in contenteditable extensions.

Test Plan: manual

Reviewers: juan, evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2395
2015-12-29 14:41:00 -08:00
Ben Gotow
3c4d6b503b fix(mail-rules): Bail if a message is missing a thread 2015-12-29 14:21:42 -08:00
Ben Gotow
7973135dd3 fix(uploads): Cancel uploads when offline (#365), mark for refactor 2015-12-29 14:21:42 -08:00
Ben Gotow
55e4dd14b9 fix(uploads): Don't allow dragging of uploading images (Fixes #366) 2015-12-29 14:21:42 -08:00
Ben Gotow
72a624fe78 Merge pull request #798 from mbilker/appveyor-pr-no-secure
AppVeyor Use no secure variables in Pull Requests
2015-12-29 12:33:31 -08:00
Ben Gotow
d209d6e615 Merge pull request #792 from Sumukh/at-character-parse
Names with @ are included in the contact name.
2015-12-29 12:20:00 -08:00
Ben Gotow
53effd868e bump(version): 0.3.34 beta 2015-12-28 18:39:27 -08:00
Ben Gotow
e349062835 fix(regex): Chop leading '/" off emails if they are wrapped in quotes 2015-12-28 18:39:06 -08:00
Ben Gotow
a573b70895 fix(mail-rules): Catch and disable mail rules building bad actions 2015-12-28 18:39:06 -08:00
Drew Regitsky
28c5c621a1 fix(contenteditable): add default prop for onSelectionChanged 2015-12-28 17:34:18 -08:00
Ben Gotow
c379353553 fix(autoload-images): Watch for images declared in more attrs
Fixes #739
2015-12-28 14:59:07 -08:00
Ben Gotow
a52d0d415d fix(regex): Allow ', !, ?, ^, {, }, | in email addresses (Fixes #754) 2015-12-28 14:35:47 -08:00
Ben Gotow
8086c4183e fix(markAsRead): Option to mark read manually only (Fixes #804) 2015-12-28 14:23:34 -08:00
Ben Gotow
fb862e9b74 fix(mailto): Parse query string manually to account for unencoded body (Fixes #815) 2015-12-28 13:58:24 -08:00
Ben Gotow
c88efcacd8 fix(search): Switching accounts while searching no longer breaks app
Fixes #850
2015-12-28 12:16:56 -08:00
Ben Gotow
f8e9d37501 fix(aliases): Recognize that email sent to alias is to "me" 2015-12-28 12:13:05 -08:00
Ben Gotow
913787eacf fix(styles): Allow css from any domain (for web fonts) 2015-12-28 11:25:58 -08:00
Juan Tejada
d8e437662a fix(styles): Fix border styles for subject input in composer
- Fixes #825
2015-12-23 22:05:43 -08:00
Evan Morikawa
be6191d6b6 fix(tab): fix import error 2015-12-23 15:48:41 -08:00
Ben Gotow
2ddceba8ed bump(version): 0.3.33 Beta 🎄 2015-12-23 02:20:13 -05:00
Ben Gotow
af67597f0b feat(mail-rules): Per-account mail rules filter incoming, existing mail
Summary:
Originally, this was going to be a totally independent package, but
I wasn't able to isolate the functionality and get it tied in to
the delta-stream consumption. Here's how it currently works:

- The preferences package has a new tab which allows you to edit
  mail filters. Filters are saved in a new core store, and a new
  stock component (ScenarioEditor) renders the editor. The editor
  takes a set of templates that define a value space, and outputs
  a valid set of values.

- A new MailFilterProcessor takes messages and creates tasks to
  apply the actions from the MailFiltersStore.

- The worker-sync package now uses the MailFilterProcessor to
  apply filters /before/ it calls didPassivelyReceiveNewModels,
  so filtrs are applied before any notifications are created.

- A new task, ReprocessMailFiltersTask allows you to run filters
  on all of your existing mail. It leverages the existing TaskQueue
  architecture to: a) resume where it left off if you quit midway,
  b) be queryable (for status) from all windows and c) cancelable.
  The TaskQueue is a bit strange because it runs performLocal and
  performRemote very differently, and I had to use `performRemote`.
  (todo refactor soon.)

This diff also changes the EditableList a bit to behave like a
controlled component and render focused / unfocused states.

Test Plan: Run tests, only for actual filter processing atm.

Reviewers: juan, evan

Reviewed By: evan

Differential Revision: https://phab.nylas.com/D2379
2015-12-23 02:19:32 -05:00
Juan Tejada
bce473df55 fix(specs): Fix and update QuerySubscription specs
- Updates test scenario to test for when the new item already exists in
the set with the same clientId but a new serverId
2015-12-22 14:30:28 -08:00
Juan Tejada
e9eb530994 fix(observables): Fix QuerySubscription to check for clientId's in result set
- See TODO comments
- Fixes #680
- Fixes #681
2015-12-22 13:42:25 -08:00
Evan Morikawa
ecc1d099d9 fix(spec): fix send-draft spec to test for include 2015-12-22 10:36:25 -08:00
Juan Tejada
c6a7659528 fix(send-draft): Include body when sending message in new send draft
logic
2015-12-22 10:06:58 -08:00
Juan Tejada
64ae82a7e2 fix(prefs): Prevent main key commands from being fired to thread list while on prefs page
Summary:
- When the preferences sheet is open, any commands triggered through key presses were being received by the thread-list, producing unexpected
(and unseen) results
- This is a partial/temporary solution and should go away when we do the Keymap/Commands/Menu refactor

Test Plan: - Manaul

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2380
2015-12-22 09:38:56 -08:00
Juan Tejada
24c80b7539 🍒(atom): Pull updated version of Command Registry:
- This fixes a bug present in the earlier version where stopPropagation and
preventDefault were not correctly defined in the custom event
- Updates clear-cut dependency and initialization of CommandRegistry in
NylasEnv
2015-12-21 20:31:54 -08:00
Juan Tejada
9060d1642c refactor(tray): Update main file for tray package 2015-12-21 20:18:17 -08:00
Evan Morikawa
d18642fb3e refactor(contenteditable): new ContenteditableExtension API
Summary:
This provides a new API for `ContenteditableExtension`s. Instead of
manually manipulating the raw DOM and `Selection` objects, there's a new
`Editor` interface that encapsulates it and provides helper methods.

You can now do:

      editor.select(someNode).createLink("foo").collapseToEnd()

Now raw methods like `execCommand` ONLY show up in the `Editor` interface
as well as most of the raw `Selection` APIs.

There are also more integration tests :)

Another major goal was cleaning up the contenteditable file itself. To
that end:

1. The DOMNormalizer got pulled out into its own extension
1. The TabManager is now its own extension
1. Url wrangling got moved into the FloatingToolbar control
1. There is now the concept of a `ContenteditableService`, which are
tightly-couple blocks of code separated out into logical units. These are
dependent on the core state, innerState, and props and are not full
extensions.
1. `MouseService` now handles all the click event logic
1. `ClipboardService` was modified to the new service architecture

Test Plan: script/grunt run-integration-tests

Reviewers: drew, juan, bengotow

Reviewed By: juan, bengotow

Differential Revision: https://phab.nylas.com/D2367
2015-12-21 19:58:01 -08:00
mbilker
6fa019e4c1 fix(appveyor): check if the decryption password env variable is set 2015-12-21 20:51:04 -05:00
Evan Morikawa
c2f47ce951 fix(draft): New Send Draft logic
Summary:
This is a WIP for the new send draft logic.

I'll add tests then update the diff

Test Plan: todo

Reviewers: bengotow, juan

Reviewed By: juan

Differential Revision: https://phab.nylas.com/D2341
2015-12-21 11:50:52 -08:00
mbilker
fbdf4b840a fix(appveyor): return build verbosity to normal 2015-12-21 11:27:26 -05:00
mbilker
3c88a5764f fix(appveyor): now working, YAML parses correctly 2015-12-21 11:24:28 -05:00
mbilker
ce7f50604c fix(appveyor): increase verbosity for testing 2015-12-21 11:14:28 -05:00
mbilker
116fbf0fa2 fix(appveyor): check if running in PR, disable commands requiring secure variables if so 2015-12-21 11:11:29 -05:00
Sumukh Sridhara
1a8c87b10d Names with @ are included in the contact name. Resolves #713 2015-12-21 03:31:37 -08:00
Juan Tejada
faf86631aa update(tray): Show 'Open Inbox' tray menu option and option to disable
tray  on Mac and Linux

- Resolves #673
- Resolves #762
- Resolves #594
2015-12-20 21:32:59 -08:00
Juan
cd97c0c138 Merge pull request #726 from daveperdue/patch-1
Fix broken icon from issue #465 and Fix icon path for install
2015-12-20 13:45:45 -08:00
Juan Tejada
101831b71e fix(feedback-window): Close correctly when in fullscreen mode
- Now shows main window when feedback window is closed/hidden
- Fixes #615
2015-12-20 13:11:58 -08:00
Juan Tejada
2503263e93 fix(feedback-window): Remove handler that prevented window from closing
- Fixes #773
- window.onbeforeunload inside feedback window was returning false and
preventing the window from being closed.
2015-12-20 01:50:44 -08:00
Juan Tejada
d5e9397879 fix(typo): Fix typo in floating toolbar container 2015-12-18 14:10:53 -08:00
Juan Tejada
96da7ccb2d feat(editor-region): Add support to register components as editors
Summary:
- The main purpose of this is to be able to properly register the editor for the markdown plugin (and any other plugins to come)

- Refactors ComposerView and Contenteditable ->
  - Replaces Contenteditable with an InjectedComponent for a new region role:
    "Composer:Editor"
  - Creates a new component called ComposerEditor, which is the one that is
    being registered by default as "Composer:Editor"
  - I used this class to try to standardize the props that should be
    passed to any would be editor Component:
    - Renamed a bunch of the props which (I think) had a bit of
      confusing names
    - Added a bunch of docs for these in the source file, although
      I feel like those docs should live elsewhere, like in the
      ComponentRegion docs.
  - In the process, I ended up pulling some stuff out of ComposerView and
    some stuff out of the Contenteditable, namely:
    - The scrolling logic to ensure that the composer is visible while
      typing was moved outside of the Contenteditable -- this feels more
      like the ComposerEditor's responsibility, especially since the
      Contenteditable is meant to be used in other contexts as well.
    - The ComposerExtensions state; it feels less awkward for me if this
      is inside the ComposerEditor because 1) ComposerView does less
      things, 2) these are actually just being passed to the
      Contenteditable, 3) I feel like other plugins shouldn't need to
      mess around with ComposerExtensions, so we shouldn't pass them to the
      editor. If you register an editor different from our default one,
      any other ComposerExtension callbacks will be disabled, which
      I feel is expected behavior.
  - I think there is still some more refactoring to be done, and I left some TODOS
    here and there, but I think this diff is already big enough and its a minimal
    set of changes to get the markdown editor working in a not so duck
    tapish way.
- New props for InjectedComponent:
  - `requiredMethods`: allows you to define a collection of methods that
    should be implemented by any Component that registers for your
    desired region.
    - It will throw an error if these are not implemented
    - It will automatically pass calls made on the InjectedComponent to these methods
      down to the instance of the actual registered component
    - Would love some comments on this approach and impl
  - `fallback`: allows you to define a default component to use if none were
    registered through the ComponentRegistry
- Misc:
  - Added a new test case for the QuotedHTMLTransformer
- Tests:
  - They were minimally updated so that they don't break, but a big TODO
    is to properly refactor them. I plan to do that in an upcoming
    diff.

Test Plan: - Unit tests

Reviewers: bengotow, evan

Reviewed By: evan

Differential Revision: https://phab.nylas.com/D2372
2015-12-18 11:06:44 -08:00
Ben Gotow
ea76b7c442 feat(transactions): Explicit (and faster) database transactions
Summary:
Until now, we've been hiding transactions beneath the surface. When you call persistModel, you're implicitly creating a transaction.
You could explicitly create them with `atomically`..., but there were several critical problems that are fixed in this diff:

- Calling persistModel / unpersistModel within a transaction could cause the DatabaseStore to trigger. This could result in other parts of the app making queries /during/
  the transaction, potentially before the COMMIT occurred and saved the changes. The new, explicit inTransaction syntax holds all changes until after COMMIT and then triggers.

- Calling atomically and then calling persistModel inside that resulted in us having to check whether a transaction was present and was gross.

- Many parts of the code ran extensive logic inside a promise chained within `atomically`:

  BAD:

```
  DatabaseStore.atomically =>
   DatabaseStore.persistModel(draft) =>
     GoMakeANetworkRequestThatReturnsAPromise
```

OVERWHELMINGLY BETTER:

```
  DatabaseStore.inTransaction (t) =>
     t.persistModel(draft)
  .then =>
    GoMakeANetworkRequestThatReturnsAPromise
```

Having explicit transactions also puts us on equal footing with Sequelize and other ORMs. Note that you /have/ to call DatabaseStore.inTransaction (t) =>. There is no other way to access the methods that let you alter the database. :-)

Other changes:
- This diff removes Message.labels and the Message-Labels table. We weren't using Message-level labels anywhere, and the table could grow very large.
- This diff changes the page size during initial sync from 250 => 200 in an effort to make transactions a bit faster.

Test Plan: Run tests!

Reviewers: juan, evan

Reviewed By: juan, evan

Differential Revision: https://phab.nylas.com/D2353
2015-12-17 11:46:05 -08:00
Ben Gotow
9fee3c4cf1 Merge pull request #728 from francois2metz/fix_unused_require
Harmonize require and remove unused ones.
2015-12-17 11:19:09 -08:00
François de Metz
efefe0dae7 Harmonize require and remove unused ones. 2015-12-17 00:02:37 +01:00
Dave Perdue
848fb0d688 Fix broken GNOME dock icon
This addresses an issue mentioned in Issue #465 regarding a missing icon.
2015-12-16 12:14:26 -08:00