3 { classes: Cc, interfaces: Ci, utils: Cu } = Components
5 utils = require 'utils'
17 # Navigate to the address that is currently stored in the system clipboard
19 vim.window.location.assign utils.readFromClipboard()
21 # Open new tab and navigate to the address that is currently stored in the system clipboard
23 if chromeWindow = utils.getRootWindow vim.window
24 if gBrowser = chromeWindow.gBrowser
25 gBrowser.selectedTab = gBrowser.addTab utils.readFromClipboard()
27 # Open new tab and focus the address bar
29 if chromeWindow = utils.getRootWindow vim.window
30 if gBrowser = chromeWindow.gBrowser
31 gBrowser.selectedTab = chromeWindow.gBrowser.addTab()
33 # Copy current URL to the clipboard
35 vim.markers = injectHints vim.window.document
36 if vim.markers.length > 0
37 # This callback will be called with the selected marker as argument
39 if url = marker.element.href
40 utils.writeToClipboard url
44 # Copy current URL to the clipboard
46 utils.writeToClipboard vim.window.location.toString()
48 # Reload the page, possibly from cache
50 vim.window.location.reload(false)
52 # Reload the page from the server
54 vim.window.location.reload(false)
56 # Scroll to the top of the page
58 vim.window.scrollTo(0, 0)
60 # Scroll to the bottom of the page
62 vim.window.scrollTo(0, vim.window.document.body.scrollHeight)
66 vim.window.scrollBy(0, SCROLL_AMOUNT)
70 vim.window.scrollBy(0, -SCROLL_AMOUNT)
74 vim.window.scrollBy(0, vim.window.innerHeight)
78 vim.window.scrollBy(0, -vim.window.innerHeight)
80 # Activate previous tab
82 if rootWindow = utils.getRootWindow vim.window
83 rootWindow.gBrowser.tabContainer.advanceSelectedTab(-1, true);
87 if rootWindow = utils.getRootWindow vim.window
88 rootWindow.gBrowser.tabContainer.advanceSelectedTab(1, true);
92 if rootWindow = utils.getRootWindow vim.window
93 rootWindow.gBrowser.tabContainer.selectedIndex = 0;
97 if rootWindow = utils.getRootWindow vim.window
98 itemCount = rootWindow.gBrowser.tabContainer.itemCount;
99 rootWindow.gBrowser.tabContainer.selectedIndex = itemCount - 1;
103 vim.window.history.back()
105 # Go forward in history
107 vim.window.history.forward()
111 if rootWindow = utils.getRootWindow vim.window
112 rootWindow.gBrowser.removeCurrentTab()
114 # Restore last closed tab
116 if rootWindow = utils.getRootWindow vim.window
117 ss = utils.getSessionStore()
118 if ss and ss.getClosedTabCount(rootWindow) > 0
119 ss.undoCloseTab rootWindow, 0
121 # Follow links with hint markers
123 vim.markers = injectHints vim.window.document
124 if vim.markers.length > 0
125 # This callback will be called with the selected marker as argument
127 marker.element.focus()
128 utils.simulateClick marker.element
132 # Follow links in a new Tab with hint markers
134 vim.markers = injectHints vim.window.document
135 if vim.markers.length > 0
136 # This callback will be called with the selected marker as argument
138 marker.element.focus()
139 utils.simulateClick marker.element, metaKey: true
145 showHelp vim.window.document
148 # Blur active element if it's editable. Other elements
149 # aren't blurred - we don't want to interfere with
150 # the browser too much
151 activeElement = vim.window.document.activeElement
152 if utils.isElementEditable activeElement
156 removeHints vim.window.document
158 hideHelp vim.window.document
159 # Finally enter normal mode
160 vim.enterNormalMode()
163 # Split command pipes into individual commands
164 commands = do (commands) ->
166 for keys, command of commands
167 for key in keys.split '|'
168 newCommands[key] = command
171 # Called in hints mode. Will process the char, update and hide/show markers
172 hintCharHandler = (vim, char) ->
173 for marker in vim.markers
174 marker.matchHintChar char
176 if marker.isMatched()
178 removeHints vim.window.document
179 vim.enterNormalMode()
182 exports.hintCharHandler = hintCharHandler
183 exports.commands = commands