Commit graph

1771 commits

Author SHA1 Message Date
Juan Tejada
b559d41bed 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
a14a5212ac 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
a6c69e2775 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
6108798c53 Harmonize require and remove unused ones. 2015-12-17 00:02:37 +01:00
Dave Perdue
5d0e0201bb 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
Dave Perdue
7e952f8375 Remove redundant path in .desktop for Linux
The install-task has two instructions that add an extra "resources" to the iconName directory and thus the icon doesn't work. The resulting nylus.desktop has an invalid path for the icon.
2015-12-16 11:59:01 -08:00
Ben Gotow
856f44fe5f Merge pull request #706 from noahbuscher/patch-1
Added link to plugin and theme repo
2015-12-15 17:08:56 -08:00
Ben Gotow
eb21377f5f fix(downloads): Create directory path with correct separator
Fixes #709
2015-12-15 13:55:59 -08:00
Ben Gotow
b11131d181 bump(version): 0.3.32 2015-12-15 11:59:01 -08:00
Ben Gotow
71bd96f978 fix(aliases): Add note that aliases may need to be setup 2015-12-15 11:56:31 -08:00
Ben Gotow
5c48d27cfc fix(locales): Copy lproj files to ensure navigator.language works
See https://github.com/atom/electron/issues/2484
2015-12-15 11:34:56 -08:00
Juan Tejada
f575a2dabc feat(theme-selector): Add theme selector to preferences page
Summary:
- Adds a couple of helper methods to theme manager and updates how
a theme package is enabled to be consistent with how we actually want to
activate themes.
- Adds small select component to choose a theme or install a new one.

Test Plan: - Manual

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2355
2015-12-15 10:29:58 -08:00
Ben Gotow
64fc74cc6a fix(lint): Remove return statement from editable list 2015-12-14 15:47:58 -08:00
Evan Morikawa
b62a129e06 fix(bootstrap): split commands 2015-12-14 15:22:47 -08:00
Juan Tejada
6c7a162909 add(integration-test): Adds test for onboarding flow with Exchange
Summary:
- Make sure user can log in using exchange
- Adds some test helpers for the test
- Updates eslint.json and cleans up lint errors

Test Plan: - Integration Tests

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2346
2015-12-14 15:14:58 -08:00
Ben Gotow
754b75d047 bump(version): 0.3.31 2015-12-14 14:36:17 -08:00
Juan Tejada
26a907c0c0 feat(default-alias): Add functionality to select a default alias
Summary:
- Update Account model witha default alias and DraftStore methods that
construct new messages to use default alias if available.
- Update AccountDetails page and add selector to select default alias

Test Plan: - Unit tests

Reviewers: evan, bengotow

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2352
2015-12-14 14:35:26 -08:00
Juan Tejada
9d77d6399d fix(editable-list): Prevent empty selection on esc pressed + other fixes
- When prop specified to not allow empty selection it should also
prevent it from being cleared when pressing Esc while focusing the list
- Adds a default value to the edit item input
- Updates specs
- Updates styles
2015-12-14 14:29:45 -08:00
Noah Buscher
cc3de3d276 Added link to plugin and theme repo 2015-12-14 14:24:13 -06:00
Evan Morikawa
35d94decd9 fix(tests): fix composer integration specs 2015-12-14 12:09:51 -08:00
Evan Morikawa
54f52a61d0 fix(tests): fix composer integration tests 2015-12-14 12:05:55 -08:00
Juan Tejada
aed9b77207 fix(shortcuts): Fix shortcut handlers for marking as read/unread
- Marking as read/unread did not work when selecting multiple threads
2015-12-14 10:32:45 -08:00
Juan Tejada
f153d4befc fix(prefs): Make General preferences tab be the initially selected one 2015-12-14 00:31:11 -08:00
Juan Tejada
aa57ab3990 fix(specs): Fix composer view specs for enabling 'from:' field based on
aliases

- Will show from field when account has at least one alias
2015-12-14 00:02:30 -08:00
Juan Tejada
c0a5e0d715 refactor(extensions): Move extensions outside of flux/ folder
Not really related to flux, makes more sense to be inside src/
2015-12-13 23:33:42 -08:00
Juan Tejada
75fb478dd7 fix(warnings): Remove deprecate warnings from specs 2015-12-13 23:32:24 -08:00
Ben Gotow
d8b3a09599 fix(aliases): Show from field whenever aliases are present 2015-12-11 19:04:14 -08:00
Ben Gotow
433b218f48 fix(ci): stable instead of release/* branches 2015-12-11 17:13:42 -08:00
Ben Gotow
f16f97eaea fix(ci): Publish appveyor release branch builds 2015-12-11 15:11:13 -08:00
Ben Gotow
5a77552f9b bump(version): 0.3.30 2015-12-11 15:11:13 -08:00
Evan Morikawa
ee17b9d975 fix(ci): run grunt script in win compatible way 2015-12-11 17:46:18 -05:00
Ben Gotow
7ea0202cc7 fix(ci): Publish builds on release branches 2015-12-11 14:44:53 -08:00
Ben Gotow
f0e4b2405f fix(select-all): Disable Cmd-A to select threads for now 2015-12-11 14:10:04 -08:00
Evan Morikawa
8d50362428 fix(build): add nylas resources before apm install 2015-12-11 17:08:39 -05:00
Evan Morikawa
e83c16ec21 fix(spellcheck): let win < 8 fallback to hunspell 2015-12-11 16:41:41 -05:00
Evan Morikawa
546248782f docs(tests): add docs about integration testing 2015-12-11 16:25:25 -05:00
Juan Tejada
e8fb26ab88 fix(editable-list): Refocus list after editing or creating 2015-12-11 12:43:01 -08:00
Evan Morikawa
ed805869f2 fix(spellcheck): add tests and merge in Linux changes 2015-12-11 15:36:13 -05:00
mbilker
3d4b86dc5d spec(spellchecker): handle some weird Linux cases
Linux returns ['asked', 'acidify', 'Assad'] for the string "asdfk"
which seems normal to me. Why do OS X and/or Windows return [] for
that string? That seems weird, so I just broke the spec to run different
specs on different platforms.
2015-12-11 15:36:12 -05:00
mbilker
755f6024a3 fix(spellchecker): confine the linux changes to only 3 methods
The "it provides options for misspelled words" still fails with
"asdfk" supposed to supply no corrections, which I find unlikely in
the real world, and Hunspell provides corrections.
2015-12-11 15:36:12 -05:00
mbilker
699d6369cc lint(spellchecker): remove trailing semicolons 2015-12-11 15:36:12 -05:00
mbilker
44fccfb54f fix(spellchecker): Preliminary Linux support
The Linux component of Atom's spellchecker depends on Hunspell for
corrections. It requires a dictionary to be set, unlike Mac OS X
and Windows that have spellcheckers built in to the OS, and they
have the dictionaries built-in as well. This commit uses Atom's
spellchecker default dictionary method (which I wish was a public
API) to reset the dictionary to its default setting. It also ignores
the dictionaries available command for the Linux platform, which
seems to always return an empty Array.
2015-12-11 15:36:12 -05:00
Ben Gotow
fedb4197f8 fix(editablelist): Remove spec warning 2015-12-11 12:16:55 -08:00
Ben Gotow
9eb3eb3297 fix(thread-list): Initialize database view immediately 2015-12-11 12:15:38 -08:00
Juan Tejada
416f7e298d fix(onboarding): AccountStore only listens to changes to account obj when window
type is composer

- AccountStore was listening to changes to account object (config file)
when it was a window different from the main window in order to update
the alias list on composer windows.
- This caused the onboarding window to also listen for changes and
caused it to incorrectly add an account twice
2015-12-11 12:01:25 -08:00
Ben Gotow
7ba1e0c4a6 fix(bluebird): setImmediate > MutationObserver
We were somehow falling into a bluebird case where it uses a DOMMutationObserver instead of nextTick. We should probably report this to them.
2015-12-11 11:56:22 -08:00
Ben Gotow
60fad2822c fix(contextualmenu): Disable for non-selectable inputs
Fixes #664
2015-12-11 11:55:31 -08:00
Juan Tejada
6697372c92 update(specs): Add more test coverage to EditableList + refactors 2015-12-11 11:03:59 -08:00
Juan Tejada
80be13410d fix(docs): Update ES6 comment docs to use JSDoc 3 format 2015-12-11 10:01:13 -08:00
Evan Morikawa
35f6273d52 fix(hot-api): remove react-hot-api 2015-12-11 11:22:22 -05:00