Override web inspector's context menu.
authorCheng Zhao <zcbenz@gmail.com>
Thu, 3 Apr 2014 12:54:42 +0000 (20:54 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Thu, 3 Apr 2014 12:54:42 +0000 (20:54 +0800)
atom.gyp
atom/renderer/lib/init.coffee
atom/renderer/lib/inspector.coffee [new file with mode: 0644]

index cb5256c..6215551 100644 (file)
--- a/atom.gyp
+++ b/atom.gyp
@@ -32,6 +32,7 @@
       'atom/common/api/lib/shell.coffee',
       'atom/common/lib/init.coffee',
       'atom/renderer/lib/init.coffee',
+      'atom/renderer/lib/inspector.coffee',
       'atom/renderer/lib/override.coffee',
       'atom/renderer/api/lib/ipc.coffee',
       'atom/renderer/api/lib/remote.coffee',
index 33d7d20..e781ac4 100644 (file)
@@ -1,4 +1,5 @@
 path   = require 'path'
+url    = require 'url'
 Module = require 'module'
 
 # Expose information of current process.
@@ -42,5 +43,9 @@ else
   global.__filename = __filename
   global.__dirname = __dirname
 
-# Override default web functions.
-require path.join(__dirname, 'override')
+if location.protocol is 'chrome-devtools:'
+  # Override some inspector APIs.
+  require path.join(__dirname, 'inspector')
+else
+  # Override default web functions.
+  require path.join(__dirname, 'override')
diff --git a/atom/renderer/lib/inspector.coffee b/atom/renderer/lib/inspector.coffee
new file mode 100644 (file)
index 0000000..7030fdd
--- /dev/null
@@ -0,0 +1,30 @@
+# Use menu API to show context menu.
+window.onload = ->
+  WebInspector.ContextMenu.prototype.show = ->
+    menuObject = @_buildDescriptor()
+    if menuObject.length
+      WebInspector._contextMenu = this
+      createMenu(menuObject, @_event)
+      @_event.consume()
+
+convertToMenuTemplate = (items) ->
+  template = []
+  for item in items
+    if item.type is 'subMenu'
+      template.push
+        type: 'submenu'
+        label: item.label
+        submenu: convertToMenuTemplate item.subItems
+    else
+      template.push
+        type: 'normal'
+        label: item.label
+  template
+
+createMenu = (items, event) ->
+  remote = require 'remote'
+  Menu = remote.require 'menu'
+
+  menu = Menu.buildFromTemplate convertToMenuTemplate(items.subItems)
+  menu.popup()
+  event.consume true