Comparar commits

...

347 Commits

Autor SHA1 Mensagem Data
Nathan Sobo 058005afdf ⬆️ markdown-preview 2015-01-15 11:28:41 -07:00
Kevin Sawicki 062072ad87 Add linter emoji 2015-01-15 09:57:38 -08:00
Kevin Sawicki a6a9a9e94b Use skinny arrow to remove lint warning 2015-01-15 09:53:47 -08:00
simurai c024abcc5f 🐛 Fix line-height of the indent-guide
Issue #4279
2015-01-15 20:14:57 +09:00
Nathan Sobo c69f4baa04 Merge pull request #5068 from atom/ns-line-number-decorations
Rename 'gutter' decorations to 'line-number'
2015-01-14 20:04:02 -07:00
Nathan Sobo 5a4cf01083 Move getFirst/LastVisibleScreenRow to the view 2015-01-14 20:02:49 -07:00
Nathan Sobo 49699bddf2 Fix styleSheets manifest key in package.json of fixtures 2015-01-14 19:52:26 -07:00
Nathan Sobo 542ed631e8 Emit deprecation warnings for decorations of type ‘gutter’ 2015-01-14 19:49:46 -07:00
Nathan Sobo 8c574bfd30 Rename 'gutter' decorations to 'line-number' decorations 2015-01-14 19:49:46 -07:00
Nathan Sobo f570a417e6 Allow for styles/ directory in themes in prebuild-less task 2015-01-14 19:49:07 -07:00
Nathan Sobo ae9e1b0416 ⬆️ ui themes to fix imports 2015-01-14 19:36:28 -07:00
Nathan Sobo 08ab5ff650 ⬆️ themes to rename stylesheets directories 2015-01-14 19:26:55 -07:00
Max Brunsfeld c33288f9bb ⬆️ symbols-view 2015-01-14 18:06:46 -08:00
Nathan Sobo 073f9f2a3e ⬆️ spell-check for deprecation fix 2015-01-14 19:06:15 -07:00
Nathan Sobo b6fc7ff1ac ⬆️ dev-live-reload for build error fix 2015-01-14 19:03:04 -07:00
Nathan Sobo 163ee97c73 ⬆️ packages for deprecation fixes 2015-01-14 18:58:56 -07:00
Max Brunsfeld 788b55ee2a ⬆️ git-diff 2015-01-14 17:56:04 -08:00
Max Brunsfeld 3a3a4cd3b2 ⬆️ grammar-selector 2015-01-14 17:52:02 -08:00
Max Brunsfeld 9d01795335 ⬆️ image-view 2015-01-14 17:49:06 -08:00
Nathan Sobo aa0a767e34 ⬆️ packages for deprecation fixes 2015-01-14 18:48:27 -07:00
Nathan Sobo fb4956dde6 Fix deprecated styleSheets manifest key 2015-01-14 18:48:27 -07:00
Nathan Sobo 94cee03335 Provide package name for styles metadata deprecations 2015-01-14 18:48:26 -07:00
Max Brunsfeld 15581c9750 ⬆️ incompatible-packages 2015-01-14 17:45:16 -08:00
Max Brunsfeld 55c8c920f9 ⬆️ keybinding-resolver 2015-01-14 17:43:00 -08:00
Max Brunsfeld 0db20c7cbb ⬆️ notifications@0.25.0 2015-01-14 17:37:50 -08:00
Max Brunsfeld 57e618dec9 ⬆️ package-generator 2015-01-14 17:34:03 -08:00
Max Brunsfeld 206810d5db ⬆️ release-notes 2015-01-14 17:31:04 -08:00
Nathan Sobo 85a2698f67 ⬆️ packages for deprecation fixes 2015-01-14 18:28:08 -07:00
Max Brunsfeld 04a8a6f784 ⬆️ settings-view 2015-01-14 17:26:41 -08:00
Nathan Sobo 5d40916b6c ⬆️ themes for deprecation fixes 2015-01-14 18:20:47 -07:00
Max Brunsfeld 9f73a42cf1 ⬆️ deprecation-cop@0.31.0 2015-01-14 17:19:14 -08:00
Nathan Sobo 75b43b4fa3 ⬆️ archive-view 2015-01-14 18:07:28 -07:00
Max Brunsfeld 19f105e9e7 ⬆️ snippets@0.69.0 2015-01-14 17:07:16 -08:00
Max Brunsfeld f097f6b4f8 ⬆️ deprecation-cop@0.30 2015-01-14 17:06:52 -08:00
Ben Ogle 9fa571bf39 Merge pull request #4906 from atom/bo-better-errors
Better errors
2015-01-14 16:25:01 -08:00
Ben Ogle 5cb18fc7e5 this. -> @ 2015-01-14 16:15:54 -08:00
Ben Ogle 274ae6cd57 Use buffer.getPath not @getPath in project
😬
2015-01-14 16:15:53 -08:00
Ben Ogle 7d3fe78eed Remove Pane require from workspace view specs 2015-01-14 16:15:53 -08:00
Ben Ogle 4ba7182bbf 💄 Inline fileName cause it's used once 2015-01-14 16:15:53 -08:00
Ben Ogle 5fe4476114 ⬆️ text-buffer@3.10.0 2015-01-14 16:15:53 -08:00
Ben Ogle 3dc908c5ff Use eventType from pathwatcher's watch errors in messages 2015-01-14 16:15:53 -08:00
Ben Ogle 2355862101 ⬆️ pathwatcher@2.6.0 2015-01-14 16:15:53 -08:00
Ben Ogle e51e859631 Clean up error messages for keymap.cson
Use the computed path as well
2015-01-14 16:15:53 -08:00
Ben Ogle 6211f7330f Use path name in config error messsages 2015-01-14 16:15:53 -08:00
Ben Ogle 62eac3f8a5 Fix error string when there is a user config error 2015-01-14 16:15:53 -08:00
Ben Ogle ba40706265 Add a notification when the init script can’t be loaded 2015-01-14 16:15:53 -08:00
Ben Ogle 683203a9a1 Attempt to fix theme manager specs
They work for me!
2015-01-14 16:15:53 -08:00
Ben Ogle 3ec3c2b69d Fix theme manager specs 2015-01-14 16:15:53 -08:00
Ben Ogle 1bc2248fc2 Fix config specs 2015-01-14 16:15:53 -08:00
Ben Ogle 4be793f465 Post notifications when the user’s sheet cannot be loaded / parsed 2015-01-14 16:15:53 -08:00
Ben Ogle 3454249b58 Allow ENOENT errors in project.open 2015-01-14 16:15:52 -08:00
Ben Ogle cbd42ac20c Don’t need the pane in workspace.open 2015-01-14 16:15:52 -08:00
Ben Ogle 02e4482def :up_arrow: command-palette@0.33.0 2015-01-14 16:15:52 -08:00
Ben Ogle 2306f16b30 :up_arrow: snippets for better errors 2015-01-14 16:15:52 -08:00
Ben Ogle 9bb6a18d41 Support empty paths 2015-01-14 16:15:52 -08:00
Ben Ogle 85844f03f7 Display better error on unable to watch keycap.cson 2015-01-14 16:15:52 -08:00
Ben Ogle 4b8e98af0c Display a better message when there are config watch errors on startup 2015-01-14 16:15:52 -08:00
Ben Ogle f30992c5f2 Upgrade pathwatcher and text-buffer for error catching 2015-01-14 16:15:52 -08:00
Ben Ogle 4af007dce3 💄 2015-01-14 16:15:52 -08:00
Ben Ogle 1e7da34346 Use code rather than name for custom error 2015-01-14 16:15:52 -08:00
Ben Ogle b8efbedee1 Create a warning notification when buffer has a watch error 2015-01-14 16:15:52 -08:00
Ben Ogle 8435826e8a Remove linter errors 2015-01-14 16:15:52 -08:00
Ben Ogle 16468eb65d Move workspace specs to workspace. 2015-01-14 16:15:52 -08:00
Ben Ogle d5e04e883e Use the error.code and path in the error 2015-01-14 16:15:52 -08:00
Ben Ogle 2f3ce50875 Add large file issue link to large file error 2015-01-14 16:15:51 -08:00
Ben Ogle c20d3a8182 Throw an error when the error is unhandled 2015-01-14 16:15:51 -08:00
Ben Ogle ca1f66d197 Post a notification when the user cannot access a file 2015-01-14 16:15:51 -08:00
Ben Ogle 4138b95146 Remove unnecessary < chars. wtf 2015-01-14 16:15:51 -08:00
Ben Ogle 11d4222c9f Handle error when opening a file that doesn’t exist 2015-01-14 16:15:51 -08:00
Ben Ogle bc454f14e0 Add a warning notification for oversize file open 2015-01-14 16:15:51 -08:00
Kevin Sawicki bc65322da0 Merge pull request #5066 from adrianlee44/patch-1
Fix getOriginUrl calling itself
2015-01-14 15:52:25 -08:00
Adrian Lee 63ad6b1a66 Fix getOriginUrl calling itself 2015-01-14 15:44:59 -08:00
Nathan Sobo 4dd0bf7dab ⬆️ tabs 2015-01-14 16:14:26 -07:00
Nathan Sobo aa7482ac28 ⬆️ deprecation-cop 2015-01-14 16:07:51 -07:00
Nathan Sobo ad1d92d6d9 ⬆️ markdown-preview 2015-01-14 16:02:59 -07:00
Kevin Sawicki 131e7a021a ⬆️ spell-check@0.50 2015-01-14 15:00:53 -08:00
Max Brunsfeld 38e0c39c4a ⬆️ styleguide@0.42.0
For deprecation fixes
2015-01-14 14:27:40 -08:00
Max Brunsfeld c964e718b7 ⬆️ symbols-view@0.78.0
For deprecation fixes
2015-01-14 14:25:42 -08:00
Max Brunsfeld 2738da2829 ⬆️ tabs@0.63.0
For deprecation fixes
2015-01-14 14:20:58 -08:00
Max Brunsfeld fe36f5f9de ⬆️ timecop@0.27.0
For deprecation fixes
2015-01-14 14:05:40 -08:00
Max Brunsfeld c179e562a7 ⬆️ tree-view@0.148.0
For deprecation fixes
2015-01-14 13:58:28 -08:00
Max Brunsfeld e8ad1aa074 ⬆️ wrap-guide@0.30.0
For deprecation fixes
2015-01-14 13:57:59 -08:00
Nathan Sobo 3f190d67da ⬆️ markdown-preview to fix deprecations 2015-01-14 14:23:55 -07:00
Nathan Sobo e60a9e45f7 Display package name correctly for ::getUri deprecation warnings
We capture the package name during the call to ::addOpener and use it
if any open items have the deprecated ::getUri method.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-14 14:23:17 -07:00
Max Brunsfeld 114b938edf Merge pull request #5060 from atom/mb-fix-folds-with-splits
Fix folds with splits
2015-01-14 13:13:52 -08:00
Nathan Sobo 3093a35554 ⬆️ status-bar for deprecation fixes 2015-01-14 11:45:15 -07:00
Kevin Sawicki 3839432654 Merge pull request #5059 from atom/ks-squirrel-zero-point-eight
Upgrade to Squirrel for Windows 0.8
2015-01-14 10:42:00 -08:00
Nathan Sobo 0a66e9d21e Centralize deprecation warnings about getUri in Pane::addItem 2015-01-14 11:36:28 -07:00
Kevin Sawicki 3dbdfe54ad Use Atom icon in AtomSetup.exe 2015-01-14 10:32:50 -08:00
Kevin Sawicki 485fc62d22 ⬆️ grunt-atom-shell-installer@0.19 2015-01-14 10:32:50 -08:00
Kevin Sawicki a0f8405457 ⬆️ grunt-atom-shell-installer@0.18 2015-01-14 10:32:49 -08:00
Nathan Sobo 56da4f49d4 Avoid spurious deprecation warnings when editor URIs are undefined
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-14 11:21:08 -07:00
Max Brunsfeld 0d5a707ffb Fix folding with splits
Fixes #4099

Signed-off-by: Nathan Sobo <nathan@github.com>
2015-01-14 09:43:20 -08:00
Kevin Sawicki 76b7a8cec9 Merge pull request #5051 from tony612/fix-marker-doc
📝 fix setHead & setTail docs in Marker
2015-01-14 09:10:26 -08:00
Nathan Sobo de987d3fd2 ⬆️ deprecation-cop 2015-01-14 10:04:03 -07:00
Tony Han 1a09ec6b92 📝 fix setHead & setTail docs in Marker
Change range -> position
2015-01-14 20:42:13 +08:00
simurai 149cfdf0c2 Let headers inherit the theme font-family
Issue https://github.com/atom/settings-view/issues/340
2015-01-14 10:37:06 +09:00
Kevin Sawicki d522438876 📝 💄 2015-01-13 17:23:15 -08:00
Kevin Sawicki 8fe72cd469 📝 Remove extra s in essential 2015-01-13 17:23:15 -08:00
Nathan Sobo 51a950c419 ⬆️ deprecation-cop 2015-01-13 18:03:38 -07:00
Kevin Sawicki e693254913 Prevent form submits from changing the window URL
Refs atom/settings-view#341
2015-01-13 16:01:24 -08:00
Kevin Sawicki 170a71f416 ⬆️ apm@0.120 2015-01-13 14:52:11 -08:00
Kevin Sawicki e8c19300b5 Use access token when downloading atom shell 2015-01-13 14:37:21 -08:00
Kevin Sawicki 045850ba06 Prepare 0.173 2015-01-13 14:29:26 -08:00
Kevin Sawicki 366ded2f5e ⬆️ season@5.0.5 2015-01-13 14:11:44 -08:00
Kevin Sawicki 716682f072 Defer require until a Color is parsed 2015-01-13 13:40:42 -08:00
Kevin Sawicki 29ee7cc76b Prepare 0.172 2015-01-13 13:27:07 -08:00
Max Brunsfeld 98fe40546e ⬆️ autocomplete@0.42
For inclusion of completions from all matching scopes
2015-01-13 13:04:24 -08:00
Kevin Sawicki 6765eeba1a ⬆️ settings-view@0.172 2015-01-13 12:22:26 -08:00
Kevin Sawicki 1c638129be ⬆️ season@5.0.4 2015-01-13 12:11:50 -08:00
Kevin Sawicki ae2ce9a1f9 Log raw load settings when parsing fails 2015-01-13 12:06:08 -08:00
Ben Ogle b3de4a593d Upgrade notifications to render notifications posted before activation 2015-01-13 11:57:42 -08:00
Ben Ogle dc22592512 Update deprecation-cop for new selector deprecations 2015-01-13 11:51:06 -08:00
Ben Ogle 85208d197d Upgrade tabs to have use custom elements 2015-01-13 11:27:07 -08:00
Kevin Sawicki 277d3ea4ff ⬆️ grunt-cson@0.14 2015-01-13 11:00:23 -08:00
Kevin Sawicki 6d661692df ⬆️ grunt-cson@0.13 2015-01-13 10:55:49 -08:00
Kevin Sawicki 14a75b8605 ⬆️ atom-keymap@2.5.2 2015-01-13 10:47:28 -08:00
Kevin Sawicki 9564fdb48f ⬆️ grunt-cson@0.12 2015-01-13 10:27:39 -08:00
Kevin Sawicki d5e4f051be ⬆️ react-atom-fork@0.11.4 2015-01-13 10:27:18 -08:00
Kevin Sawicki 8c1ee8a759 ⬆️ language-go@0.21 2015-01-13 10:06:48 -08:00
Kevin Sawicki ad64017b7a Merge pull request #5031 from tony612/fix-text-editor-observeCursors-doc
📝 fix ::observeCursors doc
2015-01-13 09:55:49 -08:00
Tony Han 4ebf748fd7 📝 fix ::observeCursors doc
Change selection -> cursor
2015-01-14 01:53:25 +08:00
Kevin Sawicki f0b9b9eb6c ⬆️ season@5.0.3 2015-01-13 09:49:32 -08:00
Nathan Sobo 49cd3eb5da Clear window.setTimeout mock before each spec
This fixes a failure in the keymap spec where we assert that setTimeout
hasn’t been called.
2015-01-13 10:17:48 -07:00
Nathan Sobo ab4588571d Update default style sheet with ::shadow selector 2015-01-13 10:07:03 -07:00
Kevin Sawicki 0097e6246e ⬆️ settings-view@0.171 2015-01-13 09:02:55 -08:00
Nathan Sobo 296409d9d0 Update style guide
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 22:00:24 -08:00
Nathan Sobo 7f8ab72f53 Capitalize initialisms
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 22:00:24 -08:00
Kevin Sawicki 7f2e118abc ⬆️ settings-view@0.170 2015-01-12 18:13:57 -08:00
Kevin Sawicki 415a7e3214 Merge pull request #4930 from atom/ks-add-colors-to-config-schema
Add color support to config schema
2015-01-12 17:54:14 -08:00
Kevin Sawicki 1f3708115e 💄 2015-01-12 17:34:44 -08:00
Kevin Sawicki 55c8b37395 📝 Link to config method 2015-01-12 17:34:44 -08:00
Kevin Sawicki 9d3e9d19e1 📝 Link to Color 2015-01-12 17:34:44 -08:00
Kevin Sawicki 432c31c4dc 💄 2015-01-12 17:34:44 -08:00
Kevin Sawicki e257395f7d Always use settings for parsing 2015-01-12 17:34:44 -08:00
Kevin Sawicki 3f224716a1 💄 2015-01-12 17:34:43 -08:00
Kevin Sawicki 640f8920fb Fix bounds checking of alpha 2015-01-12 17:34:43 -08:00
Kevin Sawicki c015a5c03b 📝 Add period 2015-01-12 17:34:43 -08:00
Kevin Sawicki 88f489715f 📝 Add period 2015-01-12 17:34:43 -08:00
Kevin Sawicki f48a7ac210 Mark methods as essential 2015-01-12 17:34:43 -08:00
Kevin Sawicki 44939a12a0 Validate color properties when set 2015-01-12 17:34:43 -08:00
Kevin Sawicki b256d30bc7 Mark Color as public 2015-01-12 17:34:43 -08:00
Kevin Sawicki 574c56713c Add Color class with string helpers 2015-01-12 17:34:43 -08:00
Kevin Sawicki b8822b32db Only coerce strings and plain objects 2015-01-12 17:34:43 -08:00
Kevin Sawicki 8c39818670 Don't blow up when asking for schema at non-existent path 2015-01-12 17:34:43 -08:00
Kevin Sawicki 5a2c208804 Add specs with invalid objects 2015-01-12 17:34:43 -08:00
Kevin Sawicki fc899f54cf Add specs for setting with an object 2015-01-12 17:34:42 -08:00
Kevin Sawicki c480080dd2 Add fallback values when NaN is parsed 2015-01-12 17:34:42 -08:00
Kevin Sawicki b923b57bcc Add specs for hsl and hsla colors 2015-01-12 17:34:42 -08:00
Kevin Sawicki 1609b6c51b ⬆️ legal-eagle@0.8 2015-01-12 17:34:42 -08:00
Kevin Sawicki 66e30dd38a ⬆️ legal-eagle@0.7 2015-01-12 17:34:42 -08:00
Kevin Sawicki ec96c5f1fc 📝 Add color docs 2015-01-12 17:34:42 -08:00
Kevin Sawicki 319ec244e1 Add spec for invalid values 2015-01-12 17:34:42 -08:00
Kevin Sawicki 1267a1e14e Add spec for default color value 2015-01-12 17:34:42 -08:00
Kevin Sawicki 0411f1584c Add color schema type 2015-01-12 17:34:42 -08:00
Kevin Sawicki 9dc9359e7c ⬆️ apm@0.119 2015-01-12 17:32:27 -08:00
Kevin Sawicki 47668306bd ⬆️ styleguide@0.41 2015-01-12 17:30:48 -08:00
Kevin Sawicki 09920548e8 ⬆️ styleguide@0.40 2015-01-12 17:25:29 -08:00
Kevin Sawicki dea4e4dc19 ⬆️ markdown-preview@0.117 2015-01-12 17:25:29 -08:00
Kevin Sawicki 95ae4a704e ⬆️ snippets@0.67 2015-01-12 17:25:29 -08:00
Kevin Sawicki 903df93933 ⬆️ settings-view@0.169 2015-01-12 17:25:29 -08:00
Kevin Sawicki 4bc6906bdc ⬆️ language-gfm@0.62 2015-01-12 17:25:29 -08:00
Kevin Sawicki f6f71db9ee ⬆️ first-mate@2.2.4 2015-01-12 17:25:29 -08:00
Kevin Sawicki aca8dc3dfb ⬆️ atom-keymap@2.5.1 2015-01-12 17:25:28 -08:00
Nathan Sobo 8e0e6f5508 Merge pull request #5017 from atom/ns-per-editor-gutter-visibility
Add gutter-hidden attribute to atom-text-editor elements
2015-01-12 18:11:50 -07:00
Kevin Sawicki c4d38a738b Merge pull request #4971 from atom/ks-four-season
Stop eval'ing .cson files
2015-01-12 17:06:39 -08:00
Nathan Sobo eee31c3e8c Don’t use component property for TextEditorView::mini shim
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 17:56:47 -07:00
Kevin Sawicki f40d2fb1cc ⬆️ season@5.0.2 2015-01-12 16:55:58 -08:00
Kevin Sawicki 8c30f5fe3f ⬆️ season@5.0.1 2015-01-12 16:55:58 -08:00
Kevin Sawicki e69bd77ef2 ⬆️ coffeestack@0.8 2015-01-12 16:55:58 -08:00
Kevin Sawicki 1c57a48287 ⬆️ coffee-script@1.8 2015-01-12 16:55:58 -08:00
Kevin Sawicki e5a1f15833 Unfocus spec 2015-01-12 16:55:58 -08:00
Kevin Sawicki 8a13c4b959 ⬆️ season@5 2015-01-12 16:55:58 -08:00
Kevin Sawicki 36c0d214f0 ⬆️ season@4.0.3 2015-01-12 16:55:58 -08:00
Kevin Sawicki ae859bad46 ⬆️ season@4.0.2 2015-01-12 16:55:58 -08:00
Kevin Sawicki 1207a432eb ⬆️ season@4.0.1 2015-01-12 16:55:58 -08:00
Kevin Sawicki 2f31822942 ⬆️ grunt-cson@0.11 2015-01-12 16:55:57 -08:00
Kevin Sawicki dea75513b5 Add missing colon 2015-01-12 16:55:57 -08:00
Kevin Sawicki c3a2b3d321 Add cson-safe license override 2015-01-12 16:55:57 -08:00
Kevin Sawicki 97dd53cbdb ⬆️ season@4 2015-01-12 16:55:57 -08:00
Nathan Sobo dd80226c23 Revert "Handle addition/removal of ‘gutter-hidden’ attribute"
This reverts commit 6926236268.

There seems to be some bug or timing issue that prevents the
attachedCallback from being called in all cases when the
attributeChangedCallback is defined. We can figure this out at
a later time.
2015-01-12 17:39:07 -07:00
Nathan Sobo 6926236268 Handle addition/removal of ‘gutter-hidden’ attribute
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Nathan Sobo 43f57347d7 Add ‘gutter-hidden’ attribute to TextEditorElement
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Nathan Sobo c0b78db159 💄
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Nathan Sobo 002918049d 🐎 Cache gutterVisible state in React component
This avoids a config read on every render.
2015-01-12 16:21:31 -07:00
Nathan Sobo f00b0b7f7a Add TextEditor::set/isGutterVisible
Controls gutter visibility on individual editors.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-12 16:21:31 -07:00
Daniel Hengeveld 6ef8c21977 Merge pull request #5015 from atom/dh-bump-settings-view
⬆️ settings-view@0.168
2015-01-12 12:51:26 -08:00
Daniel Hengeveld 9b2ec09bf1 ⬆️ settings-view@0.168 2015-01-12 12:17:30 -08:00
Ben Ogle 52e91932e0 Merge pull request #5013 from kant/patch-1
Little fix
2015-01-12 11:27:42 -08:00
Darío Hereñú acd34ffaf8 Little fix 2015-01-12 16:27:01 -03:00
Kevin Sawicki 2f62346c58 Link to Windows CI post as well 2015-01-12 11:15:50 -08:00
Ben Ogle f59ffc2485 Merge pull request #4979 from DinisCruz/patch-1
Adding link to blog post with Travis CI instructions
2015-01-12 10:54:32 -08:00
Kevin Sawicki 3090a24957 Prepare 0.171 2015-01-12 10:02:15 -08:00
Kevin Sawicki b39cee3997 ⬆️ language-python@0.30 2015-01-12 09:18:15 -08:00
Kevin Sawicki 8c6e782bd4 ⬆️ language-javascript@0.54 2015-01-12 09:17:13 -08:00
Kevin Sawicki 31106874ed ⬆️ language-xml@0.27 2015-01-12 09:16:23 -08:00
Max Brunsfeld ee73d2cf2a 📝 fix ::onDidChangeActivePaneItem docs
Refs #4946
2015-01-12 08:24:44 -08:00
Dinis Cruz f946061b6c Adding link to blog post with Travis CI instructions 2015-01-10 12:27:32 +00:00
Kevin Sawicki 29f95b88db deprecatedStart is an index 2015-01-09 18:40:57 -08:00
Ben Ogle 48e6cd533d Add wasDisplayed to Notification 2015-01-09 17:35:26 -08:00
Max Brunsfeld 6cc1ffa793 ⬆️ atom-keymap@2.5.0 2015-01-09 17:11:52 -08:00
Max Brunsfeld ee7587e024 Update task docs 2015-01-09 16:59:13 -08:00
Max Brunsfeld fb0769783f Don't use Emitter::off in Task
Signed-off-by: Nathan Sobo <nathan@github.com>
2015-01-09 16:59:13 -08:00
Max Brunsfeld 174b7072b7 Add specs for Task events
Signed-off-by: Nathan Sobo <nathan@github.com>
2015-01-09 16:59:13 -08:00
Kevin Sawicki f5cd8d107f Merge pull request #4973 from atom/ld-scope-notification
Log scopes to notification instead of console
2015-01-09 16:43:50 -08:00
Lee Dohm ef97197681 Use list.map instead of _.map list 2015-01-09 16:42:16 -08:00
Lee Dohm acb19c1fe1 Log scopes to notification instead of console
Fixes #4969
2015-01-09 16:33:48 -08:00
Kevin Sawicki 495a45e723 ⬆️ language-gfm@0.61 2015-01-09 15:48:17 -08:00
Max Brunsfeld 02a6ed554d Make ContextMenuManager::showForEvent private
Signed-off-by: Nathan Sobo <nathan@github.com>
2015-01-09 15:47:30 -08:00
Max Brunsfeld dde5e6123c Make Cursor::updateVisibility private 2015-01-09 15:41:08 -08:00
Nathan Sobo d26c19a0ec Deprecate Project::resolve
It’s not something that will make sense once we add the ability to have
multiple directories in a project. This adds a new private method on
Project, ::resolvePath, with the original implementation for convenience
until we actually implement multi-folder projects.
2015-01-09 15:03:07 -08:00
Max Brunsfeld f9bde050b4 Handle TextEditorElement::focus() while parent is being attached
Fixes atom/autocomplete#61
2015-01-09 15:00:35 -08:00
Nathan Sobo 19bf64f3cd Revert "Deprecate Project::resolve"
This reverts commit 3c5bd9f10a.
2015-01-09 13:58:01 -08:00
Nathan Sobo 3c5bd9f10a Deprecate Project::resolve
It’s not something that will make sense once we add the ability to have
multiple directories in a project.
2015-01-09 13:40:35 -08:00
Ben Ogle a47782ddd8 Fix context menu docs Closes #4963 2015-01-09 13:28:57 -08:00
Nathan Sobo f21dc22803 Merge pull request #4955 from atom/ns-style-sheet-is-2-words
"Style sheet" is two words – Treat it that way in the API
2015-01-09 11:36:16 -08:00
Kevin Sawicki efe9102060 ⬆️ apm@0.118 2015-01-09 11:16:18 -08:00
Nathan Sobo 2c72c1522a ⬆️ open-on-github 2015-01-09 09:28:15 -08:00
Nathan Sobo 0a5b4f9b33 Make “style sheet” two words in package.json metadata
Rename `stylesheets` -> `styleSheets`
Rename `stylesheetsMain` -> `mainStyleSheet`
2015-01-09 09:04:04 -08:00
Nathan Sobo 932d3755ce Rename stylesheets/ directory in fixture packages 2015-01-09 08:56:12 -08:00
Nathan Sobo a2e855f087 Update docs to refer to styles/ instead of stylesheets/ 2015-01-09 08:42:28 -08:00
Nathan Sobo c078f64293 Rename package stylesheets/ directory to styles/ 2015-01-09 08:42:15 -08:00
Nathan Sobo 37ba67728b Fix core deprecations 2015-01-09 08:24:48 -08:00
Nathan Sobo 7f9d06f55b Move TextEditor::pixelPositionForScreen/BufferPosition to view layer
It doesn’t make sense to talk about pixels at the model layer long-term,
even though we currently store view dimension information in the model
so we don’t have to read from the DOM for optimization purposes. This
information is only available if the view is attached, however, making
these methods a liability on the model layer.
2015-01-09 08:22:45 -08:00
Nathan Sobo f151697c4c ⬆️ packages to remove deprecations 2015-01-08 18:29:38 -08:00
Max Brunsfeld d47efdb2f1 Merge pull request #4937 from atom/ns-clean-up-package-manager
Address issues with PackageManager
2015-01-08 18:21:51 -08:00
Nathan Sobo c3efed0a2c Update deprecation messages 2015-01-08 18:21:07 -08:00
Nathan Sobo a945725a2f Add shims for tests that manually dispatch deprecated events 2015-01-08 17:51:11 -08:00
Nathan Sobo 723b4d2787 Fix undefined Grim references 2015-01-08 17:51:11 -08:00
Nathan Sobo 4ab33890fc Add PackageManager::onDidLoad/UnloadPackage
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 7acf3d4d6b Add PackageManager::onDidDeactivatePackage 2015-01-08 17:51:11 -08:00
Nathan Sobo 6dd9834ae1 Remove defunct text-mate package specs 2015-01-08 17:51:11 -08:00
Nathan Sobo a6c9244c77 Add PackageManager::onDidActivatePackage
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo dbc88bde18 Remove special case in spec for packages converted from text-mate
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 18ac0091a8 Don’t call onDidActivateInitialPackages listeners until the right time
We wait until all packages without activation commands actually
activate.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 010bd643c0 Rename onDidActivateAll -> onDidActivateInitialPackages
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 15fa19efa3 Rename onDidLoadAll -> onDidLoadInitialPackages
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:11 -08:00
Nathan Sobo 30513cfde0 Rename ThemeManager methods for clarity/consistency
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:51:09 -08:00
Nathan Sobo d999b4eca0 Deprecate ThemeManager::setEnabledThemes
Suggest direct config write instead.

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:48:32 -08:00
Nathan Sobo 4ebd9bc775 ⬆️ deprecation-cop
Closes atom/deprecation-cop#16

Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:46:14 -08:00
Nathan Sobo caf613e7c8 Associate packageName metadata with scoped-properties/ deprecation
Signed-off-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
2015-01-08 17:41:50 -08:00
Kevin Sawicki c2da368463 ⬆️ atom-light-ui@0.37 2015-01-08 15:36:47 -08:00
Kevin Sawicki 61f44c9399 ⬆️ language-gfm@0.60 2015-01-08 13:25:07 -08:00
Kevin Sawicki 0a249f776b ⬆️ settings-view@0.167 2015-01-08 13:20:18 -08:00
Kevin Sawicki 00831775dd Merge pull request #4907 from atom/ks-use-different-sudo-compile-cache
Use special compile cache when sudo-ing as root
2015-01-08 11:09:19 -08:00
Ben Ogle 72743235fb Upgrade toatom-dark-ui@0.43.0 2015-01-08 10:47:09 -08:00
Kevin Sawicki 453a44dde3 Use special compile cache when sudo-ing as root 2015-01-08 10:18:54 -08:00
Kevin Sawicki d7158a2ced ⬆️ language-sass@0.31 2015-01-08 10:18:18 -08:00
Kevin Sawicki 4e7a9edefd Prepare 0.170 release 2015-01-08 09:55:06 -08:00
Kevin Sawicki 8fa6fdb90c Merge pull request #4807 from atom/sm-icons
Icon refresh
2015-01-08 09:42:08 -08:00
Kevin Sawicki a57df59cb8 Merge pull request #4911 from postcasio/patch-3
📝 Fix PackageManager::onDidLoadAll description
2015-01-08 09:32:57 -08:00
Kevin Sawicki 99d01b5d0e ⬆️ settings-view@0.166 2015-01-08 09:22:06 -08:00
dominic c806fcf9e7 📝 Fix PackageManager::onDidLoadAll description 2015-01-08 09:42:49 +00:00
Cheng Zhao 1bc9c2eb4b ⬆️ atom-shell@0.20.5 2015-01-08 00:11:59 -08:00
simurai bd08e36d2d Replace Win icons 2015-01-08 14:14:12 +09:00
Kevin Sawicki 76a2b8c54a Add sample list item 2015-01-07 17:57:11 -08:00
Kevin Sawicki 131d2ab3ad 📝 Drop the parens 2015-01-07 17:35:25 -08:00
Kevin Sawicki 0e0c508756 Merge pull request #4901 from danfuzz/fix-url-markdown
📝 Fix URL references for LESS.
2015-01-07 17:34:33 -08:00
Dan Bornstein 325d95ed35 📝 Un-parenthesize the recommendation about LESS.
Per suggestion from @kevinsawicki.
2015-01-07 17:32:07 -08:00
Kevin Sawicki 081fc0e1ae Use icon from resources directory 2015-01-07 16:22:11 -08:00
Kevin Sawicki a6cc6afb16 Don't bundle resources/linux 2015-01-07 16:20:57 -08:00
Nathan Sobo f330e58b4f Prepare 0.169.0 release 2015-01-07 16:35:29 -07:00
Nathan Sobo a406322748 Revert "Remove .pane-item selector from core"
This reverts commit ced66d920d.
2015-01-07 16:12:22 -07:00
Nathan Sobo 8ee428f9dc ⬆️ language-gfm 2015-01-07 15:56:28 -07:00
Nathan Sobo 437873411e ⬆️ base16-tomorrow-light-theme 2015-01-07 15:54:30 -07:00
Nathan Sobo 00eecd4802 ⬆️ settings-view 2015-01-07 15:49:49 -07:00
Kevin Sawicki 2cb13e1a66 Remove lint warning 2015-01-07 14:33:18 -08:00
Kevin Sawicki 8f7f1cef23 Prepare 0.168 2015-01-07 14:25:22 -08:00
Dan Bornstein 34d41efd9a 📝 Fix URL references for LESS. 2015-01-07 14:17:23 -08:00
Ben Ogle 82527c24f2 Upgrade deprecations asking for space-pen to use atom-space-pen-views 2015-01-07 14:02:57 -08:00
Kevin Sawicki ccfe787e4f ⬆️ snippets@0.66 2015-01-07 13:40:26 -08:00
Nathan Sobo 4a5b43553b ⬆️ atom-light-syntax 2015-01-07 14:19:25 -07:00
Kevin Sawicki da1ceb0e51 ⬆️ settings-view@0.164 2015-01-07 12:59:32 -08:00
Kevin Sawicki 97e0ddf15d Null out mainPath on resolve errors
The scope of this variable is outside the loop so this prevent
cache corruption based on using the mainPath value from previous
module.

Refs atom/atom-space-pen-views#5
2015-01-07 10:53:33 -08:00
Kevin Sawicki fb3cc5554c Catch errors spawning squirrel
Closes #4895
2015-01-07 10:24:19 -08:00
Nathan Sobo 184aecb4a4 ⬆️ snippets for onDidLoadSnippets method on main module 2015-01-07 10:48:49 -07:00
Nathan Sobo 181cecaf2f ⬆️ atom-light-syntax 2015-01-07 10:34:31 -07:00
Nathan Sobo ced66d920d Remove .pane-item selector from core
It’s still in some themes, but we should be able to use a structural
selector to style anything in the pane so people don’t have to add
this class.
2015-01-07 10:25:32 -07:00
Kevin Sawicki 6fe7eb086f Gracefully handle empty keymaps and menus
Closes atom/settings-view#310
2015-01-07 09:18:57 -08:00
Nathan Sobo 462af79d21 Fix deprecation suppression in specs 2015-01-07 10:12:04 -07:00
Kevin Sawicki 771a60b1bc ⬆️ language-less@0.24 2015-01-07 09:01:33 -08:00
Kevin Sawicki 3e34e426bf ⬆️ language-c@0.37 2015-01-07 09:00:10 -08:00
Nathan Sobo f77f48102c Merge pull request #4879 from atom/ns-style-priorities
Use 'priority' to correctly order style sheets rather than 'group'
2015-01-07 09:51:55 -07:00
Nathan Sobo 7dd67caf57 Remove ‘group’ parameter to addStyleSheet in favor of ‘priority’ 2015-01-07 09:51:42 -07:00
Nathan Sobo 8081595523 Merge pull request #4890 from SKAhack/fix-1
Fix removing the dragover event listener
2015-01-07 09:51:06 -07:00
Nathan Sobo 47cd2359c8 ⬆️ spell-check for shadow DOM fix 2015-01-07 09:43:19 -07:00
simurai 13cf51f835 Replace file icon 2015-01-07 23:06:08 +09:00
Hiroki Sato 571d146ec0 Fix removing the dragover event listener 2015-01-07 22:49:25 +09:00
simurai dc06173f2f Replace main icon 2015-01-07 17:13:34 +09:00
simurai 358799285e Increse icon line thickness 2015-01-07 16:49:31 +09:00
Kevin Sawicki 8f4555b970 ⬆️ settings-view@0.163 2015-01-06 20:31:23 -08:00
Kevin Sawicki e0bc7948ae ⬆️ settings-view@0.162 2015-01-06 20:27:52 -08:00
Kevin Sawicki a606fc516b 💄 2015-01-06 20:26:45 -08:00
Nathan Sobo 2c1f8ce733 Set the style element priority based on the group
This ensures that elements are always in the desired order regardless
of the order the groups are added.
2015-01-06 19:41:57 -07:00
Nathan Sobo 62adc98b17 Use ‘user’ group for user style sheet instead of ‘userTheme’ 2015-01-06 19:33:39 -07:00
Nathan Sobo 94e12ee886 Handle priority in when inserting style elements in style manager 2015-01-06 19:33:14 -07:00
Nathan Sobo 4c74b07b22 Order style elements by priority 2015-01-06 19:14:54 -07:00
Kevin Sawicki 8eb53696a6 Merge pull request #4877 from atom/ld-doc-mention-unlink
📝 Add section on apm unlink to debugging doc
2015-01-06 18:01:14 -08:00
Lee Dohm f9e28af59b 📝 Add section on apm unlink to debugging doc 2015-01-06 17:56:04 -08:00
Ben Ogle 3b5bb1501c 💄 2015-01-06 17:09:59 -08:00
Ben Ogle 8c4c15c17a Fix colons in examples 2015-01-06 17:03:29 -08:00
Ben Ogle ae61ecf602 Upgrade to event-kit@1.0.1 2015-01-06 17:01:46 -08:00
Ben Ogle 9a7582fd0b Upgrade solarized-light@0.17.0 2015-01-06 16:53:39 -08:00
Ben Ogle f7f2f4497b Add docs for cson format to menu manager 2015-01-06 16:51:15 -08:00
Ben Ogle d4c4ab58b1 More information in the context menu docs 2015-01-06 16:45:31 -08:00
Kevin Sawicki a01e6e543e POST data as JSON 2015-01-06 14:21:46 -08:00
Kevin Sawicki d931b3ed5c Use util.inspect on details 2015-01-06 14:18:47 -08:00
Kevin Sawicki b95a7f47a8 Create draft release when one does not exist 2015-01-06 14:09:52 -08:00
Ben Ogle 06cbbe4b67 Upgrade notifications to 0.23.0 2015-01-06 12:37:18 -08:00
Kevin Sawicki 7d44026a92 ⬆️ tabs@0.61 2015-01-06 12:00:06 -08:00
Nathan Sobo 11b0a80d3d ⬆️ bracket-matcher for partial styling fix 2015-01-06 12:47:50 -07:00
Kevin Sawicki 92a8701c70 Add icon and title to update dialogs
Closes #4718
2015-01-06 11:44:10 -08:00
Nathan Sobo 08e1d550c8 ⬆️ autocomplete for spec fix 2015-01-06 12:14:50 -07:00
Nathan Sobo c9eb84f2a4 Fix deprecation location reporting in spec runner 2015-01-06 11:50:20 -07:00
Ben Ogle 74afcc58ac Merge pull request #4858 from atom/ld-doc-project-contains
📝 Prevent confusion over project.contains
2015-01-06 10:49:17 -08:00
Nathan Sobo 180725799a Unmount TextEditorComponent when TextEditorElement is detached
Fixes #4381
Fixes #4700
2015-01-06 11:35:26 -07:00
Kevin Sawicki 03468e405a ⬆️ bracket-matcher@0.66 2015-01-06 10:26:44 -08:00
Kevin Sawicki 1fd4e945ee ⬆️ tabs@0.60 2015-01-06 10:26:29 -08:00
Nathan Sobo 0b48150b71 ⬆️ bracket-matcher for shadow DOM fix 2015-01-06 10:49:35 -07:00
Kevin Sawicki bed8abea22 ⬆️ first-mate@2.2.3 2015-01-06 09:48:26 -08:00
Nathan Sobo 893bdda47d ⬆️ language- packages to rename scoped-properties/ to settings/ 2015-01-06 10:23:28 -07:00
Lee Dohm 0b98093370 📝 Prevent confusion over project.contains
See https://discuss.atom.io/t/testing-for-the-existence-of-a-file/14079
2015-01-05 21:32:11 -08:00
Kevin Sawicki 6abe05b1ab ⬆️ incompatible-packages@0.19 2015-01-05 17:58:13 -08:00
Kevin Sawicki 0f45937adf ⬆️ language-python@0.28 2015-01-05 17:55:53 -08:00
Kevin Sawicki c8726c991f Merge pull request #4592 from atom/chrome39
Upgrade to Chrome39
2015-01-05 17:42:12 -08:00
Nathan Sobo 60205aaabe ⬆️ wrap-guide 2015-01-05 18:33:06 -07:00
Nathan Sobo 6a16c8a59c ⬆️ whitespace 2015-01-05 18:31:49 -07:00
Nathan Sobo a055f09a6c ⬆️ tree-view 2015-01-05 18:23:03 -07:00
Nathan Sobo c19b42a49c ⬆️ styleguide 2015-01-05 18:20:14 -07:00
Nathan Sobo 2632e9aa10 ⬆️ go-to-line 2015-01-05 18:18:49 -07:00
Nathan Sobo a9753d430e ⬆️ spell-check 2015-01-05 18:17:31 -07:00
Kevin Sawicki 796eefd012 ⬆️ apm@0.117 2015-01-05 17:14:58 -08:00
Kevin Sawicki 0f9eea34a5 ⬆️ atom-shell@0.20.4 2015-01-05 17:14:58 -08:00
Kevin Sawicki a84e19c9bd ⬆️ grunt-atom-shell-installer@0.16 2015-01-05 17:14:58 -08:00
Kevin Sawicki 6d276d39d3 ⬆️ atom-shell@0.20.3 2015-01-05 17:14:58 -08:00
Cheng Zhao ab203e5f81 ⬆️ grunt-atom-shell-installer@0.14.0 2015-01-05 17:14:58 -08:00
Cheng Zhao 61512b9e19 ⬆️ apm@0.115.0 2015-01-05 17:14:58 -08:00
Cheng Zhao c29c4652b0 ⬆️ atom-shell@0.20.0 2015-01-05 17:14:58 -08:00
Nathan Sobo a9c0553e31 ⬆️ snippets 2015-01-05 18:11:27 -07:00
Nathan Sobo 6d6e5baa9a ⬆️ markdown-preview 2015-01-05 18:05:38 -07:00
Nathan Sobo 1de76c7d73 ⬆️ base16-tomorrow-dark-theme 2015-01-05 17:57:18 -07:00
Nathan Sobo f6b7450dea ⬆️ background-tips 2015-01-05 17:53:23 -07:00
Nathan Sobo 71e1928f74 ⬆️ autocomplete 2015-01-05 17:49:31 -07:00
Nathan Sobo 1a709065f8 ⬆️ find-and-replace 2015-01-05 17:32:28 -07:00
Kevin Sawicki dca99cb34e ⬆️ language-css@0.25 2015-01-05 15:11:05 -08:00
Kevin Sawicki 3e79f54860 Prepare 0.167 2015-01-05 14:57:02 -08:00
simurai 6b34a18bd9 Replace Mac icons
with Yosemite version
2014-12-30 23:04:49 +09:00
121 arquivos alterados com 2098 adições e 1132 exclusões
+5
Ver Arquivo
@@ -88,6 +88,7 @@ For more information on how to work with Atom's official packages, see
* :lock: `:lock:` when dealing with security
* :arrow_up: `:arrow_up:` when upgrading dependencies
* :arrow_down: `:arrow_down:` when downgrading dependencies
* :shirt: `:shirt:` when removing linter warnings
## CoffeeScript Styleguide
@@ -99,6 +100,10 @@ For more information on how to work with Atom's official packages, see
* Avoid spaces inside the curly-braces of hash literals:
* `{a: 1, b: 2}` instead of `{ a: 1, b: 2 }`
* Include a single line of whitespace between methods.
* Capitalize initialisms and acronyms in names, except for the first word, which
should be lower-case:
* `getURI` instead of `getUri`
* `uriToOpen` instead of `URIToOpen`
## Documentation Styleguide
+1 -1
Ver Arquivo
@@ -6,6 +6,6 @@
"url": "https://github.com/atom/atom.git"
},
"dependencies": {
"atom-package-manager": "0.116.0"
"atom-package-manager": "0.120.0"
}
}
+2
Ver Arquivo
@@ -198,6 +198,7 @@ module.exports = (grunt) ->
outputDir: 'atom-shell'
downloadDir: atomShellDownloadDir
rebuild: true # rebuild native modules after atom-shell is updated
token: process.env.ATOM_ACCESS_TOKEN
'create-windows-installer':
appDirectory: shellAppDir
@@ -205,6 +206,7 @@ module.exports = (grunt) ->
authors: 'GitHub Inc.'
loadingGif: path.resolve(__dirname, '..', 'resources', 'win', 'loading.gif')
iconUrl: 'https://raw.githubusercontent.com/atom/atom/master/resources/win/atom.ico'
setupIcon: path.resolve(__dirname, '..', 'resources', 'win', 'atom.ico')
shell:
'kill-atom':
+5 -5
Ver Arquivo
@@ -12,19 +12,19 @@
"fs-plus": "2.x",
"github-releases": "~0.2.0",
"grunt": "~0.4.1",
"grunt-atom-shell-installer": "^0.13.2",
"grunt-atom-shell-installer": "^0.19.0",
"grunt-cli": "~0.1.9",
"grunt-coffeelint": "git+https://github.com/atom/grunt-coffeelint.git#cfb99aa99811d52687969532bd5a98011ed95bfe",
"grunt-contrib-coffee": "~0.9.0",
"grunt-contrib-coffee": "~0.12.0",
"grunt-contrib-csslint": "~0.1.2",
"grunt-contrib-less": "~0.8.0",
"grunt-cson": "0.10.0",
"grunt-download-atom-shell": "~0.10.0",
"grunt-cson": "0.14.0",
"grunt-download-atom-shell": "~0.11.0",
"grunt-lesslint": "0.13.0",
"grunt-peg": "~1.1.0",
"grunt-shell": "~0.3.1",
"harmony-collections": "~0.3.8",
"legal-eagle": "~0.6.0",
"legal-eagle": "~0.8.0",
"minidump": "~0.8",
"npm": "~1.4.5",
"rcedit": "~0.3.0",
+1
Ver Arquivo
@@ -71,6 +71,7 @@ module.exports = (grunt) ->
path.join('build', 'Release', 'obj')
path.join('build', 'Release', '.deps')
path.join('vendor', 'apm')
path.join('resources', 'linux')
path.join('resources', 'mac')
path.join('resources', 'win')
+5 -1
Ver Arquivo
@@ -1,4 +1,5 @@
path = require 'path'
fs = require 'fs'
LessCache = require 'less-cache'
@@ -25,7 +26,10 @@ module.exports = (grunt) ->
for theme in configuration
# TODO Use AtomPackage class once it runs outside of an Atom context
themePath = path.resolve('node_modules', theme)
stylesheetsDir = path.join(themePath, 'stylesheets')
if fs.existsSync(path.join(themePath, 'stylesheets'))
stylesheetsDir = path.join(themePath, 'stylesheets')
else
stylesheetsDir = path.join(themePath, 'styles')
{main} = grunt.file.readJSON(path.join(themePath, 'package.json'))
main ?= 'index.less'
mainPath = path.join(themePath, main)
+25 -2
Ver Arquivo
@@ -101,7 +101,7 @@ getAssets = ->
logError = (message, error, details) ->
grunt.log.error(message)
grunt.log.error(error.message ? error) if error?
grunt.log.error(details) if details
grunt.log.error(require('util').inspect(details)) if details
zipAssets = (buildDir, assets, callback) ->
zip = (directory, sourcePath, assetName, callback) ->
@@ -142,7 +142,30 @@ getAtomDraftRelease = (callback) ->
firstDraft.assets = assets
callback(null, firstDraft)
else
callback(new Error('No draft release in atom/atom repo'))
createAtomDraftRelease(callback)
createAtomDraftRelease = (callback) ->
{version} = require('../../package.json')
options =
uri: 'https://api.github.com/repos/atom/atom/releases'
method: 'POST'
headers: defaultHeaders
json:
tag_name: "v#{version}"
name: version
draft: true
body: """
### Notable Changes
* Something new
"""
request options, (error, response, body='') ->
if error? or response.statusCode isnt 201
logError("Creating atom/atom draft release failed", error, body)
callback(error ? new Error(response.statusCode))
else
callback(null, body)
deleteRelease = (release) ->
options =
+1 -1
Ver Arquivo
@@ -15,7 +15,7 @@ module.exports = (grunt) ->
return unless process.env.JANKY_SHA1
stderr ?= ''
deprecatedStart = stderr.indexOf('Calls to deprecated functions')
return if deprecatedStart.length is -1
return if deprecatedStart is -1
grunt.log.error(label)
stderr = stderr.substring(deprecatedStart)
+1 -1
Ver Arquivo
@@ -3,7 +3,7 @@
## Structure of a Keymap File
Keymap files are encoded as JSON or CSON files containing nested hashes. They
work much like stylesheets, but instead of applying style properties to elements
work much like style sheets, but instead of applying style properties to elements
matching the selector, they specify the meaning of keystrokes on elements
matching the selector. Here is an example of some bindings that apply when
keystrokes pass through `atom-text-editor` elements:
+10 -10
Ver Arquivo
@@ -15,7 +15,7 @@ my-package/
menus/
spec/
snippets/
stylesheets/
styles/
index.coffee
package.json
```
@@ -38,10 +38,10 @@ In addition to the regular [npm package.json keys][npm-keys] available, Atom
package.json files have their own additions.
- `main` (**Required**): the path to the CoffeeScript file that's the entry point
to your package
- `stylesheets` (**Optional**): an Array of Strings identifying the order of the
to your package.
- `styles` (**Optional**): an Array of Strings identifying the order of the
style sheets your package needs to load. If not specified, style sheets in the
_stylesheets_ directory are added alphabetically.
_styles_ directory are added alphabetically.
- `keymaps`(**Optional**): an Array of Strings identifying the order of the
key mappings your package needs to load. If not specified, mappings in the
_keymaps_ directory are added alphabetically.
@@ -121,10 +121,10 @@ like you.
## Style Sheets
Style sheets for your package should be placed in the _stylesheets_ directory.
Style sheets for your package should be placed in the _styles_ directory.
Any style sheets in this directory will be loaded and attached to the DOM when
your package is activated. Style sheets can be written as CSS or [LESS] (but
LESS is recommended).
your package is activated. Style sheets can be written as CSS or [LESS], but
LESS is recommended.
Ideally, you won't need much in the way of styling. We've provided a standard
set of components which define both the colors and UI elements for any package
@@ -138,7 +138,7 @@ taken from the active theme's [ui-variables.less][ui-variables]. For more
information, see the [theme variables docs][theme-variables]. If you follow this
guideline, your package will look good out of the box with any theme!
An optional `stylesheets` array in your _package.json_ can list the style sheets
An optional `styleSheets` array in your _package.json_ can list the style sheets
by name to specify a loading order; otherwise, style sheets are loaded
alphabetically.
@@ -418,8 +418,8 @@ all the other available commands.
[underscore]: http://underscorejs.org/
[jasmine]: http://jasmine.github.io
[cson]: https://github.com/atom/season
[less]: http://lesscss.org
[ui-variables]: https://github.com/atom/atom-dark-ui/blob/master/stylesheets/ui-variables.less
[LESS]: http://lesscss.org
[ui-variables]: https://github.com/atom/atom-dark-ui/blob/master/styles/ui-variables.less
[first-package]: your-first-package.html
[convert-bundle]: converting-a-text-mate-bundle.html
[convert-theme]: converting-a-text-mate-theme.html
+6 -6
Ver Arquivo
@@ -1,8 +1,8 @@
# Creating a Theme
Atom's interface is rendered using HTML, and it's styled via [LESS] (a superset
of CSS). Don't worry if you haven't heard of LESS before; it's just like CSS,
but with a few handy extensions.
Atom's interface is rendered using HTML, and it's styled via [LESS] which is a
superset of CSS. Don't worry if you haven't heard of LESS before; it's just like
CSS, but with a few handy extensions.
Atom supports two types of themes: _UI_ and _syntax_. UI themes style
elements such as the tree view, the tabs, drop-down lists, and the status bar.
@@ -42,10 +42,10 @@ _Motif_ theme listed in the _Syntax Theme_ drop-down. Select it from the menu to
activate it, now when you open an editor you should see that your new
_motif-syntax_ theme in action.
Open up _stylesheets/colors.less_ to change the various colors variables which
Open up _styles/colors.less_ to change the various colors variables which
have been already been defined. For example, turn `@red` into `#f4c2c1`.
Then open _stylesheets/base.less_ and modify the various selectors that have
Then open _styles/base.less_ and modify the various selectors that have
been already been defined. These selectors style different parts of code in the
editor such as comments, strings and the line numbers in the gutter.
@@ -131,7 +131,7 @@ _styleguide_, or use the shortcut `cmd-ctrl-shift-g`.
![styleguide-img]
[atomio]: http://atom.io/packages
[less]: http://lesscss.org/
[LESS]: http://lesscss.org/
[git]: http://git-scm.com/
[atom]: https://atom.io/
[package.json]: ./creating-a-package.html#package-json
+1 -1
Ver Arquivo
@@ -54,7 +54,7 @@ You can also use `apm` to find new packages to install:
## Customizing Key Bindings
Atom keymaps work similarly to stylesheets. Just as stylesheets use selectors
Atom keymaps work similarly to style sheets. Just as style sheets use selectors
to apply styles to elements, Atom keymaps use selectors to associate keystrokes
with events in specific contexts. Here's a small example, excerpted from Atom's
built-in keymaps:
+12 -1
Ver Arquivo
@@ -3,7 +3,8 @@
Atom provides several tools to help you understand unexpected behavior and debug problems. This guide describes some of those tools and a few approaches to help you debug and provide more helpful information when [submitting issues]:
* [Update to the latest version](#update-to-the-latest-version)
* [Check Atom and package settings](#check-atom-and-package-settings)
* [Check for linked packages](#check-for-linked-packages)
* [Check Atom and package settings](#check-atom-and-package-settings)
* [Check the keybindings](#check-the-keybindings)
* [Check if the problem shows up in safe mode](#check-if-the-problem-shows-up-in-safe-mode)
* [Check your config files](#check-your-config-files)
@@ -24,6 +25,16 @@ $ atom --version
Head on over to the [list of releases][atom releases] and see if there's a more recent release. You can update to the most recent release by downloading Atom from the releases page, or with the in-app auto-updater. The in-app auto-updater checks for and downloads a new version after you restart Atom, or if you use the Atom > Check for Update menu option.
## Check for linked packages
If you develop or contribute to Atom packages, there may be left-over packages linked to your `~/.atom/packages` or `~/.atom/dev/packages` directories. You can use:
```shell
$ apm links
```
to list all linked development packages. You can remove the links using the `apm unlink` command. See `apm unlink --help` for details.
## Check Atom and package settings
In some cases, unexpected behavior might be caused by misconfigured or unconfigured settings in Atom or in one of the packages.
+4 -4
Ver Arquivo
@@ -1,6 +1,6 @@
# Upgrading Your UI Theme Or Package Selectors
In addition to changes in Atom's scripting API, we'll also be making some breaking changes to Atom's DOM structure, requiring stylesheets and keymaps in both packages and themes to be updated.
In addition to changes in Atom's scripting API, we'll also be making some breaking changes to Atom's DOM structure, requiring style sheets and keymaps in both packages and themes to be updated.
## Deprecation Cop
@@ -121,12 +121,12 @@ The selector features discussed above allow you to target shadow DOM content wit
```
my-ui-theme/
stylesheets/
styles/
index.less # loaded globally
index.atom-text-editor.less # loaded in the text editor shadow DOM
```
Check out this [style sheet](https://github.com/atom/decoration-example/blob/master/stylesheets/decoration-example.atom-text-editor.less) from the decoration-example package for an example of context-targeting.
Check out this [style sheet](https://github.com/atom/decoration-example/blob/master/styles/decoration-example.atom-text-editor.less) from the decoration-example package for an example of context-targeting.
Inside a context-targeted style sheet, there's no need to use the `::shadow` or `/deep/` expressions. If you want to refer to the element containing the shadow root, you can use the `::host` pseudo-element.
@@ -134,4 +134,4 @@ During the transition phase, style sheets targeting the `atom-text-editor` conte
[shadow-dom-101]: http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom
[shadow-dom-201]: http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201#toc-style-cat-hat
[find-and-replace]: https://github.com/atom/find-and-replace/blob/95351f261bc384960a69b66bf12eae8002da63f9/stylesheets/find-and-replace.less#L10
[find-and-replace]: https://github.com/atom/find-and-replace/blob/95351f261bc384960a69b66bf12eae8002da63f9/styles/find-and-replace.less#L10
+7
Ver Arquivo
@@ -127,3 +127,10 @@ describe "when a test is written", ->
expect("apples").toEqual("apples")
expect("oranges").not.toEqual("apples")
```
### Running on CI
It is now easy to run the specs in a CI environment like Travis and AppVeyor. See the
[Travis CI For Your Packages](http://blog.atom.io/2014/04/25/ci-for-your-packages.html)
and [AppVeyor CI For Your Packages](http://blog.atom.io/2014/07/28/windows-ci-for-your-packages.html)
posts for more details.
+2 -2
Ver Arquivo
@@ -1,7 +1,7 @@
# Your keymap
#
# Atom keymaps work similarly to stylesheets. Just as stylesheets use selectors
# to apply styles to elements, Atom keymaps use selectors to associate
# Atom keymaps work similarly to style sheets. Just as style sheets use
# selectors to apply styles to elements, Atom keymaps use selectors to associate
# keystrokes with events in specific contexts.
#
# You can create a new keybinding in this file by typing "key" and then hitting
+5 -1
Ver Arquivo
@@ -12,10 +12,14 @@
}
// style the background and foreground colors on the atom-text-editor-element
// itself
atom-text-editor {
}
atom-text-editor .cursor {
// To style other content in the text editor's shadow DOM, use the ::shadow
// expression
atom-text-editor::shadow .cursor {
}
+16 -16
Ver Arquivo
@@ -40,11 +40,11 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Object.defineProperty module.exports, '$', get: ->
deprecate """
Requiring `$` from `atom` is no longer supported.
If you are using `space-pen`, please require `$` from `space-pen`. Otherwise require `jquery` instead:
`{$} = require 'space-pen'`
If you are using `space-pen`, please require `$` from `atom-space-pen-views`. Otherwise require `jquery` instead:
`{$} = require 'atom-space-pen-views'`
or
`$ = require 'jquery'`
Add `"space-pen": "^4"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
Or add `"jquery": "^2"` to your package dependencies.
"""
$
@@ -52,27 +52,27 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Object.defineProperty module.exports, '$$', get: ->
deprecate """
Requiring `$$` from `atom` is no longer supported.
Please require `space-pen` instead:
`{$$} = require 'space-pen'`
Add `"space-pen": "^4"` to your package dependencies.
Please require `atom-space-pen-views` instead:
`{$$} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
$$
Object.defineProperty module.exports, '$$$', get: ->
deprecate """
Requiring `$$$` from `atom` is no longer supported.
Please require `space-pen` instead:
`{$$$} = require 'space-pen'`
Add `"space-pen": "^4"` to your package dependencies.
Please require `atom-space-pen-views` instead:
`{$$$} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
$$$
Object.defineProperty module.exports, 'View', get: ->
deprecate """
Requiring `View` from `atom` is no longer supported.
Please require `space-pen` instead:
`{View} = require 'space-pen'`
Add `"space-pen": "^4"` to your package dependencies.
Please require `atom-space-pen-views` instead:
`{View} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
View
@@ -81,7 +81,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Requiring `EditorView` from `atom` is no longer supported.
Please require `TextEditorView` from `atom-space-pen-view` instead:
`{TextEditorView} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/text-editor-view'
@@ -90,7 +90,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Requiring `TextEditorView` from `atom` is no longer supported.
Please require `TextEditorView` from `atom-space-pen-view` instead:
`{TextEditorView} = require 'atom-space-pen-views'`
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/text-editor-view'
@@ -100,7 +100,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Please require `ScrollView` from `atom-space-pen-view` instead:
`{ScrollView} = require 'atom-space-pen-views'`
Note that the API has changed slightly! Please read the docs at https://github.com/atom/atom-space-pen-views
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/scroll-view'
@@ -110,7 +110,7 @@ unless process.env.ATOM_SHELL_INTERNAL_RUN_AS_NODE
Please require `SelectListView` from `atom-space-pen-view` instead:
`{SelectListView} = require 'atom-space-pen-views'`
Note that the API has changed slightly! Please read the docs at https://github.com/atom/atom-space-pen-views
Add `"atom-space-pen-views": "^0"` to your package dependencies.
Add `"atom-space-pen-views": "^2.0.3"` to your package dependencies.
"""
require '../src/select-list-view'
+84 -82
Ver Arquivo
@@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "0.166.0",
"version": "0.173.0",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/browser/main.js",
"repository": {
@@ -17,23 +17,24 @@
"url": "http://github.com/atom/atom/raw/master/LICENSE.md"
}
],
"atomShellVersion": "0.19.4",
"atomShellVersion": "0.20.5",
"dependencies": {
"async": "0.2.6",
"atom-keymap": "^2.3.3",
"atom-keymap": "^2.5.2",
"bootstrap": "git+https://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"clear-cut": "0.4.0",
"coffee-script": "1.7.0",
"coffeestack": "0.7.0",
"coffee-script": "1.8.0",
"coffeestack": "0.8.0",
"color": "^0.7.3",
"delegato": "^1",
"emissary": "^1.3.1",
"event-kit": "^1.0.0",
"first-mate": "^2.2.2",
"event-kit": "^1.0.1",
"first-mate": "^2.2.4",
"fs-plus": "^2.3.2",
"fstream": "0.1.24",
"fuzzaldrin": "^2.1",
"git-utils": "^2.2",
"grim": "1.0.0",
"grim": "1.1.0",
"guid": "0.0.10",
"jasmine-json": "~0.0",
"jasmine-tagged": "^1.1.2",
@@ -45,107 +46,108 @@
"nslog": "^1.0.1",
"oniguruma": "^3.0.4",
"optimist": "0.4.0",
"pathwatcher": "^2.3.7",
"pathwatcher": "^2.6.0",
"property-accessors": "^1",
"q": "^1.0.1",
"random-words": "0.0.1",
"react-atom-fork": "^0.11.1",
"react-atom-fork": "^0.11.4",
"reactionary-atom-fork": "^1.0.0",
"runas": "1.0.1",
"scandal": "1.0.3",
"scoped-property-store": "^0.16.2",
"scrollbar-style": "^1.0.2",
"season": "^1.0.2",
"season": "^5.0.5",
"semver": "2.2.1",
"serializable": "^1",
"service-hub": "^0.1.0",
"space-pen": "3.8.2",
"stacktrace-parser": "0.1.1",
"temp": "0.7.0",
"text-buffer": "^3.8.4",
"text-buffer": "^3.10.0",
"theorist": "^1.0.2",
"underscore-plus": "^1.6.6",
"vm-compatibility-layer": "0.1.0"
},
"packageDependencies": {
"atom-dark-syntax": "0.23.0",
"atom-dark-ui": "0.42.0",
"atom-light-syntax": "0.22.0",
"atom-light-ui": "0.36.0",
"base16-tomorrow-dark-theme": "0.22.0",
"base16-tomorrow-light-theme": "0.5.0",
"solarized-dark-syntax": "0.30.0",
"solarized-light-syntax": "0.15.0",
"archive-view": "0.43.0",
"autocomplete": "0.38.0",
"autoflow": "0.20.0",
"autosave": "0.19.0",
"background-tips": "0.19.0",
"bookmarks": "0.33.0",
"bracket-matcher": "0.64.0",
"command-palette": "0.32.0",
"deprecation-cop": "0.22.0",
"dev-live-reload": "0.36.0",
"encoding-selector": "0.14.0",
"atom-dark-syntax": "0.26.0",
"atom-dark-ui": "0.46.0",
"atom-light-syntax": "0.26.0",
"atom-light-ui": "0.40.0",
"base16-tomorrow-dark-theme": "0.25.0",
"base16-tomorrow-light-theme": "0.8.0",
"solarized-dark-syntax": "0.32.0",
"solarized-light-syntax": "0.19.0",
"archive-view": "0.44.0",
"autocomplete": "0.43.0",
"autoflow": "0.21.0",
"autosave": "0.20.0",
"background-tips": "0.21.0",
"bookmarks": "0.34.0",
"bracket-matcher": "0.69.0",
"command-palette": "0.34.0",
"deprecation-cop": "0.31.0",
"dev-live-reload": "0.38.0",
"encoding-selector": "0.15.0",
"exception-reporting": "0.21.0",
"find-and-replace": "0.154.0",
"fuzzy-finder": "0.64.0",
"git-diff": "0.47.0",
"go-to-line": "0.29.0",
"grammar-selector": "0.42.0",
"image-view": "0.46.0",
"incompatible-packages": "0.18.0",
"keybinding-resolver": "0.25.0",
"link": "0.28.0",
"markdown-preview": "0.115.0",
"find-and-replace": "0.156.0",
"fuzzy-finder": "0.65.0",
"git-diff": "0.48.0",
"go-to-line": "0.30.0",
"grammar-selector": "0.43.0",
"image-view": "0.47.0",
"incompatible-packages": "0.20.0",
"keybinding-resolver": "0.26.0",
"link": "0.29.0",
"markdown-preview": "0.120.0",
"metrics": "0.40.0",
"notifications": "0.22.0",
"open-on-github": "0.31.0",
"package-generator": "0.36.0",
"release-notes": "0.45.0",
"settings-view": "0.161.0",
"snippets": "0.63.0",
"spell-check": "0.47.0",
"status-bar": "0.56.0",
"styleguide": "0.38.0",
"symbols-view": "0.77.0",
"tabs": "0.59.0",
"timecop": "0.26.0",
"tree-view": "0.145.0",
"notifications": "0.25.0",
"open-on-github": "0.32.0",
"package-generator": "0.37.0",
"release-notes": "0.46.0",
"settings-view": "0.173.0",
"snippets": "0.69.0",
"spell-check": "0.51.0",
"status-bar": "0.57.0",
"styleguide": "0.42.0",
"symbols-view": "0.79.0",
"tabs": "0.64.0",
"timecop": "0.27.0",
"tree-view": "0.148.0",
"update-package-dependencies": "0.7.0",
"welcome": "0.21.0",
"whitespace": "0.27.0",
"wrap-guide": "0.28.0",
"language-c": "0.35.0",
"language-clojure": "0.9.0",
"language-coffee-script": "0.38.1",
"language-css": "0.24.0",
"language-gfm": "0.58.0",
"language-git": "0.9.0",
"language-go": "0.19.1",
"language-html": "0.27.0",
"whitespace": "0.28.0",
"wrap-guide": "0.30.0",
"language-c": "0.37.0",
"language-clojure": "0.10.0",
"language-coffee-script": "0.39.0",
"language-css": "0.26.0",
"language-gfm": "0.62.0",
"language-git": "0.10.0",
"language-go": "0.21.0",
"language-html": "0.28.0",
"language-hyperlink": "0.12.2",
"language-java": "0.13.0",
"language-javascript": "0.52.0",
"language-json": "0.10.0",
"language-less": "0.22.0",
"language-make": "0.12.0",
"language-java": "0.14.0",
"language-javascript": "0.54.0",
"language-json": "0.11.0",
"language-less": "0.24.0",
"language-make": "0.13.0",
"language-mustache": "0.11.0",
"language-objective-c": "0.14.0",
"language-perl": "0.9.0",
"language-php": "0.19.0",
"language-property-list": "0.7.0",
"language-python": "0.27.0",
"language-ruby": "0.46.0",
"language-objective-c": "0.15.0",
"language-perl": "0.10.0",
"language-php": "0.20.0",
"language-property-list": "0.8.0",
"language-python": "0.30.0",
"language-ruby": "0.47.0",
"language-ruby-on-rails": "0.18.0",
"language-sass": "0.29.0",
"language-shellscript": "0.11.0",
"language-source": "0.8.0",
"language-sql": "0.12.0",
"language-sass": "0.31.0",
"language-shellscript": "0.12.0",
"language-source": "0.9.0",
"language-sql": "0.13.0",
"language-text": "0.6.0",
"language-todo": "0.15.0",
"language-toml": "0.14.1",
"language-xml": "0.25.0",
"language-yaml": "0.21.0"
"language-toml": "0.15.0",
"language-xml": "0.27.0",
"language-yaml": "0.22.0"
},
"private": true,
"scripts": {
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 284 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 628 KiB

Arquivo binário não exibido.
Arquivo binário não exibido.
Arquivo binário não exibido.

Antes

Largura:  |  Altura:  |  Tamanho: 141 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 182 KiB

+1 -1
Ver Arquivo
@@ -117,7 +117,7 @@ class AtomReporter extends View
@div class: 'result-message fail deprecation-message', =>
@raw marked(deprecation.message)
for stack in deprecation.stacks
for stack in deprecation.getStacks()
fullStack = stack.map ({functionName, location}) ->
if functionName is '<unknown>'
" at #{location}"
+82 -6
Ver Arquivo
@@ -686,15 +686,14 @@ describe "Config", ->
expect(observeHandler).toHaveBeenCalledWith 'baz'
describe "when the config file contains invalid cson", ->
addErrorHandler = null
beforeEach ->
spyOn(console, 'error')
spyOn(atom.notifications, 'addError')
atom.notifications.onDidAddNotification addErrorHandler = jasmine.createSpy()
fs.writeFileSync(atom.config.configFilePath, "{{{{{")
it "logs an error to the console and does not overwrite the config file on a subsequent save", ->
atom.config.loadUserConfig()
expect(console.error).toHaveBeenCalled()
expect(atom.notifications.addError.callCount).toBe 1
expect(addErrorHandler.callCount).toBe 1
atom.config.set("hair", "blonde") # trigger a save
expect(atom.config.save).not.toHaveBeenCalled()
@@ -876,10 +875,11 @@ describe "Config", ->
expect(atom.config.get('foo.bar')).toBe 'newVal'
describe "when the config file changes to contain invalid cson", ->
addErrorHandler = null
beforeEach ->
spyOn(console, 'error')
atom.notifications.onDidAddNotification addErrorHandler = jasmine.createSpy()
writeConfigFile("}}}")
waitsFor "error to be logged", -> console.error.callCount > 0
waitsFor "error to be logged", -> addErrorHandler.callCount > 0
it "logs a warning and does not update config data", ->
expect(updatedHandler.callCount).toBe 0
@@ -1060,6 +1060,9 @@ describe "Config", ->
type: 'integer'
default: 12
expect(atom.config.getSchema('foo.baz')).toBeUndefined()
expect(atom.config.getSchema('foo.bar.anInt.baz')).toBeUndefined()
it "respects the schema for scoped settings", ->
schema =
type: 'string'
@@ -1287,6 +1290,79 @@ describe "Config", ->
atom.config.set 'foo.bar', ['2', '3', '4']
expect(atom.config.get('foo.bar')).toEqual [2, 3, 4]
describe 'when the value has a "color" type', ->
beforeEach ->
schema =
type: 'color'
default: 'white'
atom.config.setSchema('foo.bar.aColor', schema)
it 'returns a Color object', ->
color = atom.config.get('foo.bar.aColor')
expect(color.toHexString()).toBe '#ffffff'
expect(color.toRGBAString()).toBe 'rgba(255, 255, 255, 1)'
color.red = 0
color.green = 0
color.blue = 0
color.alpha = 0
atom.config.set('foo.bar.aColor', color)
color = atom.config.get('foo.bar.aColor')
expect(color.toHexString()).toBe '#000000'
expect(color.toRGBAString()).toBe 'rgba(0, 0, 0, 0)'
color.red = 300
color.green = -200
color.blue = -1
color.alpha = 'not see through'
atom.config.set('foo.bar.aColor', color)
color = atom.config.get('foo.bar.aColor')
expect(color.toHexString()).toBe '#ff0000'
expect(color.toRGBAString()).toBe 'rgba(255, 0, 0, 1)'
it 'coerces various types to a color object', ->
atom.config.set('foo.bar.aColor', 'red')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 0, blue: 0, alpha: 1}
atom.config.set('foo.bar.aColor', '#020')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 0, green: 34, blue: 0, alpha: 1}
atom.config.set('foo.bar.aColor', '#abcdef')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 171, green: 205, blue: 239, alpha: 1}
atom.config.set('foo.bar.aColor', 'rgb(1,2,3)')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 1, green: 2, blue: 3, alpha: 1}
atom.config.set('foo.bar.aColor', 'rgba(4,5,6,.7)')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 4, green: 5, blue: 6, alpha: .7}
atom.config.set('foo.bar.aColor', 'hsl(120,100%,50%)')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 0, green: 255, blue: 0, alpha: 1}
atom.config.set('foo.bar.aColor', 'hsla(120,100%,50%,0.3)')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 0, green: 255, blue: 0, alpha: .3}
atom.config.set('foo.bar.aColor', {red: 100, green: 255, blue: 2, alpha: .5})
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 100, green: 255, blue: 2, alpha: .5}
atom.config.set('foo.bar.aColor', {red: 255})
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 0, blue: 0, alpha: 1}
atom.config.set('foo.bar.aColor', {red: 1000})
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 0, blue: 0, alpha: 1}
atom.config.set('foo.bar.aColor', {red: 'dark'})
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 0, green: 0, blue: 0, alpha: 1}
it 'reverts back to the default value when undefined is passed to set', ->
atom.config.set('foo.bar.aColor', undefined)
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 255, blue: 255, alpha: 1}
it 'will not set non-colors', ->
atom.config.set('foo.bar.aColor', null)
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 255, blue: 255, alpha: 1}
atom.config.set('foo.bar.aColor', 'nope')
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 255, blue: 255, alpha: 1}
atom.config.set('foo.bar.aColor', 30)
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 255, blue: 255, alpha: 1}
atom.config.set('foo.bar.aColor', false)
expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 255, blue: 255, alpha: 1}
describe 'when the `enum` key is used', ->
beforeEach ->
schema =
+9 -4
Ver Arquivo
@@ -351,11 +351,16 @@ describe "DisplayBuffer", ->
expect(displayBuffer.tokenizedLineForScreenRow(1).text).toMatch /^10/
describe "when there is another display buffer pointing to the same buffer", ->
it "does not create folds in the other display buffer", ->
it "does not consider folds to be nested inside of folds from the other display buffer", ->
otherDisplayBuffer = new DisplayBuffer({buffer, tabLength})
otherDisplayBuffer.createFold(1, 5)
displayBuffer.createFold(2, 4)
expect(otherDisplayBuffer.foldsStartingAtBufferRow(2).length).toBe 0
expect(displayBuffer.tokenizedLineForScreenRow(2).text).toBe '2'
expect(displayBuffer.tokenizedLineForScreenRow(3).text).toBe '5'
describe "when the buffer changes", ->
[fold1, fold2] = []
beforeEach ->
@@ -1058,7 +1063,7 @@ describe "DisplayBuffer", ->
[marker, decoration, decorationProperties] = []
beforeEach ->
marker = displayBuffer.markBufferRange([[2, 13], [3, 15]])
decorationProperties = {type: 'gutter', class: 'one'}
decorationProperties = {type: 'line-number', class: 'one'}
decoration = displayBuffer.decorateMarker(marker, decorationProperties)
it "can add decorations associated with markers and remove them", ->
@@ -1079,11 +1084,11 @@ describe "DisplayBuffer", ->
describe "when a decoration is updated via Decoration::update()", ->
it "emits an 'updated' event containing the new and old params", ->
decoration.onDidChangeProperties updatedSpy = jasmine.createSpy()
decoration.setProperties type: 'gutter', class: 'two'
decoration.setProperties type: 'line-number', class: 'two'
{oldProperties, newProperties} = updatedSpy.mostRecentCall.args[0]
expect(oldProperties).toEqual decorationProperties
expect(newProperties).toEqual type: 'gutter', class: 'two', id: decoration.id
expect(newProperties).toEqual type: 'line-number', class: 'two', id: decoration.id
describe "::getDecorations(properties)", ->
it "returns decorations matching the given optional properties", ->
@@ -0,0 +1,5 @@
class TestItem
getUri: -> "test"
exports.activate = ->
atom.workspace.addOpener -> new TestItem
@@ -0,0 +1,4 @@
{
"name": "package-with-empty-keymap",
"version": "1.0.0"
}
@@ -0,0 +1,4 @@
{
"name": "package-with-empty-menu",
"version": "1.0.0"
}
@@ -0,0 +1 @@
styleSheets: ['2', '1']
@@ -1 +1 @@
stylesheets: ['2', '1']
styleSheets: ['2', '1']
@@ -1,4 +1,4 @@
{
"theme": "ui",
"stylesheets": ["editor.less"]
"styleSheets": ["editor.less"]
}
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
{
"theme": "ui",
"stylesheets": ["first.css", "second.less", "last.css"]
"styleSheets": ["first.css", "second.less", "last.css"]
}
@@ -1,4 +1,4 @@
{
"theme": "syntax",
"stylesheets": ["editor.less"]
"styleSheets": ["editor.less"]
}
+1 -1
Ver Arquivo
@@ -1,4 +1,4 @@
{
"theme": "ui",
"stylesheets": ["editor.less"]
"styleSheets": ["editor.less"]
}
+1
Ver Arquivo
@@ -1,2 +1,3 @@
module.exports = ->
emit("some-event", 1, 2, 3)
'hello'
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+8 -8
Ver Arquivo
@@ -9,14 +9,14 @@ describe "Package", ->
spyOn(atom, 'inDevMode').andReturn(false)
it "does not activate it", ->
packagePath = atom.project.resolve('packages/package-with-incompatible-native-module')
packagePath = atom.project.getDirectories()[0]?.resolve('packages/package-with-incompatible-native-module')
pack = new Package(packagePath)
expect(pack.isCompatible()).toBe false
expect(pack.incompatibleModules[0].name).toBe 'native-module'
expect(pack.incompatibleModules[0].path).toBe path.join(packagePath, 'node_modules', 'native-module')
it "caches the incompatible native modules in local storage", ->
packagePath = atom.project.resolve('packages/package-with-incompatible-native-module')
packagePath = atom.project.getDirectories()[0]?.resolve('packages/package-with-incompatible-native-module')
cacheKey = null
cacheItem = null
@@ -46,14 +46,14 @@ describe "Package", ->
describe "when the theme contains a single style file", ->
it "loads and applies css", ->
expect($("atom-text-editor").css("padding-bottom")).not.toBe "1234px"
themePath = atom.project.resolve('packages/theme-with-index-css')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-index-css')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe "1234px"
it "parses, loads and applies less", ->
expect($("atom-text-editor").css("padding-bottom")).not.toBe "1234px"
themePath = atom.project.resolve('packages/theme-with-index-less')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-index-less')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe "4321px"
@@ -64,7 +64,7 @@ describe "Package", ->
expect($("atom-text-editor").css("padding-right")).not.toBe("102px")
expect($("atom-text-editor").css("padding-bottom")).not.toBe("103px")
themePath = atom.project.resolve('packages/theme-with-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-package-file')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe("101px")
@@ -77,7 +77,7 @@ describe "Package", ->
expect($("atom-text-editor").css("padding-right")).not.toBe "20px"
expect($("atom-text-editor").css("padding-bottom")).not.toBe "30px"
themePath = atom.project.resolve('packages/theme-without-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-without-package-file')
theme = new ThemePackage(themePath)
theme.activate()
expect($("atom-text-editor").css("padding-top")).toBe "10px"
@@ -86,7 +86,7 @@ describe "Package", ->
describe "reloading a theme", ->
beforeEach ->
themePath = atom.project.resolve('packages/theme-with-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-package-file')
theme = new ThemePackage(themePath)
theme.activate()
@@ -97,7 +97,7 @@ describe "Package", ->
describe "events", ->
beforeEach ->
themePath = atom.project.resolve('packages/theme-with-package-file')
themePath = atom.project.getDirectories()[0]?.resolve('packages/theme-with-package-file')
theme = new ThemePackage(themePath)
theme.activate()
+1 -1
Ver Arquivo
@@ -129,7 +129,7 @@ describe "PaneContainer", ->
beforeEach ->
class TestItem
shouldPromptToSave: -> true
getUri: -> 'test'
getURI: -> 'test'
container = new PaneContainer
container.getRoot().splitRight()
+1 -1
Ver Arquivo
@@ -16,7 +16,7 @@ describe "PaneContainerView", ->
@content: -> @div tabindex: -1
initialize: (@name) -> @text(@name)
serialize: -> { deserializer: 'TestView', @name }
getUri: -> path.join(temp.dir, @name)
getURI: -> path.join(temp.dir, @name)
save: -> @saved = true
isEqual: (other) -> @name is other?.name
onDidChangeTitle: -> new Disposable(->)
+12 -12
Ver Arquivo
@@ -9,7 +9,7 @@ describe "Pane", ->
class Item extends Model
@deserialize: ({name, uri}) -> new this(name, uri)
constructor: (@name, @uri) ->
getUri: -> @uri
getURI: -> @uri
getPath: -> @path
serialize: -> {deserializer: 'Item', @name, @uri}
isEqual: (other) -> @name is other?.name
@@ -231,18 +231,18 @@ describe "Pane", ->
expect(pane.getActiveItem()).toBe item1
describe "if the item is modified", ->
itemUri = null
itemURI = null
beforeEach ->
item1.shouldPromptToSave = -> true
item1.save = jasmine.createSpy("save")
item1.saveAs = jasmine.createSpy("saveAs")
item1.getUri = -> itemUri
item1.getURI = -> itemURI
describe "if the [Save] option is selected", ->
describe "when the item has a uri", ->
it "saves the item before destroying it", ->
itemUri = "test"
itemURI = "test"
spyOn(atom, 'confirm').andReturn(0)
pane.destroyItem(item1)
@@ -252,7 +252,7 @@ describe "Pane", ->
describe "when the item has no uri", ->
it "presents a save-as dialog, then saves the item with the given uri before removing and destroying it", ->
itemUri = null
itemURI = null
spyOn(atom, 'showSaveDialogSync').andReturn("/selected/path")
spyOn(atom, 'confirm').andReturn(0)
@@ -404,15 +404,15 @@ describe "Pane", ->
pane.saveActiveItemAs()
expect(atom.showSaveDialogSync).not.toHaveBeenCalled()
describe "::itemForUri(uri)", ->
it "returns the item for which a call to .getUri() returns the given uri", ->
describe "::itemForURI(uri)", ->
it "returns the item for which a call to .getURI() returns the given uri", ->
pane = new Pane(items: [new Item("A"), new Item("B"), new Item("C"), new Item("D")])
[item1, item2, item3] = pane.getItems()
item1.uri = "a"
item2.uri = "b"
expect(pane.itemForUri("a")).toBe item1
expect(pane.itemForUri("b")).toBe item2
expect(pane.itemForUri("bogus")).toBeUndefined()
expect(pane.itemForURI("a")).toBe item1
expect(pane.itemForURI("b")).toBe item2
expect(pane.itemForURI("bogus")).toBeUndefined()
describe "::moveItem(item, index)", ->
[pane, item1, item2, item3, item4] = []
@@ -589,7 +589,7 @@ describe "Pane", ->
[item1, item2] = pane.getItems()
item1.shouldPromptToSave = -> true
item1.getUri = -> "/test/path"
item1.getURI = -> "/test/path"
item1.save = jasmine.createSpy("save")
spyOn(atom, 'confirm').andReturn(0)
@@ -604,7 +604,7 @@ describe "Pane", ->
[item1, item2] = pane.getItems()
item1.shouldPromptToSave = -> true
item1.getUri = -> "/test/path"
item1.getURI = -> "/test/path"
item1.save = jasmine.createSpy("save")
spyOn(atom, 'confirm').andReturn(1)
+1 -1
Ver Arquivo
@@ -15,7 +15,7 @@ describe "PaneView", ->
initialize: ({@id, @text}) ->
@emitter = new Emitter
serialize: -> { deserializer: 'TestView', @id, @text }
getUri: -> @id
getURI: -> @id
isEqual: (other) -> other? and @id == other.id and @text == other.text
changeTitle: ->
@emitter.emit 'did-change-title', 'title'
+25 -23
Ver Arquivo
@@ -8,7 +8,7 @@ BufferedProcess = require '../src/buffered-process'
describe "Project", ->
beforeEach ->
atom.project.setPaths([atom.project.resolve('dir')])
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')])
describe "serialization", ->
deserializedProject = null
@@ -51,6 +51,29 @@ describe "Project", ->
editor.saveAs(tempFile)
expect(atom.project.getPaths()[0]).toBe path.dirname(tempFile)
describe "when a watch error is thrown from the TextBuffer", ->
editor = null
beforeEach ->
waitsForPromise ->
atom.project.open(require.resolve('./fixtures/dir/a')).then (o) -> editor = o
it "creates a warning notification", ->
atom.notifications.onDidAddNotification noteSpy = jasmine.createSpy()
error = new Error('SomeError')
error.eventType = 'resurrect'
editor.buffer.emitter.emit 'will-throw-watch-error',
handle: jasmine.createSpy()
error: error
expect(noteSpy).toHaveBeenCalled()
notification = noteSpy.mostRecentCall.args[0]
expect(notification.getType()).toBe 'warning'
expect(notification.getDetail()).toBe 'SomeError'
expect(notification.getMessage()).toContain '`resurrect`'
expect(notification.getMessage()).toContain 'fixtures/dir/a'
describe ".open(path)", ->
[absolutePath, newBufferHandler] = []
@@ -109,7 +132,7 @@ describe "Project", ->
expect(newBufferHandler).toHaveBeenCalledWith(editor.buffer)
it "returns number of read bytes as progress indicator", ->
filePath = atom.project.resolve 'a'
filePath = atom.project.getDirectories()[0]?.resolve 'a'
totalBytes = 0
promise = atom.project.open(filePath)
promise.progress (bytesRead) -> totalBytes = bytesRead
@@ -148,27 +171,6 @@ describe "Project", ->
atom.project.bufferForPath("b").then (anotherBuffer) ->
expect(anotherBuffer).not.toBe buffer
describe ".resolve(uri)", ->
describe "when passed an absolute or relative path", ->
it "returns an absolute path based on the atom.project's root", ->
absolutePath = require.resolve('./fixtures/dir/a')
expect(atom.project.resolve('a')).toBe absolutePath
expect(atom.project.resolve(absolutePath + '/../a')).toBe absolutePath
expect(atom.project.resolve('a/../a')).toBe absolutePath
expect(atom.project.resolve()).toBeUndefined()
describe "when passed a uri with a scheme", ->
it "does not modify uris that begin with a scheme", ->
expect(atom.project.resolve('http://zombo.com')).toBe 'http://zombo.com'
describe "when the project has no path", ->
it "returns undefined for relative URIs", ->
atom.project.setPaths([])
expect(atom.project.resolve('test.txt')).toBeUndefined()
expect(atom.project.resolve('http://github.com')).toBe 'http://github.com'
absolutePath = fs.absolute(__dirname)
expect(atom.project.resolve(absolutePath)).toBe absolutePath
describe ".setPaths(path)", ->
describe "when path is a file", ->
it "sets its path to the files parent directory and updates the root directory", ->
+3 -2
Ver Arquivo
@@ -119,6 +119,7 @@ beforeEach ->
"package-with-broken-package-json", "package-with-broken-keymap"]
config.set "editor.useShadowDOM", true
advanceClock(1000)
window.setTimeout.reset()
config.load.reset()
config.save.reset()
@@ -207,10 +208,10 @@ jasmine.attachToDOM = (element) ->
deprecationsSnapshot = null
jasmine.snapshotDeprecations = ->
deprecationsSnapshot = Grim.getDeprecations() # suppress deprecations!!
deprecationsSnapshot = _.clone(Grim.deprecations)
jasmine.restoreDeprecationsSnapshot = ->
Grim.grimDeprecations = deprecationsSnapshot
Grim.deprecations = deprecationsSnapshot
addCustomMatchers = (spec) ->
spec.addMatchers
+10
Ver Arquivo
@@ -25,6 +25,16 @@ describe "Windows squirrel updates", ->
else
originalSpawn('ls')
it "ignores errors spawning Squirrel", ->
jasmine.unspy(ChildProcess, 'spawn')
spyOn(ChildProcess, 'spawn').andCallFake -> throw new Error("EBUSY")
app = quit: jasmine.createSpy('quit')
expect(SquirrelUpdate.handleStartupEvent(app, '--squirrel-install')).toBe true
waitsFor ->
app.quit.callCount is 1
it "quits the app on all squirrel events", ->
app = quit: jasmine.createSpy('quit')
+9 -7
Ver Arquivo
@@ -53,14 +53,16 @@ describe "StyleManager", ->
expect(addEvents[0].getAttribute('source-path')).toBe '/foo/bar'
expect(addEvents[0].textContent).toBe "a {color: yellow;}"
describe "when a group parameter is specified", ->
it "inserts the stylesheet at the end of any existing stylesheets for the same group", ->
manager.addStyleSheet("a {color: red}", group: 'a')
manager.addStyleSheet("a {color: blue}", group: 'b')
manager.addStyleSheet("a {color: green}", group: 'a')
describe "when a priority parameter is specified", ->
it "inserts the style sheet based on the priority", ->
manager.addStyleSheet("a {color: red}", priority: 1)
manager.addStyleSheet("a {color: blue}", priority: 0)
manager.addStyleSheet("a {color: green}", priority: 2)
manager.addStyleSheet("a {color: yellow}", priority: 1)
expect(manager.getStyleElements().map (elt) -> elt.textContent).toEqual [
"a {color: red}"
"a {color: green}"
"a {color: blue}"
"a {color: red}"
"a {color: yellow}"
"a {color: green}"
]
+9 -7
Ver Arquivo
@@ -32,16 +32,18 @@ describe "StylesElement", ->
expect(element.children[initialChildCount].textContent).toBe "a {color: blue;}"
expect(removedStyleElements).toEqual [addedStyleElements[0]]
it "orders style elements by group", ->
it "orders style elements by priority", ->
initialChildCount = element.children.length
atom.styles.addStyleSheet("a {color: red}", group: 'a')
atom.styles.addStyleSheet("a {color: blue}", group: 'b')
atom.styles.addStyleSheet("a {color: green}", group: 'a')
atom.styles.addStyleSheet("a {color: red}", priority: 1)
atom.styles.addStyleSheet("a {color: blue}", priority: 0)
atom.styles.addStyleSheet("a {color: green}", priority: 2)
atom.styles.addStyleSheet("a {color: yellow}", priority: 1)
expect(element.children[initialChildCount].textContent).toBe "a {color: red}"
expect(element.children[initialChildCount + 1].textContent).toBe "a {color: green}"
expect(element.children[initialChildCount + 2].textContent).toBe "a {color: blue}"
expect(element.children[initialChildCount].textContent).toBe "a {color: blue}"
expect(element.children[initialChildCount + 1].textContent).toBe "a {color: red}"
expect(element.children[initialChildCount + 2].textContent).toBe "a {color: yellow}"
expect(element.children[initialChildCount + 3].textContent).toBe "a {color: green}"
it "updates existing style nodes when style elements are updated", ->
initialChildCount = element.children.length
+23
Ver Arquivo
@@ -20,3 +20,26 @@ describe "Task", ->
expect(handlerResult).toBe 'hello'
expect(childProcess.kill).toHaveBeenCalled()
expect(processErrored).toBe false
it "calls listeners registered with ::on when events are emitted in the task", ->
task = new Task(require.resolve('./fixtures/task-spec-handler'))
eventSpy = jasmine.createSpy('eventSpy')
task.on("some-event", eventSpy)
waitsFor (done) -> task.start(done)
runs ->
expect(eventSpy).toHaveBeenCalledWith(1, 2, 3)
it "unregisters listeners when the Disposable returned by ::on is disposed", ->
task = new Task(require.resolve('./fixtures/task-spec-handler'))
eventSpy = jasmine.createSpy('eventSpy')
disposable = task.on("some-event", eventSpy)
disposable.dispose()
waitsFor (done) -> task.start(done)
runs ->
expect(eventSpy).not.toHaveBeenCalled()
+53 -37
Ver Arquivo
@@ -429,7 +429,7 @@ describe "TextEditorComponent", ->
it "excludes the null byte from character measurement", ->
editor.setText("a\0b")
nextAnimationFrame()
expect(editor.pixelPositionForScreenPosition([0, Infinity]).left).toEqual 2 * charWidth
expect(wrapperNode.pixelPositionForScreenPosition([0, Infinity]).left).toEqual 2 * charWidth
describe "when there is a fold", ->
it "renders a fold marker on the folded line", ->
@@ -552,14 +552,29 @@ describe "TextEditorComponent", ->
nextAnimationFrame()
expect(lineNumbersNode.style.backgroundColor).toBe 'rgb(255, 0, 0)'
describe "when the editor.showLineNumbers config is false", ->
it "doesn't render any line numbers", ->
expect(component.refs.gutter).toBeDefined()
atom.config.set("editor.showLineNumbers", false)
expect(component.refs.gutter).not.toBeDefined()
atom.config.set("editor.showLineNumbers", true)
expect(component.refs.gutter).toBeDefined()
expect(component.lineNumberNodeForScreenRow(3)).toBeDefined()
it "hides or shows the gutter based on the '::isGutterVisible' property on the model and the global 'editor.showLineNumbers' config setting", ->
expect(component.refs.gutter?).toBe true
editor.setGutterVisible(false)
nextAnimationFrame()
expect(component.refs.gutter?).toBe false
atom.config.set("editor.showLineNumbers", false)
expect(nextAnimationFrame).toBe noAnimationFrame
expect(component.refs.gutter?).toBe false
editor.setGutterVisible(true)
expect(nextAnimationFrame).toBe noAnimationFrame
expect(component.refs.gutter?).toBe false
atom.config.set("editor.showLineNumbers", true)
nextAnimationFrame()
expect(component.refs.gutter?).toBe true
expect(component.lineNumberNodeForScreenRow(3)?).toBe true
describe "fold decorations", ->
describe "rendering fold decorations", ->
@@ -801,7 +816,7 @@ describe "TextEditorComponent", ->
nextAnimationFrame()
cursorNode = componentNode.querySelector('.cursor')
{left} = editor.pixelPositionForScreenPosition([1, 10])
{left} = wrapperNode.pixelPositionForScreenPosition([1, 10])
expect(cursorNode.style['-webkit-transform']).toBe "translate(#{left}px, #{editor.getLineHeightInPixels()}px)"
describe "selection rendering", ->
@@ -895,7 +910,7 @@ describe "TextEditorComponent", ->
nextAnimationFrame()
selectionNode = componentNode.querySelector('.region')
expect(selectionNode.offsetTop).toBe editor.getLineHeightInPixels()
expect(selectionNode.offsetLeft).toBe editor.pixelPositionForScreenPosition([1, 6]).left
expect(selectionNode.offsetLeft).toBe wrapperNode.pixelPositionForScreenPosition([1, 6]).left
it "will flash the selection when flash:true is passed to editor::setSelectedBufferRange", ->
editor.setSelectedBufferRange([[1, 6], [1, 10]], flash: true)
@@ -916,7 +931,7 @@ describe "TextEditorComponent", ->
beforeEach ->
marker = editor.displayBuffer.markBufferRange([[2, 13], [3, 15]], invalidate: 'inside')
decorationParams = {type: ['gutter', 'line'], class: 'a'}
decorationParams = {type: ['line-number', 'line'], class: 'a'}
decoration = editor.decorateMarker(marker, decorationParams)
nextAnimationFrame()
@@ -931,7 +946,7 @@ describe "TextEditorComponent", ->
# Add decorations that are out of range
marker2 = editor.displayBuffer.markBufferRange([[9, 0], [9, 0]])
editor.decorateMarker(marker2, type: ['gutter', 'line'], class: 'b')
editor.decorateMarker(marker2, type: ['line-number', 'line'], class: 'b')
nextAnimationFrame()
# Scroll decorations into view
@@ -955,7 +970,7 @@ describe "TextEditorComponent", ->
marker.destroy()
marker = editor.markBufferRange([[0, 0], [0, 2]])
editor.decorateMarker(marker, type: ['gutter', 'line'], class: 'b')
editor.decorateMarker(marker, type: ['line-number', 'line'], class: 'b')
nextAnimationFrame()
expect(lineNumberHasClass(0, 'b')).toBe true
expect(lineNumberHasClass(1, 'b')).toBe false
@@ -1024,7 +1039,7 @@ describe "TextEditorComponent", ->
describe "when the decoration's 'onlyHead' property is true", ->
it "only applies the decoration's class to lines containing the marker's head", ->
editor.decorateMarker(marker, type: ['gutter', 'line'], class: 'only-head', onlyHead: true)
editor.decorateMarker(marker, type: ['line-number', 'line'], class: 'only-head', onlyHead: true)
nextAnimationFrame()
expect(lineAndLineNumberHaveClass(1, 'only-head')).toBe false
expect(lineAndLineNumberHaveClass(2, 'only-head')).toBe false
@@ -1033,7 +1048,7 @@ describe "TextEditorComponent", ->
describe "when the decoration's 'onlyEmpty' property is true", ->
it "only applies the decoration when its marker is empty", ->
editor.decorateMarker(marker, type: ['gutter', 'line'], class: 'only-empty', onlyEmpty: true)
editor.decorateMarker(marker, type: ['line-number', 'line'], class: 'only-empty', onlyEmpty: true)
nextAnimationFrame()
expect(lineAndLineNumberHaveClass(2, 'only-empty')).toBe false
expect(lineAndLineNumberHaveClass(3, 'only-empty')).toBe false
@@ -1045,7 +1060,7 @@ describe "TextEditorComponent", ->
describe "when the decoration's 'onlyNonEmpty' property is true", ->
it "only applies the decoration when its marker is non-empty", ->
editor.decorateMarker(marker, type: ['gutter', 'line'], class: 'only-non-empty', onlyNonEmpty: true)
editor.decorateMarker(marker, type: ['line-number', 'line'], class: 'only-non-empty', onlyNonEmpty: true)
nextAnimationFrame()
expect(lineAndLineNumberHaveClass(2, 'only-non-empty')).toBe true
expect(lineAndLineNumberHaveClass(3, 'only-non-empty')).toBe true
@@ -1230,7 +1245,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 5])
position = wrapperNode.pixelPositionForBufferPosition([2, 5])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1240,7 +1255,7 @@ describe "TextEditorComponent", ->
editor.moveRight()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 7])
position = wrapperNode.pixelPositionForBufferPosition([2, 7])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1251,7 +1266,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 10])
position = wrapperNode.pixelPositionForBufferPosition([2, 10])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1262,7 +1277,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 5])
position = wrapperNode.pixelPositionForBufferPosition([2, 5])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1273,7 +1288,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', position: 'tail', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 5])
position = wrapperNode.pixelPositionForBufferPosition([2, 5])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1303,7 +1318,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 26])
position = wrapperNode.pixelPositionForBufferPosition([0, 26])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1312,7 +1327,7 @@ describe "TextEditorComponent", ->
editor.insertText('a')
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 27])
position = wrapperNode.pixelPositionForBufferPosition([0, 27])
expect(overlay.style.left).toBe position.left - itemWidth + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1322,7 +1337,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([4, 0])
position = wrapperNode.pixelPositionForBufferPosition([4, 0])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1331,7 +1346,7 @@ describe "TextEditorComponent", ->
editor.insertNewline()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([5, 0])
position = wrapperNode.pixelPositionForBufferPosition([5, 0])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top - itemHeight + 'px'
@@ -1353,7 +1368,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 2])
position = wrapperNode.pixelPositionForBufferPosition([0, 2])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1362,7 +1377,7 @@ describe "TextEditorComponent", ->
editor.insertText('a')
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 3])
position = wrapperNode.pixelPositionForBufferPosition([0, 3])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1372,7 +1387,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([1, 0])
position = wrapperNode.pixelPositionForBufferPosition([1, 0])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1381,7 +1396,7 @@ describe "TextEditorComponent", ->
editor.insertNewline()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([2, 0])
position = wrapperNode.pixelPositionForBufferPosition([2, 0])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1394,7 +1409,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 28])
position = wrapperNode.pixelPositionForBufferPosition([0, 28])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1403,7 +1418,7 @@ describe "TextEditorComponent", ->
editor.insertText('a')
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([0, 29])
position = wrapperNode.pixelPositionForBufferPosition([0, 29])
expect(overlay.style.left).toBe position.left - itemWidth + 'px'
expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'
@@ -1414,7 +1429,7 @@ describe "TextEditorComponent", ->
decoration = editor.decorateMarker(marker, {type: 'overlay', item})
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([6, 0])
position = wrapperNode.pixelPositionForBufferPosition([6, 0])
overlay = component.getTopmostDOMNode().querySelector('atom-overlay')
expect(overlay.style.left).toBe position.left + 'px'
@@ -1423,7 +1438,7 @@ describe "TextEditorComponent", ->
editor.insertNewline()
nextAnimationFrame()
position = editor.pixelPositionForBufferPosition([7, 0])
position = wrapperNode.pixelPositionForBufferPosition([7, 0])
expect(overlay.style.left).toBe position.left + 'px'
expect(overlay.style.top).toBe position.top - itemHeight + 'px'
@@ -2502,7 +2517,8 @@ describe "TextEditorComponent", ->
describe "when the 'mini' property is true", ->
beforeEach ->
component.setProps(mini: true)
editor.setMini(true)
nextAnimationFrame()
it "does not render the gutter", ->
expect(componentNode.querySelector('.gutter')).toBeNull()
@@ -2751,14 +2767,14 @@ describe "TextEditorComponent", ->
event
clientCoordinatesForScreenPosition = (screenPosition) ->
positionOffset = editor.pixelPositionForScreenPosition(screenPosition)
positionOffset = wrapperNode.pixelPositionForScreenPosition(screenPosition)
scrollViewClientRect = componentNode.querySelector('.scroll-view').getBoundingClientRect()
clientX = scrollViewClientRect.left + positionOffset.left - editor.getScrollLeft()
clientY = scrollViewClientRect.top + positionOffset.top - editor.getScrollTop()
{clientX, clientY}
clientCoordinatesForScreenRowInGutter = (screenRow) ->
positionOffset = editor.pixelPositionForScreenPosition([screenRow, 1])
positionOffset = wrapperNode.pixelPositionForScreenPosition([screenRow, 1])
gutterClientRect = componentNode.querySelector('.gutter').getBoundingClientRect()
clientX = gutterClientRect.left + positionOffset.left - editor.getScrollLeft()
clientY = gutterClientRect.top + positionOffset.top - editor.getScrollTop()
+28 -4
Ver Arquivo
@@ -10,16 +10,21 @@ describe "TextEditorElement", ->
jasmineContent = document.body.querySelector('#jasmine-content')
describe "instantiation", ->
it "honors the mini attribute", ->
it "honors the 'mini' attribute", ->
jasmineContent.innerHTML = "<atom-text-editor mini>"
element = jasmineContent.firstChild
expect(element.getModel().isMini()).toBe true
it "honors the placeholder-text attribute", ->
it "honors the 'placeholder-text' attribute", ->
jasmineContent.innerHTML = "<atom-text-editor placeholder-text='testing'>"
element = jasmineContent.firstChild
expect(element.getModel().getPlaceholderText()).toBe 'testing'
it "honors the 'gutter-hidden' attribute", ->
jasmineContent.innerHTML = "<atom-text-editor gutter-hidden>"
element = jasmineContent.firstChild
expect(element.getModel().isGutterVisible()).toBe false
it "honors the text content", ->
jasmineContent.innerHTML = "<atom-text-editor>testing</atom-text-editor>"
element = jasmineContent.firstChild
@@ -42,9 +47,12 @@ describe "TextEditorElement", ->
component = element.component
expect(component.isMounted()).toBe true
element.getModel().destroy()
element.remove()
expect(component.isMounted()).toBe false
jasmine.attachToDOM(element)
expect(element.component.isMounted()).toBe true
describe "when the editor.useShadowDOM config option is false", ->
it "mounts the react component and unmounts when removed from the dom", ->
atom.config.set('editor.useShadowDOM', false)
@@ -95,6 +103,22 @@ describe "TextEditorElement", ->
document.body.focus()
expect(blurCalled).toBe true
describe "when focused while a parent node is being attached to the DOM", ->
class ElementThatFocusesChild extends HTMLDivElement
attachedCallback: ->
@firstChild.focus()
document.registerElement("element-that-focuses-child",
prototype: ElementThatFocusesChild.prototype
)
it "proxies the focus event to the hidden input", ->
element = new TextEditorElement
parentElement = document.createElement("element-that-focuses-child")
parentElement.appendChild(element)
jasmineContent.appendChild(parentElement)
expect(element.shadowRoot.activeElement).toBe element.shadowRoot.querySelector('input')
describe "when the themes finish loading", ->
[themeReloadCallback, initialThemeLoadComplete, element] = []
@@ -104,7 +128,7 @@ describe "TextEditorElement", ->
spyOn(atom.themes, 'isInitialLoadComplete').andCallFake ->
initialThemeLoadComplete
spyOn(atom.themes, 'onDidReloadAll').andCallFake (fn) ->
spyOn(atom.themes, 'onDidChangeActiveThemes').andCallFake (fn) ->
themeReloadCallback = fn
atom.config.set("editor.useShadowDOM", false)
+9
Ver Arquivo
@@ -944,6 +944,15 @@ describe "TextEditor", ->
editor.undo()
expect(editor.getScrollTop()).toBe 0
describe '.logCursorScope()', ->
beforeEach ->
spyOn(atom.notifications, 'addInfo')
it 'opens a notification', ->
editor.logCursorScope()
expect(atom.notifications.addInfo).toHaveBeenCalled()
describe "selection", ->
selection = null
+116 -81
Ver Arquivo
@@ -73,64 +73,64 @@ describe "ThemeManager", ->
describe "when the core.themes config value changes", ->
it "add/removes stylesheets to reflect the new config value", ->
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
spyOn(atom.styles, 'getUserStyleSheetPath').andCallFake -> null
waitsForPromise ->
themeManager.activateThemes()
runs ->
reloadHandler.reset()
didChangeActiveThemesHandler.reset()
atom.config.set('core.themes', [])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
didChangeActiveThemesHandler.reset()
expect($('style.theme')).toHaveLength 0
atom.config.set('core.themes', ['atom-dark-ui'])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
expect($('style[group=theme]')).toHaveLength 2
expect($('style[group=theme]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
didChangeActiveThemesHandler.reset()
expect($('style[priority=1]')).toHaveLength 2
expect($('style[priority=1]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
atom.config.set('core.themes', ['atom-light-ui', 'atom-dark-ui'])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
expect($('style[group=theme]')).toHaveLength 2
expect($('style[group=theme]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
expect($('style[group=theme]:eq(1)').attr('source-path')).toMatch /atom-light-ui/
didChangeActiveThemesHandler.reset()
expect($('style[priority=1]')).toHaveLength 2
expect($('style[priority=1]:eq(0)').attr('source-path')).toMatch /atom-dark-ui/
expect($('style[priority=1]:eq(1)').attr('source-path')).toMatch /atom-light-ui/
atom.config.set('core.themes', [])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
reloadHandler.reset()
expect($('style[group=theme]')).toHaveLength 2
didChangeActiveThemesHandler.reset()
expect($('style[priority=1]')).toHaveLength 2
# atom-dark-ui has an directory path, the syntax one doesn't
atom.config.set('core.themes', ['theme-with-index-less', 'atom-dark-ui'])
waitsFor ->
reloadHandler.callCount == 1
didChangeActiveThemesHandler.callCount == 1
runs ->
expect($('style[group=theme]')).toHaveLength 2
expect($('style[priority=1]')).toHaveLength 2
importPaths = themeManager.getImportPaths()
expect(importPaths.length).toBe 1
expect(importPaths[0]).toContain 'atom-dark-ui'
it 'adds theme-* classes to the workspace for each active theme', ->
workspaceElement = atom.views.getView(atom.workspace)
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
waitsForPromise ->
themeManager.activateThemes()
@@ -138,11 +138,11 @@ describe "ThemeManager", ->
runs ->
expect(workspaceElement).toHaveClass 'theme-atom-dark-ui'
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
atom.config.set('core.themes', ['theme-with-ui-variables', 'theme-with-syntax-variables'])
waitsFor ->
reloadHandler.callCount > 0
didChangeActiveThemesHandler.callCount > 0
runs ->
# `theme-` twice as it prefixes the name with `theme-`
@@ -170,7 +170,7 @@ describe "ThemeManager", ->
themeManager.onDidChangeStylesheets stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
themeManager.onDidAddStylesheet stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
cssPath = atom.project.resolve('css.css')
cssPath = atom.project.getDirectories()[0]?.resolve('css.css')
lengthBefore = $('head style').length
themeManager.requireStylesheet(cssPath)
@@ -194,7 +194,7 @@ describe "ThemeManager", ->
$('head style[id*="css.css"]').remove()
it "synchronously loads and parses less files at the given path and installs a style tag for it in the head", ->
lessPath = atom.project.resolve('sample.less')
lessPath = atom.project.getDirectories()[0]?.resolve('sample.less')
lengthBefore = $('head style').length
themeManager.requireStylesheet(lessPath)
expect($('head style').length).toBe lengthBefore + 1
@@ -218,9 +218,9 @@ describe "ThemeManager", ->
it "supports requiring css and less stylesheets without an explicit extension", ->
themeManager.requireStylesheet path.join(__dirname, 'fixtures', 'css')
expect($('head style[source-path*="css.css"]').attr('source-path')).toBe themeManager.stringToId(atom.project.resolve('css.css'))
expect($('head style[source-path*="css.css"]').attr('source-path')).toBe themeManager.stringToId(atom.project.getDirectories()[0]?.resolve('css.css'))
themeManager.requireStylesheet path.join(__dirname, 'fixtures', 'sample')
expect($('head style[source-path*="sample.less"]').attr('source-path')).toBe themeManager.stringToId(atom.project.resolve('sample.less'))
expect($('head style[source-path*="sample.less"]').attr('source-path')).toBe themeManager.stringToId(atom.project.getDirectories()[0]?.resolve('sample.less'))
$('head style[id*="css.css"]').remove()
$('head style[id*="sample.less"]').remove()
@@ -259,11 +259,11 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it "loads the correct values from the theme's ui-variables file", ->
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
atom.config.set('core.themes', ['theme-with-ui-variables', 'theme-with-syntax-variables'])
waitsFor ->
reloadHandler.callCount > 0
didChangeActiveThemesHandler.callCount > 0
runs ->
# an override loaded in the base css
@@ -276,11 +276,11 @@ describe "ThemeManager", ->
describe "when there is a theme with incomplete variables", ->
it "loads the correct values from the fallback ui-variables", ->
themeManager.onDidReloadAll reloadHandler = jasmine.createSpy()
themeManager.onDidChangeActiveThemes didChangeActiveThemesHandler = jasmine.createSpy()
atom.config.set('core.themes', ['theme-with-incomplete-ui-variables', 'theme-with-syntax-variables'])
waitsFor ->
reloadHandler.callCount > 0
didChangeActiveThemesHandler.callCount > 0
runs ->
# an override loaded in the base css
@@ -289,69 +289,104 @@ describe "ThemeManager", ->
# from within the theme itself
expect($("atom-text-editor").css("background-color")).toBe "rgb(0, 152, 255)"
describe "when the user stylesheet changes", ->
describe "user stylesheet", ->
userStylesheetPath = null
beforeEach ->
jasmine.snapshotDeprecations()
afterEach ->
jasmine.restoreDeprecationsSnapshot()
it "reloads it", ->
[styleElementAddedHandler, styleElementRemovedHandler] = []
[stylesheetRemovedHandler, stylesheetAddedHandler, stylesheetsChangedHandler] = []
userStylesheetPath = path.join(temp.mkdirSync("atom"), 'styles.less')
fs.writeFileSync(userStylesheetPath, 'body {border-style: dotted !important;}')
spyOn(atom.styles, 'getUserStyleSheetPath').andReturn userStylesheetPath
waitsForPromise ->
themeManager.activateThemes()
describe "when the user stylesheet changes", ->
beforeEach ->
jasmine.snapshotDeprecations()
runs ->
atom.styles.onDidRemoveStyleElement styleElementRemovedHandler = jasmine.createSpy("styleElementRemovedHandler")
atom.styles.onDidAddStyleElement styleElementAddedHandler = jasmine.createSpy("styleElementAddedHandler")
afterEach ->
jasmine.restoreDeprecationsSnapshot()
themeManager.onDidChangeStylesheets stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
themeManager.onDidRemoveStylesheet stylesheetRemovedHandler = jasmine.createSpy("stylesheetRemovedHandler")
themeManager.onDidAddStylesheet stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
spyOn(themeManager, 'loadUserStylesheet').andCallThrough()
it "reloads it", ->
[styleElementAddedHandler, styleElementRemovedHandler] = []
[stylesheetRemovedHandler, stylesheetAddedHandler, stylesheetsChangedHandler] = []
expect($(document.body).css('border-style')).toBe 'dotted'
fs.writeFileSync(userStylesheetPath, 'body {border-style: dashed}')
waitsForPromise ->
themeManager.activateThemes()
waitsFor ->
themeManager.loadUserStylesheet.callCount is 1
runs ->
atom.styles.onDidRemoveStyleElement styleElementRemovedHandler = jasmine.createSpy("styleElementRemovedHandler")
atom.styles.onDidAddStyleElement styleElementAddedHandler = jasmine.createSpy("styleElementAddedHandler")
runs ->
expect($(document.body).css('border-style')).toBe 'dashed'
themeManager.onDidChangeStylesheets stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
themeManager.onDidRemoveStylesheet stylesheetRemovedHandler = jasmine.createSpy("stylesheetRemovedHandler")
themeManager.onDidAddStylesheet stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")
spyOn(themeManager, 'loadUserStylesheet').andCallThrough()
expect(styleElementRemovedHandler).toHaveBeenCalled()
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dotted'
expect(stylesheetRemovedHandler).toHaveBeenCalled()
expect(stylesheetRemovedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dotted'
expect($(document.body).css('border-style')).toBe 'dotted'
fs.writeFileSync(userStylesheetPath, 'body {border-style: dashed}')
expect(styleElementAddedHandler).toHaveBeenCalled()
expect(styleElementAddedHandler.argsForCall[0][0].textContent).toContain 'dashed'
expect(stylesheetAddedHandler).toHaveBeenCalled()
expect(stylesheetAddedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dashed'
waitsFor ->
themeManager.loadUserStylesheet.callCount is 1
expect(stylesheetsChangedHandler).toHaveBeenCalled()
runs ->
expect($(document.body).css('border-style')).toBe 'dashed'
styleElementRemovedHandler.reset()
stylesheetRemovedHandler.reset()
stylesheetsChangedHandler.reset()
fs.removeSync(userStylesheetPath)
expect(styleElementRemovedHandler).toHaveBeenCalled()
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dotted'
expect(stylesheetRemovedHandler).toHaveBeenCalled()
expect(stylesheetRemovedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dotted'
waitsFor ->
themeManager.loadUserStylesheet.callCount is 2
expect(styleElementAddedHandler).toHaveBeenCalled()
expect(styleElementAddedHandler.argsForCall[0][0].textContent).toContain 'dashed'
expect(stylesheetAddedHandler).toHaveBeenCalled()
expect(stylesheetAddedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dashed'
runs ->
expect(styleElementRemovedHandler).toHaveBeenCalled()
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dashed'
expect(stylesheetRemovedHandler).toHaveBeenCalled()
expect(stylesheetRemovedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dashed'
expect($(document.body).css('border-style')).toBe 'none'
expect(stylesheetsChangedHandler).toHaveBeenCalled()
expect(stylesheetsChangedHandler).toHaveBeenCalled()
styleElementRemovedHandler.reset()
stylesheetRemovedHandler.reset()
stylesheetsChangedHandler.reset()
fs.removeSync(userStylesheetPath)
waitsFor ->
themeManager.loadUserStylesheet.callCount is 2
runs ->
expect(styleElementRemovedHandler).toHaveBeenCalled()
expect(styleElementRemovedHandler.argsForCall[0][0].textContent).toContain 'dashed'
expect(stylesheetRemovedHandler).toHaveBeenCalled()
expect(stylesheetRemovedHandler.argsForCall[0][0].cssRules[0].style.border).toBe 'dashed'
expect($(document.body).css('border-style')).toBe 'none'
expect(stylesheetsChangedHandler).toHaveBeenCalled()
describe "when there is an error reading the stylesheet", ->
addErrorHandler = null
beforeEach ->
themeManager.loadUserStylesheet()
spyOn(themeManager.lessCache, 'cssForFile').andCallFake ->
throw new Error('EACCES permission denied "styles.less"')
atom.notifications.onDidAddNotification addErrorHandler = jasmine.createSpy()
it "creates an error notification", ->
themeManager.loadUserStylesheet()
expect(addErrorHandler).toHaveBeenCalled()
note = addErrorHandler.mostRecentCall.args[0]
expect(note.getType()).toBe 'error'
expect(note.getMessage()).toContain 'Error loading'
describe "when there is an error watching the user stylesheet", ->
addErrorHandler = null
beforeEach ->
{File} = require 'pathwatcher'
spyOn(File::, 'on').andCallFake (event) ->
if event.indexOf('contents-changed') > -1
throw new Error('Unable to watch path')
spyOn(themeManager, 'loadStylesheet').andReturn ''
atom.notifications.onDidAddNotification addErrorHandler = jasmine.createSpy()
it "creates an error notification", ->
themeManager.loadUserStylesheet()
expect(addErrorHandler).toHaveBeenCalled()
note = addErrorHandler.mostRecentCall.args[0]
expect(note.getType()).toBe 'error'
expect(note.getMessage()).toContain 'Unable to watch path'
describe "when a non-existent theme is present in the config", ->
beforeEach ->
@@ -362,7 +397,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark UI and syntax themes and logs a warning', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(console.warn.callCount).toBe 2
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-dark-ui')
@@ -380,7 +415,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the enabled themes', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-light-ui')
expect(activeThemeNames).toContain('atom-dark-syntax')
@@ -393,7 +428,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark UI and syntax themes', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-dark-ui')
expect(activeThemeNames).toContain('atom-dark-syntax')
@@ -406,7 +441,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark UI theme', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-dark-ui')
expect(activeThemeNames).toContain('atom-light-syntax')
@@ -419,7 +454,7 @@ describe "ThemeManager", ->
themeManager.activateThemes()
it 'uses the default dark syntax theme', ->
activeThemeNames = themeManager.getActiveNames()
activeThemeNames = themeManager.getActiveThemeNames()
expect(activeThemeNames.length).toBe(2)
expect(activeThemeNames).toContain('atom-light-ui')
expect(activeThemeNames).toContain('atom-dark-syntax')
+8
Ver Arquivo
@@ -169,6 +169,14 @@ describe "Window", ->
$("<a href='#scroll-me'>link</a>").appendTo(document.body).click().remove()
expect(shell.openExternal).not.toHaveBeenCalled()
describe "when a form is submitted", ->
it "prevents the default so that the window's URL isn't changed", ->
submitSpy = jasmine.createSpy('submit')
$(document).on('submit', 'form', submitSpy)
$("<form>foo</form>").appendTo(document.body).submit().remove()
expect(submitSpy.callCount).toBe 1
expect(submitSpy.argsForCall[0][0].isDefaultPrevented()).toBe true
describe "core:focus-next and core:focus-previous", ->
describe "when there is no currently focused element", ->
it "focuses the element with the lowest/highest tabindex", ->
+132 -19
Ver Arquivo
@@ -1,17 +1,19 @@
path = require 'path'
temp = require 'temp'
Workspace = require '../src/workspace'
Pane = require '../src/pane'
{View} = require '../src/space-pen-extensions'
platform = require './spec-helper-platform'
_ = require 'underscore-plus'
fstream = require 'fstream'
fs = require 'fs-plus'
Grim = require 'grim'
describe "Workspace", ->
workspace = null
beforeEach ->
atom.project.setPaths([atom.project.resolve('dir')])
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')])
atom.workspace = workspace = new Workspace
describe "::open(uri, options)", ->
@@ -70,19 +72,19 @@ describe "Workspace", ->
expect(openEvents).toEqual [
{
uri: atom.project.resolve('a')
uri: atom.project.getDirectories()[0]?.resolve('a')
item: editor1
pane: atom.workspace.getActivePane()
index: 0
}
{
uri: atom.project.resolve('b')
uri: atom.project.getDirectories()[0]?.resolve('b')
item: editor2
pane: atom.workspace.getActivePane()
index: 1
}
{
uri: atom.project.resolve('a')
uri: atom.project.getDirectories()[0]?.resolve('a')
item: editor1
pane: atom.workspace.getActivePane()
index: 0
@@ -96,7 +98,7 @@ describe "Workspace", ->
workspace.open('a').then (o) -> editor = o
runs ->
expect(editor.getUri()).toBe atom.project.resolve('a')
expect(editor.getURI()).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(workspace.getActivePaneItem()).toBe editor
expect(workspace.getActivePane().items).toEqual [editor]
expect(workspace.getActivePane().activate).toHaveBeenCalled()
@@ -230,7 +232,7 @@ describe "Workspace", ->
workspace.addOpener(barOpener)
waitsForPromise ->
pathToOpen = atom.project.resolve('a.foo')
pathToOpen = atom.project.getDirectories()[0]?.resolve('a.foo')
workspace.open(pathToOpen, hey: "there").then (item) ->
expect(item).toEqual { foo: pathToOpen, options: {hey: "there"} }
@@ -250,6 +252,78 @@ describe "Workspace", ->
runs ->
expect(newEditorHandler.argsForCall[0][0].textEditor).toBe editor
it "records a deprecation warning on the appropriate package if the item has a ::getUri method instead of ::getURI", ->
jasmine.snapshotDeprecations()
waitsForPromise -> atom.packages.activatePackage('package-with-deprecated-pane-item-method')
waitsForPromise ->
atom.workspace.open("test")
runs ->
deprecations = Grim.getDeprecations()
expect(deprecations.length).toBe 1
expect(deprecations[0].message).toBe "Pane item with class `TestItem` should implement `::getURI` instead of `::getUri`."
expect(deprecations[0].getStacks()[0].metadata.packageName).toBe "package-with-deprecated-pane-item-method"
jasmine.restoreDeprecationsSnapshot()
describe "when there is an error opening the file", ->
notificationSpy = null
beforeEach ->
atom.notifications.onDidAddNotification notificationSpy = jasmine.createSpy()
describe "when a large file is opened", ->
beforeEach ->
spyOn(fs, 'getSizeSync').andReturn 2 * 1048577 # 2MB
it "creates a notification", ->
waitsForPromise ->
workspace.open('file1')
runs ->
expect(notificationSpy).toHaveBeenCalled()
notification = notificationSpy.mostRecentCall.args[0]
expect(notification.getType()).toBe 'warning'
expect(notification.getMessage()).toContain '< 2MB'
describe "when a file does not exist", ->
it "creates an empty buffer for the specified path", ->
waitsForPromise ->
workspace.open('not-a-file.md')
runs ->
editor = workspace.getActiveTextEditor()
expect(notificationSpy).not.toHaveBeenCalled()
expect(editor.getPath()).toContain 'not-a-file.md'
describe "when the user does not have access to the file", ->
beforeEach ->
spyOn(fs, 'openSync').andCallFake (path) ->
error = new Error("EACCES, permission denied '#{path}'")
error.path = path
error.code = 'EACCES'
throw error
it "creates a notification", ->
waitsForPromise ->
workspace.open('file1')
runs ->
expect(notificationSpy).toHaveBeenCalled()
notification = notificationSpy.mostRecentCall.args[0]
expect(notification.getType()).toBe 'warning'
expect(notification.getMessage()).toContain 'Permission denied'
expect(notification.getMessage()).toContain 'file1'
describe "when there is an unhandled error", ->
beforeEach ->
spyOn(fs, 'openSync').andCallFake (path) ->
throw new Error("I dont even know what is happening right now!!")
it "creates a notification", ->
open = -> workspace.open('file1', workspace.getActivePane())
expect(open).toThrow()
describe "::reopenItem()", ->
it "opens the uri associated with the last closed pane that isn't currently open", ->
pane = workspace.getActivePane()
@@ -261,21 +335,21 @@ describe "Workspace", ->
runs ->
# does not reopen items with no uri
expect(workspace.getActivePaneItem().getUri()).toBeUndefined()
expect(workspace.getActivePaneItem().getURI()).toBeUndefined()
pane.destroyActiveItem()
waitsForPromise ->
workspace.reopenItem()
runs ->
expect(workspace.getActivePaneItem().getUri()).not.toBeUndefined()
expect(workspace.getActivePaneItem().getURI()).not.toBeUndefined()
# destroy all items
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('file1')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('file1')
pane.destroyActiveItem()
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('b')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('b')
pane.destroyActiveItem()
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('a')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('a')
pane.destroyActiveItem()
# reopens items with uris
@@ -285,20 +359,20 @@ describe "Workspace", ->
workspace.reopenItem()
runs ->
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('a')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('a')
# does not reopen items that are already open
waitsForPromise ->
workspace.open('b')
runs ->
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('b')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('b')
waitsForPromise ->
workspace.reopenItem()
runs ->
expect(workspace.getActivePaneItem().getUri()).toBe atom.project.resolve('file1')
expect(workspace.getActivePaneItem().getURI()).toBe atom.project.getDirectories()[0]?.resolve('file1')
describe "::increase/decreaseFontSize()", ->
it "increases/decreases the font size without going below 1", ->
@@ -568,7 +642,7 @@ describe "Workspace", ->
runs ->
expect(results).toHaveLength(3)
expect(results[0].filePath).toBe atom.project.resolve('a')
expect(results[0].filePath).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(results[0].matches).toHaveLength(3)
expect(results[0].matches[0]).toEqual
matchText: 'aaa'
@@ -585,7 +659,7 @@ describe "Workspace", ->
expect(results.length).toBe 1
{filePath, matches} = results[0]
expect(filePath).toBe atom.project.resolve('a')
expect(filePath).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(matches).toHaveLength 1
expect(matches[0]).toEqual
matchText: '$bill'
@@ -746,10 +820,10 @@ describe "Workspace", ->
[filePath, commentFilePath, sampleContent, sampleCommentContent] = []
beforeEach ->
atom.project.setPaths([atom.project.resolve('../')])
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('../')])
filePath = atom.project.resolve('sample.js')
commentFilePath = atom.project.resolve('sample-with-comments.js')
filePath = atom.project.getDirectories()[0]?.resolve('sample.js')
commentFilePath = atom.project.getDirectories()[0]?.resolve('sample-with-comments.js')
sampleContent = fs.readFileSync(filePath).toString()
sampleCommentContent = fs.readFileSync(commentFilePath).toString()
@@ -841,3 +915,42 @@ describe "Workspace", ->
expect(results[0].replacements).toBe 6
expect(editor.isModified()).toBeTruthy()
describe "::saveActivePaneItem()", ->
describe "when there is an error", ->
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("'/some/file' is a directory")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the directory cannot be written to", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("ENOTDIR, not a directory '/Some/dir/and-a-file.js'")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the user does not have permission", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
error = new Error("EACCES, permission denied '/Some/dir/and-a-file.js'")
error.code = 'EACCES'
error.path = '/Some/dir/and-a-file.js'
throw error
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("no one knows")
save = -> atom.workspace.saveActivePaneItem()
expect(save).toThrow()
+6 -43
Ver Arquivo
@@ -3,7 +3,6 @@ Q = require 'q'
path = require 'path'
temp = require 'temp'
TextEditorView = require '../src/text-editor-view'
Pane = require '../src/pane'
PaneView = require '../src/pane-view'
Workspace = require '../src/workspace'
@@ -13,8 +12,8 @@ describe "WorkspaceView", ->
beforeEach ->
jasmine.snapshotDeprecations()
atom.project.setPaths([atom.project.resolve('dir')])
pathToOpen = atom.project.resolve('a')
atom.project.setPaths([atom.project.getDirectories()[0]?.resolve('dir')])
pathToOpen = atom.project.getDirectories()[0]?.resolve('a')
atom.workspace = new Workspace
atom.workspaceView = atom.views.getView(atom.workspace).__spacePenView
atom.workspaceView.enableKeymap()
@@ -93,11 +92,11 @@ describe "WorkspaceView", ->
editorView2 = atom.workspaceView.panes.find('atom-pane-axis.horizontal > atom-pane-axis.vertical > atom-pane atom-text-editor:eq(0)').view()
editorView4 = atom.workspaceView.panes.find('atom-pane-axis.horizontal > atom-pane-axis.vertical > atom-pane atom-text-editor:eq(1)').view()
expect(editorView1.getEditor().getPath()).toBe atom.project.resolve('a')
expect(editorView2.getEditor().getPath()).toBe atom.project.resolve('b')
expect(editorView3.getEditor().getPath()).toBe atom.project.resolve('../sample.js')
expect(editorView1.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('a')
expect(editorView2.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('b')
expect(editorView3.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('../sample.js')
expect(editorView3.getEditor().getCursorScreenPosition()).toEqual [2, 4]
expect(editorView4.getEditor().getPath()).toBe atom.project.resolve('../sample.txt')
expect(editorView4.getEditor().getPath()).toBe atom.project.getDirectories()[0]?.resolve('../sample.txt')
expect(editorView4.getEditor().getCursorScreenPosition()).toEqual [0, 2]
# ensure adjust pane dimensions is called
@@ -295,39 +294,3 @@ describe "WorkspaceView", ->
modalContainer = workspaceElement.querySelector('atom-panel-container.modal')
expect(modalContainer.parentNode).toBe workspaceElement
describe "::saveActivePaneItem()", ->
describe "when there is an error", ->
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("'/some/file' is a directory")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the directory cannot be written to", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("ENOTDIR, not a directory '/Some/dir/and-a-file.js'")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the user does not have permission", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("EACCES, permission denied '/Some/dir/and-a-file.js'")
atom.notifications.onDidAddNotification addedSpy = jasmine.createSpy()
atom.workspace.saveActivePaneItem()
expect(addedSpy).toHaveBeenCalled()
expect(addedSpy.mostRecentCall.args[0].getType()).toBe 'warning'
it "emits a warning notification when the file cannot be saved", ->
spyOn(Pane::, 'saveActiveItem').andCallFake ->
throw new Error("no one knows")
save = -> atom.workspace.saveActivePaneItem()
expect(save).toThrow()
+5 -3
Ver Arquivo
@@ -280,7 +280,7 @@ class Atom extends Model
deprecate "The atom.syntax global is deprecated. Use atom.grammars instead."
@grammars
@subscribe @packages.onDidActivateAll => @watchThemes()
@subscribe @packages.onDidActivateInitialPackages => @watchThemes()
Project = require './project'
TextBuffer = require 'text-buffer'
@@ -721,7 +721,7 @@ class Atom extends Model
@themes.load()
watchThemes: ->
@themes.onDidReloadAll =>
@themes.onDidChangeActiveThemes =>
# Only reload stylesheets from non-theme packages
for pack in @packages.getActivePackages() when pack.getType() isnt 'theme'
pack.reloadStylesheets?()
@@ -776,7 +776,9 @@ class Atom extends Model
try
require(userInitScriptPath) if fs.isFileSync(userInitScriptPath)
catch error
console.error "Failed to load `#{userInitScriptPath}`", error.stack, error
atom.notifications.addError "Failed to load `#{userInitScriptPath}`",
detail: error.message
dismissable: true
# Require the module with the given globals.
#
+16 -4
Ver Arquivo
@@ -1,6 +1,7 @@
autoUpdater = null
_ = require 'underscore-plus'
{EventEmitter} = require 'events'
path = require 'path'
IdleState = 'idle'
CheckingState = 'checking'
@@ -51,8 +52,7 @@ class AutoUpdateManager
@emitUpdateAvailableEvent(@getWindows()...)
# Only released versions should check for updates.
unless /\w{7}/.test(@version)
@check(hidePopups: true)
@check(hidePopups: true) unless /\w{7}/.test(@version)
switch process.platform
when 'win32'
@@ -86,12 +86,24 @@ class AutoUpdateManager
onUpdateNotAvailable: =>
autoUpdater.removeListener 'error', @onUpdateError
dialog = require 'dialog'
dialog.showMessageBox type: 'info', buttons: ['OK'], message: 'No update available.', detail: "Version #{@version} is the latest version."
dialog.showMessageBox
type: 'info'
buttons: ['OK']
icon: path.resolve(__dirname, '..', '..', 'resources', 'atom.png')
message: 'No update available.'
title: 'No Update Available'
detail: "Version #{@version} is the latest version."
onUpdateError: (event, message) =>
autoUpdater.removeListener 'update-not-available', @onUpdateNotAvailable
dialog = require 'dialog'
dialog.showMessageBox type: 'warning', buttons: ['OK'], message: 'There was an error checking for updates.', detail: message
dialog.showMessageBox
type: 'warning'
buttons: ['OK']
icon: path.resolve(__dirname, '..', '..', 'resources', 'atom.png')
message: 'There was an error checking for updates.'
title: 'Update Error'
detail: message
getWindows: ->
global.atomApplication.windows
+8 -2
Ver Arquivo
@@ -25,9 +25,15 @@ environmentKeyPath = 'HKCU\\Environment'
# Spawn a command and invoke the callback when it completes with an error
# and the output from standard out.
spawn = (command, args, callback) ->
spawnedProcess = ChildProcess.spawn(command, args)
stdout = ''
try
spawnedProcess = ChildProcess.spawn(command, args)
catch error
# Spawn can throw an error
process.nextTick -> callback?(error, stdout)
return
spawnedProcess.stdout.on 'data', (data) -> stdout += data
error = null
+7
Ver Arquivo
@@ -6,6 +6,11 @@ CSON = require 'season'
fs = require 'fs-plus'
cacheDir = path.join(fs.absolute('~/.atom'), 'compile-cache')
# Use separate compile cache when sudo'ing as root to avoid permission issues
if process.env.USER is 'root' and process.env.SUDO_USER and process.env.SUDO_USER isnt process.env.USER
cacheDir = path.join(cacheDir, 'root')
coffeeCacheDir = path.join(cacheDir, 'coffee')
CSON.setCacheDir(path.join(cacheDir, 'cson'))
@@ -40,11 +45,13 @@ requireCoffeeScript = (module, filePath) ->
module.exports =
cacheDir: cacheDir
register: ->
Object.defineProperty(require.extensions, '.coffee', {
writable: false
value: requireCoffeeScript
})
addPathToCache: (filePath) ->
extension = path.extname(filePath)
if extension is '.coffee'
+89
Ver Arquivo
@@ -0,0 +1,89 @@
_ = require 'underscore-plus'
ParsedColor = null
# Essential: A simple color class returned from {Config::get} when the value
# at the key path is of type 'color'.
module.exports =
class Color
# Essential: Parse a {String} or {Object} into a {Color}.
#
# * `value` A {String} such as `'white'`, `#ff00ff`, or
# `'rgba(255, 15, 60, .75)'` or an {Object} with `red`, `green`, `blue`,
# and `alpha` properties.
#
# Returns a {Color} or `null` if it cannot be parsed.
@parse: (value) ->
return null if _.isArray(value) or _.isFunction(value)
return null unless _.isObject(value) or _.isString(value)
ParsedColor ?= require 'color'
try
parsedColor = new ParsedColor(value)
catch error
return null
new Color(parsedColor.red(), parsedColor.green(), parsedColor.blue(), parsedColor.alpha())
constructor: (red, green, blue, alpha) ->
Object.defineProperties this,
red:
set: (newRed) -> red = parseColor(newRed)
get: -> red
enumerable: true
configurable: false
green:
set: (newGreen) -> green = parseColor(newGreen)
get: -> green
enumerable: true
configurable: false
blue:
set: (newBlue) -> blue = parseColor(newBlue)
get: -> blue
enumerable: true
configurable: false
alpha:
set: (newAlpha) -> alpha = parseAlpha(newAlpha)
get: -> alpha
enumerable: true
configurable: false
@red = red
@green = green
@blue = blue
@alpha = alpha
# Essential: Returns a {String} in the form `'#abcdef'`.
toHexString: ->
"##{numberToHexString(@red)}#{numberToHexString(@green)}#{numberToHexString(@blue)}"
# Essential: Returns a {String} in the form `'rgba(25, 50, 75, .9)'`.
toRGBAString: ->
"rgba(#{@red}, #{@green}, #{@blue}, #{@alpha})"
isEqual: (color) ->
return true if this is color
color = Color.parse(color) unless color instanceof Color
return false unless color?
color.red is @red and color.blue is @blue and color.green is @green and color.alpha is @alpha
clone: -> new Color(@red, @green, @blue, @alpha)
parseColor = (color) ->
color = parseInt(color)
color = 0 if isNaN(color)
color = Math.max(color, 0)
color = Math.min(color, 255)
color
parseAlpha = (alpha) ->
alpha = parseFloat(alpha)
alpha = 1 if isNaN(alpha)
alpha = Math.max(alpha, 0)
alpha = Math.min(alpha, 1)
alpha
numberToHexString = (number) ->
hex = number.toString(16)
hex = "0#{hex}" if number < 10
hex
+51 -12
Ver Arquivo
@@ -8,6 +8,7 @@ async = require 'async'
pathWatcher = require 'pathwatcher'
Grim = require 'grim'
Color = require './color'
ScopedPropertyStore = require 'scoped-property-store'
ScopeDescriptor = require './scope-descriptor'
@@ -216,6 +217,21 @@ ScopeDescriptor = require './scope-descriptor'
# maximum: 11.5
# ```
#
# #### color
#
# Values will be coerced into a {Color} with `red`, `green`, `blue`, and `alpha`
# properties that all have numeric values. `red`, `green`, `blue` will be in
# the range 0 to 255 and `value` will be in the range 0 to 1. Values can be any
# valid CSS color format such as `#abc`, `#abcdef`, `white`,
# `rgb(50, 100, 150)`, and `rgba(25, 75, 125, .75)`.
#
# ```coffee
# config:
# someSetting:
# type: 'color'
# default: 'white'
# ```
#
# ### Other Supported Keys
#
# #### enum
@@ -687,7 +703,7 @@ class Config
schema = @schema
for key in keys
break unless schema?
schema = schema.properties[key]
schema = schema.properties?[key]
schema
# Deprecated: Returns a new {Object} containing all of the global settings and
@@ -816,25 +832,35 @@ class Config
@configFileHasErrors = false
catch error
@configFileHasErrors = true
@notifyFailure('Failed to load config.cson', error)
message = "Failed to load `#{path.basename(@configFilePath)}`"
detail = if error.location?
# stack is the output from CSON in this case
error.stack
else
# message will be EACCES permission denied, et al
error.message
@notifyFailure(message, detail)
observeUserConfig: ->
try
@watchSubscription ?= pathWatcher.watch @configFilePath, (eventType) =>
@debouncedLoad() if eventType is 'change' and @watchSubscription?
catch error
@notifyFailure('Failed to watch user config', error)
@notifyFailure """
Unable to watch path: `#{path.basename(@configFilePath)}`. Make sure you have permissions to
`#{@configFilePath}`. On linux there are currently problems with watch
sizes. See [this document][watches] for more info.
[watches]:https://github.com/atom/atom/blob/master/docs/build-instructions/linux.md#typeerror-unable-to-watch-path
"""
unobserveUserConfig: ->
@watchSubscription?.close()
@watchSubscription = null
notifyFailure: (errorMessage, error) ->
message = "#{errorMessage}"
detail = error.stack
atom.notifications.addError(message, {detail, dismissable: true})
console.error message
console.error detail
notifyFailure: (errorMessage, detail) ->
atom.notifications.addError(errorMessage, {detail, dismissable: true})
save: ->
allSettings = {'*': @settings}
@@ -872,10 +898,16 @@ class Config
defaultValue = _.valueForKeyPath(@defaultSettings, keyPath)
if value?
value = _.deepClone(value)
_.defaults(value, defaultValue) if isPlainObject(value) and isPlainObject(defaultValue)
if value instanceof Color
value = value.clone()
else
value = _.deepClone(value)
_.defaults(value, defaultValue) if isPlainObject(value) and isPlainObject(defaultValue)
else
value = _.deepClone(defaultValue)
if defaultValue instanceof Color
value = defaultValue.clone()
else
value = _.deepClone(defaultValue)
value
@@ -1103,6 +1135,13 @@ Config.addSchemaEnforcers
else
value
'color':
coerce: (keyPath, value, schema) ->
color = Color.parse(value)
unless color?
throw new Error("Validation failed at #{keyPath}, #{JSON.stringify(value)} cannot be coerced into a color")
color
'*':
coerceMinimumAndMaximum: (keyPath, value, schema) ->
return value unless typeof value is 'number'
+37 -7
Ver Arquivo
@@ -16,6 +16,31 @@ SpecificityCache = {}
#
# An instance of this class is always available as the `atom.contextMenu`
# global.
#
# ## Context Menu CSON Format
#
# ```coffee
# 'atom-workspace': [{label: 'Help', command: 'application:open-documentation'}]
# 'atom-text-editor': [{
# label: 'History',
# submenu: [
# {label: 'Undo', command:'core:undo'}
# {label: 'Redo', command:'core:redo'}
# ]
# }]
# ```
#
# In your package's menu `.cson` file you need to specify it under a
# `context-menu` key:
#
# ```coffee
# 'context-menu':
# 'atom-workspace': [{label: 'Help', command: 'application:open-documentation'}]
# ...
# ```
#
# The format for use in {::add} is the same minus the `context-menu` key. See
# {::add} for more information.
module.exports =
class ContextMenuManager
constructor: ({@resourcePath, @devMode}) ->
@@ -46,8 +71,8 @@ class ContextMenuManager
# 'atom-text-editor': [{
# label: 'History',
# submenu: [
# {label: 'Undo': command:'core:undo'}
# {label: 'Redo': command:'core:redo'}
# {label: 'Undo', command:'core:undo'}
# {label: 'Redo', command:'core:redo'}
# ]
# }]
# }
@@ -77,14 +102,22 @@ class ContextMenuManager
add: (itemsBySelector) ->
# Detect deprecated file path as first argument
if itemsBySelector? and typeof itemsBySelector isnt 'object'
Grim.deprecate("ContextMenuManager::add has changed to take a single object as its argument. Please consult the documentation.")
Grim.deprecate """
ContextMenuManager::add has changed to take a single object as its
argument. Please see
https://atom.io/docs/api/latest/ContextMenuManager for more info.
"""
itemsBySelector = arguments[1]
devMode = arguments[2]?.devMode
# Detect deprecated format for items object
for key, value of itemsBySelector
unless _.isArray(value)
Grim.deprecate("The format for declaring context menu items has changed. Please consult the documentation.")
Grim.deprecate """
ContextMenuManager::add has changed to take a single object as its
argument. Please see
https://atom.io/docs/api/latest/ContextMenuManager for more info.
"""
itemsBySelector = @convertLegacyItemsBySelector(itemsBySelector, devMode)
addedItemSets = []
@@ -147,9 +180,6 @@ class ContextMenuManager
items
# Public: Request a context menu to be displayed.
#
# * `event` A DOM event.
showForEvent: (event) ->
@activeElement = event.target
menuTemplate = @templateForEvent(event)
+3 -4
Ver Arquivo
@@ -594,10 +594,6 @@ class Cursor extends Model
Section: Visibility
###
# Public: If the marker range is empty, the cursor is marked as being visible.
updateVisibility: ->
@setVisible(@marker.getBufferRange().isEmpty())
# Public: Sets whether the cursor is visible.
setVisible: (visible) ->
if @visible != visible
@@ -609,6 +605,9 @@ class Cursor extends Model
# Public: Returns the visibility of the cursor.
isVisible: -> @visible
updateVisibility: ->
@setVisible(@marker.getBufferRange().isEmpty())
###
Section: Comparing to another cursor
###
+5 -5
Ver Arquivo
@@ -34,8 +34,8 @@ class Decoration
# Private: Check if the `decorationProperties.type` matches `type`
#
# * `decorationProperties` {Object} eg. `{type: 'gutter', class: 'my-new-class'}`
# * `type` {String} type like `'gutter'`, `'line'`, etc. `type` can also
# * `decorationProperties` {Object} eg. `{type: 'line-number', class: 'my-new-class'}`
# * `type` {String} type like `'line-number'`, `'line'`, etc. `type` can also
# be an {Array} of {String}s, where it will return true if the decoration's
# type matches any in the array.
#
@@ -107,7 +107,7 @@ class Decoration
# Public: Check if this decoration is of type `type`
#
# * `type` {String} type like `'gutter'`, `'line'`, etc. `type` can also
# * `type` {String} type like `'line-number'`, `'line'`, etc. `type` can also
# be an {Array} of {String}s, where it will return true if the decoration's
# type matches any in the array.
#
@@ -131,10 +131,10 @@ class Decoration
# ## Examples
#
# ```coffee
# decoration.update({type: 'gutter', class: 'my-new-class'})
# decoration.update({type: 'line-number', class: 'my-new-class'})
# ```
#
# * `newProperties` {Object} eg. `{type: 'gutter', class: 'my-new-class'}`
# * `newProperties` {Object} eg. `{type: 'line-number', class: 'my-new-class'}`
setProperties: (newProperties) ->
return if @destroyed
oldProperties = @properties
+2 -2
Ver Arquivo
@@ -898,7 +898,7 @@ class DisplayBuffer extends Model
@getDecorations(propertyFilter).filter (decoration) -> decoration.isType('line')
getGutterDecorations: (propertyFilter) ->
@getDecorations(propertyFilter).filter (decoration) -> decoration.isType('gutter')
@getDecorations(propertyFilter).filter (decoration) -> decoration.isType('line-number')
getHighlightDecorations: (propertyFilter) ->
@getDecorations(propertyFilter).filter (decoration) -> decoration.isType('highlight')
@@ -1222,7 +1222,7 @@ class DisplayBuffer extends Model
@emitter.emit 'did-create-marker', marker
createFoldForMarker: (marker) ->
@decorateMarker(marker, type: 'gutter', class: 'folded')
@decorateMarker(marker, type: 'line-number', class: 'folded')
new Fold(this, marker)
foldForMarker: (marker) ->
+3 -4
Ver Arquivo
@@ -19,10 +19,9 @@ class Fold
# Returns whether this fold is contained within another fold
isInsideLargerFold: ->
if largestContainingFoldMarker = @displayBuffer.findMarker(class: 'fold', containsBufferRange: @getBufferRange())
not largestContainingFoldMarker.getBufferRange().isEqual(@getBufferRange())
else
false
largestContainingFoldMarker = @displayBuffer.findFoldMarker(containsRange: @getBufferRange())
largestContainingFoldMarker and
not largestContainingFoldMarker.getRange().isEqual(@getBufferRange())
# Destroys this fold
destroy: ->
+5 -2
Ver Arquivo
@@ -33,7 +33,7 @@ Task = require './task'
#
# ```coffee
# git = atom.project.getRepo()
# console.log git.getOriginUrl()
# console.log git.getOriginURL()
# ```
#
# ### Requiring in packages
@@ -232,7 +232,10 @@ class GitRepository
#
# * `path` (optional) {String} path in the repository to get this information
# for, only needed if the repository has submodules.
getOriginUrl: (path) -> @getConfigValue('remote.origin.url', path)
getOriginURL: (path) -> @getConfigValue('remote.origin.url', path)
getOriginUrl: (path) ->
deprecate 'Use ::getOriginURL instead.'
@getOriginURL(path)
# Public: Returns the upstream branch for the current HEAD, or null if there
# is no upstream branch for the current HEAD.
+3 -3
Ver Arquivo
@@ -163,7 +163,7 @@ GutterComponent = React.createClass
classes = ''
if lineDecorations? and decorations = lineDecorations[screenRow]
for id, decoration of decorations
if Decoration.isType(decoration, 'gutter')
if Decoration.isType(decoration, 'line-number')
classes += decoration.class + ' '
classes += "foldable " if bufferRow >= 0 and editor.isFoldableAtBufferRow(bufferRow)
@@ -195,12 +195,12 @@ GutterComponent = React.createClass
if previousDecorations?
for id, decoration of previousDecorations
if Decoration.isType(decoration, 'gutter') and not @hasDecoration(decorations, decoration)
if Decoration.isType(decoration, 'line-number') and not @hasDecoration(decorations, decoration)
node.classList.remove(decoration.class)
if decorations?
for id, decoration of decorations
if Decoration.isType(decoration, 'gutter') and not @hasDecoration(previousDecorations, decoration)
if Decoration.isType(decoration, 'line-number') and not @hasDecoration(previousDecorations, decoration)
node.classList.add(decoration.class)
unless @screenRowsByLineNumberId[lineNumberId] is screenRow
+28 -3
Ver Arquivo
@@ -20,12 +20,37 @@ KeymapManager::getUserKeymapPath = ->
KeymapManager::loadUserKeymap = ->
userKeymapPath = @getUserKeymapPath()
if fs.isFileSync(userKeymapPath)
return unless fs.isFileSync(userKeymapPath)
try
@loadKeymap(userKeymapPath, watch: true, suppressErrors: true)
catch error
if error.message.indexOf('Unable to watch path') > -1
message = """
Unable to watch path: `#{path.basename(userKeymapPath)}`. Make sure you
have permission to read `#{userKeymapPath}`.
On linux there are currently problems with watch sizes. See
[this document][watches] for more info.
[watches]:https://github.com/atom/atom/blob/master/docs/build-instructions/linux.md#typeerror-unable-to-watch-path
"""
atom.notifications.addError(message, {dismissable: true})
else
detail = error.path
stack = error.stack
atom.notifications.addFatalError(error.message, {detail, stack, dismissable: true})
KeymapManager::subscribeToFileReadFailure = ->
this.onDidFailToReadFile (error) ->
atom.notifications.addError('Failed to load keymap.cson', {detail: error.stack, dismissable: true})
@onDidFailToReadFile (error) =>
userKeymapPath = @getUserKeymapPath()
message = "Failed to load `#{userKeymapPath}`"
detail = if error.location?
error.stack
else
error.message
atom.notifications.addError(message, {detail: detail, dismissable: true})
# This enables command handlers registered via jQuery to call
# `.abortKeyBinding()` on the `jQuery.Event` object passed to the handler.
+1 -1
Ver Arquivo
@@ -8,7 +8,7 @@ module.exports =
class LessCompileCache
Subscriber.includeInto(this)
@cacheDir: path.join(atom.getConfigDirPath(), 'compile-cache', 'less')
@cacheDir: path.join(require('./coffee-cache').cacheDir, 'less')
constructor: ({resourcePath, importPaths}) ->
@lessSearchPaths = [
+5 -5
Ver Arquivo
@@ -23,12 +23,12 @@ LinesComponent = React.createClass
if performedInitialMeasurement
{editor, overlayDecorations, highlightDecorations, scrollHeight, scrollWidth, placeholderText, backgroundColor} = @props
{lineHeightInPixels, defaultCharWidth, scrollViewHeight, scopedCharacterWidthsChangeCount} = @props
{scrollTop, scrollLeft, cursorPixelRects, mini} = @props
{scrollTop, scrollLeft, cursorPixelRects} = @props
style =
height: Math.max(scrollHeight, scrollViewHeight)
width: scrollWidth
WebkitTransform: @getTransform()
backgroundColor: if mini then null else backgroundColor
backgroundColor: if editor.isMini() then null else backgroundColor
div {className: 'lines', style},
div className: 'placeholder-text', placeholderText if placeholderText?
@@ -162,7 +162,7 @@ LinesComponent = React.createClass
@lineNodesByLineId.hasOwnProperty(lineId)
buildLineHTML: (line, screenRow) ->
{mini, showIndentGuide, lineHeightInPixels, lineDecorations, lineWidth} = @props
{showIndentGuide, lineHeightInPixels, lineDecorations, lineWidth} = @props
{tokens, text, lineEnding, fold, isSoftWrapped, indentLevel} = line
classes = ''
@@ -208,7 +208,7 @@ LinesComponent = React.createClass
@buildEndOfLineHTML(line) or '&nbsp;'
buildLineInnerHTML: (line) ->
{mini, showIndentGuide} = @props
{editor, showIndentGuide} = @props
{tokens, text} = line
innerHTML = ""
@@ -217,7 +217,7 @@ LinesComponent = React.createClass
lineIsWhitespaceOnly = firstTrailingWhitespacePosition is 0
for token in tokens
innerHTML += @updateScopeStack(scopeStack, token.scopes)
hasIndentGuide = not mini and showIndentGuide and (token.hasLeadingWhitespace() or (token.hasTrailingWhitespace() and lineIsWhitespaceOnly))
hasIndentGuide = not editor.isMini() and showIndentGuide and (token.hasLeadingWhitespace() or (token.hasTrailingWhitespace() and lineIsWhitespaceOnly))
innerHTML += token.getValueAsHtml({hasIndentGuide})
innerHTML += @popScope(scopeStack) while scopeStack.length > 0
+4 -4
Ver Arquivo
@@ -268,7 +268,7 @@ class Marker
# Extended: Sets the buffer position of the marker's head.
#
# * `screenRange` The new {Point} to use
# * `bufferPosition` The new {Point} to use
# * `properties` (optional) {Object} properties to associate with the marker.
setHeadBufferPosition: (bufferPosition, properties) ->
@bufferMarker.setHeadPosition(bufferPosition, properties)
@@ -281,7 +281,7 @@ class Marker
# Extended: Sets the screen position of the marker's head.
#
# * `screenRange` The new {Point} to use
# * `screenPosition` The new {Point} to use
# * `properties` (optional) {Object} properties to associate with the marker.
setHeadScreenPosition: (screenPosition, properties) ->
screenPosition = @displayBuffer.clipScreenPosition(screenPosition, properties)
@@ -295,7 +295,7 @@ class Marker
# Extended: Sets the buffer position of the marker's tail.
#
# * `screenRange` The new {Point} to use
# * `bufferPosition` The new {Point} to use
# * `properties` (optional) {Object} properties to associate with the marker.
setTailBufferPosition: (bufferPosition) ->
@bufferMarker.setTailPosition(bufferPosition)
@@ -308,7 +308,7 @@ class Marker
# Extended: Sets the screen position of the marker's tail.
#
# * `screenRange` The new {Point} to use
# * `screenPosition` The new {Point} to use
# * `properties` (optional) {Object} properties to associate with the marker.
setTailScreenPosition: (screenPosition, options) ->
screenPosition = @displayBuffer.clipScreenPosition(screenPosition, options)
+44 -1
Ver Arquivo
@@ -12,13 +12,56 @@ MenuHelpers = require './menu-helpers'
# application menu.
#
# An instance of this class is always available as the `atom.menu` global.
#
# ## Menu CSON Format
#
# Here is an example from the [tree-view](https://github.com/atom/tree-view/blob/master/menus/tree-view.cson):
#
# ```coffee
# [
# {
# 'label': 'View'
# 'submenu': [
# { 'label': 'Toggle Tree View', 'command': 'tree-view:toggle' }
# ]
# }
# {
# 'label': 'Packages'
# 'submenu': [
# 'label': 'Tree View'
# 'submenu': [
# { 'label': 'Focus', 'command': 'tree-view:toggle-focus' }
# { 'label': 'Toggle', 'command': 'tree-view:toggle' }
# { 'label': 'Reveal Active File', 'command': 'tree-view:reveal-active-file' }
# { 'label': 'Toggle Tree Side', 'command': 'tree-view:toggle-side' }
# ]
# ]
# }
# ]
# ```
#
# Use in your package's menu `.cson` file requires that you place your menu
# structure under a `menu` key.
#
# ```coffee
# 'menu': [
# {
# 'label': 'View'
# 'submenu': [
# { 'label': 'Toggle Tree View', 'command': 'tree-view:toggle' }
# ]
# }
# ]
# ```
#
# See {::add} for more info about adding menu's directly.
module.exports =
class MenuManager
constructor: ({@resourcePath}) ->
@pendingUpdateOperation = null
@template = []
atom.keymaps.onDidLoadBundledKeymaps => @loadPlatformItems()
atom.packages.onDidActivateAll => @sortPackagesMenu()
atom.packages.onDidActivateInitialPackages => @sortPackagesMenu()
# Public: Adds the given items to the application menu.
#
+2
Ver Arquivo
@@ -59,6 +59,8 @@ loadDependencies = (modulePath, rootPath, rootMetadata, moduleCache) ->
if childMetadata?.version
try
mainPath = require.resolve(childPath)
catch error
mainPath = null
if mainPath
moduleCache.dependencies.push
+7
Ver Arquivo
@@ -48,3 +48,10 @@ class NotificationManager
###
getNotifications: -> @notifications
###
Section: Managing Notifications
###
clear: ->
@notifications = []
+10 -1
Ver Arquivo
@@ -8,10 +8,14 @@ class Notification
@timestamp = new Date()
@dismissed = true
@dismissed = false if @isDismissable()
@displayed = false
onDidDismiss: (callback) ->
@emitter.on 'did-dismiss', callback
onDidDisplay: (callback) ->
@emitter.on 'did-display', callback
getOptions: -> @options
getType: -> @type
@@ -30,12 +34,17 @@ class Notification
dismiss: ->
return unless @isDismissable() and not @isDismissed()
@dismissed = true
@emitter.emit 'did-dismiss'
@emitter.emit 'did-dismiss', this
isDismissed: -> @dismissed
isDismissable: -> !!@options.dismissable
wasDisplayed: -> @displayed
setDisplayed: (@displayed) ->
@emitter.emit 'did-display', this
getIcon: ->
return @options.icon if @options.icon?
switch @type
+68 -12
Ver Arquivo
@@ -5,7 +5,7 @@ EmitterMixin = require('emissary').Emitter
{Emitter} = require 'event-kit'
fs = require 'fs-plus'
Q = require 'q'
{deprecate} = require 'grim'
Grim = require 'grim'
Package = require './package'
ThemePackage = require './theme-package'
@@ -48,30 +48,76 @@ class PackageManager
Section: Event Subscription
###
# Public: Invoke the given callback when all packages have been activated.
# Public: Invoke the given callback when all packages have been loaded.
#
# * `callback` {Function}
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidLoadInitialPackages: (callback) ->
@emitter.on 'did-load-initial-packages', callback
@emitter.on 'did-load-all', callback # TODO: Remove once deprecated pre-1.0 APIs are gone
onDidLoadAll: (callback) ->
@emitter.on 'did-load-all', callback
Grim.deprecate("Use `::onDidLoadInitialPackages` instead.")
@onDidLoadInitialPackages(callback)
# Public: Invoke the given callback when all packages have been activated.
#
# * `callback` {Function}
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidActivateInitialPackages: (callback) ->
@emitter.on 'did-activate-initial-packages', callback
@emitter.on 'did-activate-all', callback # TODO: Remove once deprecated pre-1.0 APIs are gone
onDidActivateAll: (callback) ->
@emitter.on 'did-activate-all', callback
Grim.deprecate("Use `::onDidActivateInitialPackages` instead.")
@onDidActivateInitialPackages(callback)
# Public: Invoke the given callback when a package is activated.
#
# * `callback` A {Function} to be invoked when a package is activated.
# * `package` The {Package} that was activated.
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidActivatePackage: (callback) ->
@emitter.on 'did-activate-package', callback
# Public: Invoke the given callback when a package is deactivated.
#
# * `callback` A {Function} to be invoked when a package is deactivated.
# * `package` The {Package} that was deactivated.
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidDeactivatePackage: (callback) ->
@emitter.on 'did-deactivate-package', callback
# Public: Invoke the given callback when a package is loaded.
#
# * `callback` A {Function} to be invoked when a package is loaded.
# * `package` The {Package} that was loaded.
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidLoadPackage: (callback) ->
@emitter.on 'did-load-package', callback
# Public: Invoke the given callback when a package is unloaded.
#
# * `callback` A {Function} to be invoked when a package is unloaded.
# * `package` The {Package} that was unloaded.
#
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
onDidUnloadPackage: (callback) ->
@emitter.on 'did-unload-package', callback
on: (eventName) ->
switch eventName
when 'loaded'
deprecate 'Use PackageManager::onDidLoadAll instead'
Grim.deprecate 'Use PackageManager::onDidLoadInitialPackages instead'
when 'activated'
deprecate 'Use PackageManager::onDidActivateAll instead'
Grim.deprecate 'Use PackageManager::onDidActivateInitialPackages instead'
else
deprecate 'PackageManager::on is deprecated. Use event subscription methods instead.'
Grim.deprecate 'PackageManager::on is deprecated. Use event subscription methods instead.'
EmitterMixin::on.apply(this, arguments)
###
@@ -278,7 +324,7 @@ class PackageManager
packagePaths = _.uniq packagePaths, (packagePath) -> path.basename(packagePath)
@loadPackage(packagePath) for packagePath in packagePaths
@emit 'loaded'
@emitter.emit 'did-load-all'
@emitter.emit 'did-load-initial-packages'
loadPackage: (nameOrPath) ->
return pack if pack = @getLoadedPackage(nameOrPath)
@@ -295,6 +341,7 @@ class PackageManager
pack = new Package(packagePath, metadata)
pack.load()
@loadedPackages[pack.name] = pack
@emitter.emit 'did-load-package', pack
return pack
catch error
console.warn "Failed to load package.json '#{path.basename(packagePath)}'", error.stack ? error
@@ -312,16 +359,19 @@ class PackageManager
if pack = @getLoadedPackage(name)
delete @loadedPackages[pack.name]
@emitter.emit 'did-unload-package', pack
else
throw new Error("No loaded package for name '#{name}'")
# Activate all the packages that should be activated.
activate: ->
promises = []
for [activator, types] in @packageActivators
packages = @getLoadedPackagesForTypes(types)
activator.activatePackages(packages)
@emit 'activated'
@emitter.emit 'did-activate-all'
promises = promises.concat(activator.activatePackages(packages))
Q.all(promises).then =>
@emit 'activated'
@emitter.emit 'did-activate-initial-packages'
# another type of package manager can handle other package types.
# See ThemeManager
@@ -329,9 +379,13 @@ class PackageManager
@packageActivators.push([activator, types])
activatePackages: (packages) ->
promises = []
atom.config.transact =>
@activatePackage(pack.name) for pack in packages
for pack in packages
promise = @activatePackage(pack.name)
promises.push(promise) unless pack.hasActivationCommands()
@observeDisabledPackages()
promises
# Activate a single package by name
activatePackage: (name) ->
@@ -340,6 +394,7 @@ class PackageManager
else if pack = @loadPackage(name)
pack.activate().then =>
@activePackages[pack.name] = pack
@emitter.emit 'did-activate-package', pack
pack
else
Q.reject(new Error("Failed to load package '#{name}'"))
@@ -357,3 +412,4 @@ class PackageManager
@setPackageState(pack.name, state) if state = pack.serialize?()
pack.deactivate()
delete @activePackages[pack.name]
@emitter.emit 'did-deactivate-package', pack
+25 -14
Ver Arquivo
@@ -23,8 +23,6 @@ module.exports =
class Package
EmitterMixin.includeInto(this)
@stylesheetsDir: 'stylesheets'
@isBundledPackagePath: (packagePath) ->
if atom.packages.devMode
return false unless atom.packages.resourcePath.startsWith("#{process.resourcesPath}#{path.sep}")
@@ -44,6 +42,15 @@ class Package
throw error unless ignoreErrors
metadata ?= {}
metadata.name = packageName
if metadata.stylesheetMain?
deprecate("Use the `mainStyleSheet` key instead of `stylesheetMain` in the `package.json` of `#{packageName}`", {packageName})
metadata.mainStyleSheet = metadata.stylesheetMain
if metadata.stylesheets?
deprecate("Use the `styleSheets` key instead of `stylesheets` in the `package.json` of `#{packageName}`", {packageName})
metadata.styleSheets = metadata.stylesheets
metadata
keymaps: null
@@ -109,7 +116,7 @@ class Package
getType: -> 'atom'
getStylesheetType: -> 'bundled'
getStyleSheetPriority: -> 0
load: ->
@measure 'loadTime', =>
@@ -175,8 +182,9 @@ class Package
activateStylesheets: ->
return if @stylesheetsActivated
group = @getStylesheetType()
@stylesheetDisposables = new CompositeDisposable
priority = @getStyleSheetPriority()
for [sourcePath, source] in @stylesheets
if match = path.basename(sourcePath).match(/[^.]*\.([^.]*)\./)
context = match[1]
@@ -185,7 +193,7 @@ class Package
else
context = undefined
@stylesheetDisposables.add(atom.styles.addStyleSheet(source, {sourcePath, group, context}))
@stylesheetDisposables.add(atom.styles.addStyleSheet(source, {sourcePath, priority, context}))
@stylesheetsActivated = true
activateResources: ->
@@ -205,13 +213,13 @@ class Package
if @bundledPackage and packagesCache[@name]?
@keymaps = (["#{atom.packages.resourcePath}#{path.sep}#{keymapPath}", keymapObject] for keymapPath, keymapObject of packagesCache[@name].keymaps)
else
@keymaps = @getKeymapPaths().map (keymapPath) -> [keymapPath, CSON.readFileSync(keymapPath)]
@keymaps = @getKeymapPaths().map (keymapPath) -> [keymapPath, CSON.readFileSync(keymapPath) ? {}]
loadMenus: ->
if @bundledPackage and packagesCache[@name]?
@menus = (["#{atom.packages.resourcePath}#{path.sep}#{menuPath}", menuObject] for menuPath, menuObject of packagesCache[@name].menus)
else
@menus = @getMenuPaths().map (menuPath) -> [menuPath, CSON.readFileSync(menuPath)]
@menus = @getMenuPaths().map (menuPath) -> [menuPath, CSON.readFileSync(menuPath) ? {}]
getKeymapPaths: ->
keymapsDirPath = path.join(@path, 'keymaps')
@@ -232,15 +240,18 @@ class Package
[stylesheetPath, atom.themes.loadStylesheet(stylesheetPath, true)]
getStylesheetsPath: ->
path.join(@path, @constructor.stylesheetsDir)
if fs.isDirectorySync(path.join(@path, 'stylesheets'))
deprecate("Store package style sheets in the `styles/` directory instead of `stylesheets/` in the `#{@name}` package", packageName: @name)
path.join(@path, 'stylesheets')
else
path.join(@path, 'styles')
getStylesheetPaths: ->
stylesheetDirPath = @getStylesheetsPath()
if @metadata.stylesheetMain
[fs.resolve(@path, @metadata.stylesheetMain)]
else if @metadata.stylesheets
@metadata.stylesheets.map (name) -> fs.resolve(stylesheetDirPath, name, ['css', 'less', ''])
if @metadata.mainStyleSheet
[fs.resolve(@path, @metadata.mainStyleSheet)]
else if @metadata.styleSheets
@metadata.styleSheets.map (name) -> fs.resolve(stylesheetDirPath, name, ['css', 'less', ''])
else if indexStylesheet = fs.resolve(@path, 'index', ['css', 'less'])
[indexStylesheet]
else
@@ -298,7 +309,7 @@ class Package
if fs.isDirectorySync(path.join(@path, 'scoped-properties'))
settingsDirPath = path.join(@path, 'scoped-properties')
deprecate("Store package settings files in the `settings` directory instead of `scoped-properties`")
deprecate("Store package settings files in the `settings/` directory instead of `scoped-properties/`", packageName: @name)
else
settingsDirPath = path.join(@path, 'settings')
+1 -1
Ver Arquivo
@@ -64,7 +64,7 @@ class PaneContainerView extends View
@getActivePaneView()?.activeView
paneForUri: (uri) ->
atom.views.getView(@model.paneForUri(uri)).__spacePenView
atom.views.getView(@model.paneForURI(uri)).__spacePenView
focusNextPaneView: ->
@model.activateNextPane()

Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais