From 4dce9d659f36c8694328ccf21991565e77438b9c Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 1 May 2013 21:35:29 -0700 Subject: [PATCH] Open http/https links in an external browser Listen for all links being clicked and open any http/https hrefs by spawning a call to the 'open' command. Closes #531 --- spec/app/window-spec.coffee | 22 ++++++++++++++++++++++ src/app/window.coffee | 9 +++++++++ 2 files changed, 31 insertions(+) diff --git a/spec/app/window-spec.coffee b/spec/app/window-spec.coffee index a173689c7..e39f451b9 100644 --- a/spec/app/window-spec.coffee +++ b/spec/app/window-spec.coffee @@ -230,3 +230,25 @@ describe "Window", -> event = buildDragEvent("drop", []) window.onDrop(event) expect(atom.open).not.toHaveBeenCalled() + + describe "when a link is clicked", -> + it "opens the http/https links in an external application", -> + ChildProcess = require 'child_process' + spyOn(ChildProcess, 'spawn') + + $("the website").appendTo(document.body).click().remove() + expect(ChildProcess.spawn).toHaveBeenCalled() + expect(ChildProcess.spawn.argsForCall[0][1][0]).toBe "http://github.com" + + ChildProcess.spawn.reset() + $("the website").appendTo(document.body).click().remove() + expect(ChildProcess.spawn).toHaveBeenCalled() + expect(ChildProcess.spawn.argsForCall[0][1][0]).toBe "https://github.com" + + ChildProcess.spawn.reset() + $("the website").appendTo(document.body).click().remove() + expect(ChildProcess.spawn).not.toHaveBeenCalled() + + ChildProcess.spawn.reset() + $("link").appendTo(document.body).click().remove() + expect(ChildProcess.spawn).not.toHaveBeenCalled() diff --git a/src/app/window.coffee b/src/app/window.coffee index a70829762..c477031d5 100644 --- a/src/app/window.coffee +++ b/src/app/window.coffee @@ -27,6 +27,15 @@ window.setUpEnvironment = -> window.pasteboard = new Pasteboard window.keymap = new Keymap() $(document).on 'keydown', keymap.handleKeyEvent + + $(document).on 'click', 'a', (e) -> + location = $(e.target).attr('href') + return unless location or location[0] is '#' + + if location.indexOf('https://') is 0 or location.indexOf('http://') is 0 + require('child_process').spawn('open', [location]) if location + false + keymap.bindDefaultKeys() requireStylesheet 'atom'