]> git.gir.st - VimFx.git/commit
Major refactor: Rework all UI and related improvements
authorSimon Lydell <simon.lydell@gmail.com>
Thu, 4 Jun 2015 20:22:17 +0000 (22:22 +0200)
committerSimon Lydell <simon.lydell@gmail.com>
Sat, 20 Jun 2015 17:12:54 +0000 (19:12 +0200)
commit355228217d7e7a61f5e1edbb9efbfb0f3e4ef81c
tree9e353eabe3e7d169fd233002d33b37801b067972
parente19d44dd83c21e5a6dc40bfdefae4794a9098077
Major refactor: Rework all UI and related improvements

This commit is unfortunately very large. I do not like that, but most of the
things in this commit are very closely related, which made it easier to do it
this way.

Help dialog
===========

- It is no longer used to customize shortcuts. That's done in VimFx's settings
  in the Add-ons Manager instead.

- Moved "enjoying/found bug" from the Help dialog and into the readme. The
  readme will be used as the extension description on AMO. That description is
  also shown in the Add-ons Manager, so users will see it when customizing
  VimFx.

- It is no longer injected inside web pages, but in the Firefox chrome. This
  allows to get rid of the nasty resets in the CSS and makes it impossible for
  page elements to cover it. #477

- It now fills the entire page and adjusts based on your screen size. It is
  designed to work with lots of shortcut customization and the additon of new
  modes by other extensions.

- Added `gulp help.html` to make it easier to style the help dialog.

Settings UI
===========

- Shortcuts customization is now done in VimFx's settings page in the Add-ons
  Manager. This keeps all settings together and makes it obvious that you can
  customize the shortcuts. The new UI is also more accessible.

- The new UI also lets you:

  - Insert the default value of a pref. This is useful for the "prev/next
    patterns" by letting you merge in new defaults into your own customizations.
  - Reset to the default value. #262
  - Insert the next keypress as text. The default shortcut for this is `<c-q>`.
    (q as in quote. vim also has this shortcut, which works like its `<c-v>`.)
    For example, if the user is unsure how to express `<c-enter>` (s)he could
    simply press `<c-q><c-enter>` and `<c-enter>` would be inserted as text.

Button
======

- Now has high-resolution images. #383

- Is now implemented using CustomizableUI. #303 #349

- Greatly simplified:

  - If in normal mode, clicking it opens the help dialog.
  - Otherwise it exits the current mode returning to normal mode. This is
    useful if the user accidentally removes the keyboard shortcuts to exit
    modes, or don't know how to exit insert mode, for example.

  The above means that the "disable" feature has been removed. The UI to
  "blacklist" sites has been removed as well. See the "Removed/Changed/Addesd
  features" section for more info.

- It is now easily stylable with user CSS.

- State is no longer lost when moving a tab into a new window. #57

Removed/Changed/Added features
==============================

- The "disable" feature has been completely removed. It is rather useless
  compared to insert mode, and sometimes trips new users up. #327

- The "blacklist" feature has been changed into an "auto-insert-mode" feature.
  It is basically the same, except that you can actually choose to leave the
  blacklisted state for a while if you feel like it. The default shortcut to
  leave insert (`<s-escape>`) is not likely to conflict with page shortcuts.
  It is possible to disable the exit shortcut on certain pages using the public
  API.

- The "blacklist" feature has been de-emphasized. The button no longer offers
  any UI to blacklist and un-blacklist sites (see above). VimFx is supposed to
  be keyboard driven, so having a mouse-oriented UI makes no sense. Blacklisting
  is also a bit of an anti-feature, so we shouldn't maintain lots of UI code for
  it. It's simple enough to just open the Add-ons Manager and add
  `*currentdomain.com*` to the blacklist setting.

- The "blacklist" no longer supports the `!` wild card (that matched a single
  character) to keep things simple. The less to explain to the user the better.
  If users need more advanced wildcards than the simple `*` they can use the
  public API (see the Public API section) which allows to use all of
  JavaScript's power.

- The "blacklist" no longer supports the `##key1#key2` syntax to disable certain
  keys on certain sites. Instead a superior public API function is offered. This
  feature only existed in the develop branch for a while and was never released.
  Any users of it must manually move to the public API.

- The "prev/next patterns" no longer support the `*` and `!` wildcards. Instead
  they are treated as regexes (which allows to use `.*` and `.` instead). This
  is way simpler, and more powerful. Non-technical users can just keep adding
  simple patterns such as "next" translated into their language without being
  troubled by regex syntax, while advanced users can use the full power of regex
  if needed. The public API may of course also be used for unlimited power.

- The "blacklist" and "prev/next patterns" are no longer comma/space-separated.
  To keep things simple their just space-separated. Space is not a valid URL
  character, but a comma is, so this allows to match a URL which ends with a
  comma (but that is probably too rare to ever be useful). More importantly it
  makes the settings easier to read. Space could be part of a "prev/next
  pattern", though. Thanks to the above point one may use `\s` instead, which is
  also more robust. The prefs are automatically migrated to the new format.

- The "translations" pref in about:config is no longer used. Instead you have to
  use the public API. This is because it is an advanced feature and next to
  impossible to manage as a single line of JSON. This also keeps the code
  simpler. The pref only existed in the develop branch for a while and was never
  released. Any users of it must manually move to the public API.

- Most hard-coded constants have been moved into prefs, which can only be
  changed via about:config or the public API. For advanced users only. For
  example:

  - "prev/next patterns" attributes. #489
  - "target blank prevention". #452

- Pressing `aj` used to trigger the `j` shortcut, but doesn't any longer. Since
  there is no `aj` shortcut (by default) nothing happens. The reason that
  "feature" used to exist was because there used to be no concept of a timeout.
  For example if you pressed `a`, went from the computer for a while, came back
  and pressed `/` the `a/` shortcut would be invoked, which is a bit surprising.
  Now there is a timeout instead, which defaults to 2 seconds. So if you type
  `aj` with less than 2 seconds between the key presses, nothing will happen.
  Otherwise the `a` partial match will be cancelled and the `j` command will be
  invoked. This is more like vim works.

- The escape command used to be special-cased so that you could trigger it
  inside text boxes. Now this is done through the concept of "force keys"
  instead. If you add `<force>` at the beginning of a shortcut it will be
  available in text boxes as well. #194

Refactoring
===========

- All modes are know implemented the same way. Normal mode used to be
  special-cased and all other modes were rather limited.

- Commands and modes are now a lot more DRY.

- defaults.coffee now takes care of command categorization and ordering. It is
  essentially the text version of the help dialog. Changing order and/or
  categories there automatically affects the help dialog (and the settings UI)
  as well.

- The command matching algorithm is now much more simple and flexible.

- Because the help dialog was moved into browser chrome, there is no longer any
  need to insert the style sheet as an `AGENT_SHEET`, which made it difficult to
  override it with user CSS, for example to change the font size or color of
  hint markers. #465 #424 #233 #220

Public API
==========

Added a public API. This will be used by advanced users and by other extensions
that wish to extend VimFx. It allows to:

- Keep all VimFx configuration in a text file (instead of configuring it via
  VimFx’s GUI and storing it in Firefox’s prefs system). #245
- Add your own custom commands. #508 #490 #235
- Add site-specific options.
- Disable specific keys on some sites. #255
- Do things when entering pages, such as automatically entering insert mode
  (this can be used instead of the "blacklist" feature) or hints mode. #408
- Set some advanced settings that cannot be set any other way.
- Add new command categories.
- Add new modes.
62 files changed:
.gitignore
CONTRIBUTING-CODE.md
README.md
extension/bootstrap.coffee
extension/chrome.manifest.tmpl
extension/icon.png
extension/lib/api.coffee [new file with mode: 0644]
extension/lib/button.coffee
extension/lib/command.coffee [deleted file]
extension/lib/commands.coffee
extension/lib/defaults.coffee
extension/lib/events.coffee
extension/lib/help.coffee
extension/lib/hints.coffee
extension/lib/l10n.coffee
extension/lib/legacy.coffee
extension/lib/main.coffee
extension/lib/marker.coffee
extension/lib/migrations.coffee
extension/lib/modes.coffee
extension/lib/options.coffee
extension/lib/parse-prefs.coffee [new file with mode: 0644]
extension/lib/prefs.coffee
extension/lib/public.coffee [new file with mode: 0644]
extension/lib/utils.coffee
extension/lib/vim.coffee
extension/lib/vimfx.coffee
extension/lib/window-utils.coffee
extension/locale/de/vimfx.properties
extension/locale/el-GR/vimfx.properties
extension/locale/en-US/vimfx.properties
extension/locale/fr/vimfx.properties
extension/locale/hu/vimfx.properties
extension/locale/id/vimfx.properties
extension/locale/it/vimfx.properties
extension/locale/ja/vimfx.properties
extension/locale/nl/vimfx.properties
extension/locale/pl/vimfx.properties
extension/locale/ru/vimfx.properties
extension/locale/sv-SE/vimfx.properties
extension/locale/zh-CN/vimfx.properties
extension/locale/zh-TW/vimfx.properties
extension/resources/icon16-blacklist.png [deleted file]
extension/resources/icon16-blacklist_inverse.png [deleted file]
extension/resources/icon16-grey.png [deleted file]
extension/resources/style.css [deleted file]
extension/skin/icon128-red.png [new file with mode: 0644]
extension/skin/icon128.png [new file with mode: 0644]
extension/skin/icon16-red.png [moved from extension/resources/icon16-red.png with 100% similarity]
extension/skin/icon16.png [moved from extension/resources/icon16-normal.png with 100% similarity]
extension/skin/icon32-red.png [new file with mode: 0644]
extension/skin/icon32.png [new file with mode: 0644]
extension/skin/icon64-red.png [new file with mode: 0644]
extension/skin/icon64.png [new file with mode: 0644]
extension/skin/style.css [new file with mode: 0644]
extension/test/index.coffee
extension/test/test-api.coffee [new file with mode: 0644]
extension/test/test-legacy.coffee
extension/test/test-utils.coffee
gulpfile.coffee
icon-large.png [deleted file]
package.json
Imprint / Impressum