lilei преди 3 години
родител
ревизия
3c70b55822
променени са 35 файла, в които са добавени 567 реда и са изтрити 0 реда
  1. BIN
      章鱼车管家app/10801882.png
  2. BIN
      章鱼车管家app/1080*1882.png
  3. BIN
      章鱼车管家app/480762.png
  4. BIN
      章鱼车管家app/480_762.png
  5. BIN
      章鱼车管家app/7201242.png
  6. BIN
      章鱼车管家app/720_1242.png
  7. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools.crx
  8. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools.zip
  9. 0 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/backend.js
  10. 0 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/background.js
  11. 0 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/detector.js
  12. 1 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/devtools-background.js
  13. 0 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/devtools.js
  14. 1 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/hook.js
  15. 1 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/proxy.js
  16. 2 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/devtools-background.html
  17. 22 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/devtools.html
  18. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/128-gray.png
  19. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/128.png
  20. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/16-gray.png
  21. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/16.png
  22. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/48-gray.png
  23. BIN
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/48.png
  24. 58 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/manifest.json
  25. 6 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/popups/disabled.html
  26. 5 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/popups/enabled.html
  27. 4 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/popups/not-found.html
  28. 40 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/backend.js
  29. 121 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/background.js
  30. 43 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/detector.js
  31. 125 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/devtools-background.js
  32. 75 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/devtools.js
  33. 10 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/hook.js
  34. 32 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/proxy.js
  35. 21 0
      章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/webpack.config.js

BIN
章鱼车管家app/10801882.png


BIN
章鱼车管家app/1080*1882.png


BIN
章鱼车管家app/480762.png


BIN
章鱼车管家app/480_762.png


BIN
章鱼车管家app/7201242.png


BIN
章鱼车管家app/720_1242.png


BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools.crx


BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools.zip


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/backend.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/background.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/detector.js


+ 1 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/devtools-background.js

@@ -0,0 +1 @@
+!function(e){var n={};function o(t){if(n[t])return n[t].exports;var u=n[t]={i:t,l:!1,exports:{}};return e[t].call(u.exports,u,u.exports,o),u.l=!0,u.exports}o.m=e,o.c=n,o.d=function(e,n,t){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="",o(o.s=191)}({191:function(e,n){let o,t=!1,u=!1,r=!1,s=0;chrome.devtools.network.onNavigated.addListener(i);const c=setInterval(i,1e3);function i(){r||s++>10||(t=!1,u=!1,chrome.devtools.inspectedWindow.eval("!!(window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue)",function(e){e&&!r&&(clearInterval(c),r=!0,chrome.devtools.panels.create("Vue","icons/128.png","devtools.html",e=>{e.onShown.addListener(l),e.onHidden.addListener(d)}))}))}function a(){o&&o(),o=null}function l(){chrome.runtime.sendMessage("vue-panel-shown"),u=!0,t&&a()}function d(){chrome.runtime.sendMessage("vue-panel-hidden"),u=!1}function v(e,n="normal"){const o=`(function() {\n    __VUE_DEVTOOLS_TOAST__(\`${e}\`, '${n}');\n  })()`;chrome.devtools.inspectedWindow.eval(o,function(e,n){n&&console.log(n)})}i(),chrome.runtime.onMessage.addListener(e=>{"vue-panel-load"===e?(a(),t=!0):e.vueToast?v(e.vueToast.message,e.vueToast.type):e.vueContextMenu&&function({id:e}){if("vue-inspect-instance"===e){const e="window.__VUE_DEVTOOLS_CONTEXT_MENU_HAS_TARGET__";chrome.devtools.inspectedWindow.eval(e,function(e,n){n&&console.log(n),void 0!==e&&e?function(e,n=null){r&&t&&u?e():(o=e,n&&v(n))}(()=>{chrome.runtime.sendMessage("vue-get-context-menu-target")},"Open Vue devtools to see component details"):(o=null,v("No Vue component was found","warn"))})}}(e.vueContextMenu)})}});

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/devtools.js


+ 1 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/hook.js

@@ -0,0 +1 @@
+!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:o})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=45)}({45:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(46);if(document instanceof HTMLDocument){const e=document.createElement("script");e.textContent=";("+o.a.toString()+")(window)",document.documentElement.appendChild(e),e.parentNode.removeChild(e)}},46:function(e,t,n){"use strict";t.a=function(e){let t={};if(e.hasOwnProperty("__VUE_DEVTOOLS_GLOBAL_HOOK__"))return;const n={Vue:null,on(e,n){(t[e="$"+e]||(t[e]=[])).push(n)},once(e,n){const o=e;(t[e="$"+e]||(t[e]=[])).push(function e(){this.off(o,e);n.apply(this,arguments)})},off(e,n){if(e="$"+e,arguments.length){const o=t[e];if(o)if(n)for(let e=0,t=o.length;e<t;e++){const t=o[e];if(t===n||t.fn===n){o.splice(e,1);break}}else t[e]=null}else t={}},emit(e){let n=t[e="$"+e];if(n){const e=[].slice.call(arguments,1);for(let t=0,o=(n=n.slice()).length;t<o;t++)n[t].apply(this,e)}}};n.once("init",t=>{n.Vue=t,t.prototype.$inspect=function(){const t=e.__VUE_DEVTOOLS_INSPECT__;t&&t(this)}}),n.once("vuex:init",e=>{n.store=e}),Object.defineProperty(e,"__VUE_DEVTOOLS_GLOBAL_HOOK__",{get:()=>n})}}});

+ 1 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/build/proxy.js

@@ -0,0 +1 @@
+!function(e){var n={};function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=193)}({193:function(e,n){const t=chrome.runtime.connect({name:"content-script"});function o(e){window.postMessage({source:"vue-devtools-proxy",payload:e},"*")}function r(e){e.data&&"vue-devtools-backend"===e.data.source&&t.postMessage(e.data.payload)}t.onMessage.addListener(o),window.addEventListener("message",r),t.onDisconnect.addListener(function(){window.removeEventListener("message",r),o("shutdown")}),o("init")}});

+ 2 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/devtools-background.html

@@ -0,0 +1,2 @@
+<meta charset="utf-8">
+<script src="./build/devtools-background.js"></script>

+ 22 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/devtools.html

@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title></title>
+    <style>
+      html, body {
+        height: 100%;
+      }
+      #container {
+        display: flex;
+        height: 100%;
+      }
+    </style>
+  </head>
+  <body>
+    <div id="container">
+      <div id="app"></div>
+    </div>
+    <script src="./build/devtools.js"></script>
+  </body>
+</html>

BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/128-gray.png


BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/128.png


BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/16-gray.png


BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/16.png


BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/48-gray.png


BIN
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/icons/48.png


+ 58 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/manifest.json

@@ -0,0 +1,58 @@
+{
+  "name": "Vue.js devtools",
+  "version": "4.1.4",
+  "description": "Chrome and Firefox DevTools extension for debugging Vue.js applications.",
+  "manifest_version": 2,
+  "icons": {
+    "16": "icons/16.png",
+    "48": "icons/48.png",
+    "128": "icons/128.png"
+  },
+  "browser_action": {
+    "default_icon": {
+      "16": "icons/16-gray.png",
+      "48": "icons/48-gray.png",
+      "128": "icons/128-gray.png"
+    },
+    "default_title": "Vue Devtools",
+    "default_popup": "popups/not-found.html"
+  },
+  "web_accessible_resources": [
+    "devtools.html",
+    "devtools-background.html",
+    "build/backend.js"
+  ],
+  "devtools_page": "devtools-background.html",
+  "background": {
+    "scripts": [
+      "build/background.js"
+    ],
+    "persistent": false
+  },
+  "permissions": [
+    "http://*/*",
+    "https://*/*",
+    "file:///*",
+    "contextMenus"
+  ],
+  "content_scripts": [
+    {
+      "matches": [
+        "<all_urls>"
+      ],
+      "js": [
+        "build/hook.js"
+      ],
+      "run_at": "document_start"
+    },
+    {
+      "matches": [
+        "<all_urls>"
+      ],
+      "js": [
+        "build/detector.js"
+      ],
+      "run_at": "document_idle"
+    }
+  ]
+}

+ 6 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/popups/disabled.html

@@ -0,0 +1,6 @@
+<meta charset="utf-8">
+<p style="width: 200px">
+  Vue.js is detected on this page.
+  Devtools inspection is not available because it's in
+  production mode or explicitly disabled by the author.
+</p>

+ 5 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/popups/enabled.html

@@ -0,0 +1,5 @@
+<meta charset="utf-8">
+<p style="width: 180px;">
+  Vue.js is detected on this page.
+  Open DevTools and look for the Vue panel.
+</p>

+ 4 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/popups/not-found.html

@@ -0,0 +1,4 @@
+<meta charset="utf-8">
+<p style="white-space: nowrap">
+  Vue.js not detected
+</p>

+ 40 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/backend.js

@@ -0,0 +1,40 @@
+// this is injected to the app page when the panel is activated.
+
+import { initBackend } from 'src/backend'
+import Bridge from 'src/bridge'
+
+window.addEventListener('message', handshake)
+
+function handshake (e) {
+  if (e.data.source === 'vue-devtools-proxy' && e.data.payload === 'init') {
+    window.removeEventListener('message', handshake)
+
+    let listeners = []
+    const bridge = new Bridge({
+      listen (fn) {
+        var listener = evt => {
+          if (evt.data.source === 'vue-devtools-proxy' && evt.data.payload) {
+            fn(evt.data.payload)
+          }
+        }
+        window.addEventListener('message', listener)
+        listeners.push(listener)
+      },
+      send (data) {
+        window.postMessage({
+          source: 'vue-devtools-backend',
+          payload: data
+        }, '*')
+      }
+    })
+
+    bridge.on('shutdown', () => {
+      listeners.forEach(l => {
+        window.removeEventListener('message', l)
+      })
+      listeners = []
+    })
+
+    initBackend(bridge)
+  }
+}

+ 121 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/background.js

@@ -0,0 +1,121 @@
+// the background script runs all the time and serves as a central message
+// hub for each vue devtools (panel + proxy + backend) instance.
+
+const ports = {}
+
+chrome.runtime.onConnect.addListener(port => {
+  let tab
+  let name
+  if (isNumeric(port.name)) {
+    tab = port.name
+    name = 'devtools'
+    installProxy(+port.name)
+  } else {
+    tab = port.sender.tab.id
+    name = 'backend'
+  }
+
+  if (!ports[tab]) {
+    ports[tab] = {
+      devtools: null,
+      backend: null
+    }
+  }
+  ports[tab][name] = port
+
+  if (ports[tab].devtools && ports[tab].backend) {
+    doublePipe(tab, ports[tab].devtools, ports[tab].backend)
+  }
+})
+
+function isNumeric (str) {
+  return +str + '' === str
+}
+
+function installProxy (tabId) {
+  chrome.tabs.executeScript(tabId, {
+    file: '/build/proxy.js'
+  }, function (res) {
+    if (!res) {
+      ports[tabId].devtools.postMessage('proxy-fail')
+    } else {
+      console.log('injected proxy to tab ' + tabId)
+    }
+  })
+}
+
+function doublePipe (id, one, two) {
+  one.onMessage.addListener(lOne)
+  function lOne (message) {
+    if (message.event === 'log') {
+      return console.log('tab ' + id, message.payload)
+    }
+    console.log('devtools -> backend', message)
+    two.postMessage(message)
+  }
+  two.onMessage.addListener(lTwo)
+  function lTwo (message) {
+    if (message.event === 'log') {
+      return console.log('tab ' + id, message.payload)
+    }
+    console.log('backend -> devtools', message)
+    one.postMessage(message)
+  }
+  function shutdown () {
+    console.log('tab ' + id + ' disconnected.')
+    one.onMessage.removeListener(lOne)
+    two.onMessage.removeListener(lTwo)
+    one.disconnect()
+    two.disconnect()
+    ports[id] = null
+    updateContextMenuItem()
+  }
+  one.onDisconnect.addListener(shutdown)
+  two.onDisconnect.addListener(shutdown)
+  console.log('tab ' + id + ' connected.')
+  updateContextMenuItem()
+}
+
+chrome.runtime.onMessage.addListener((req, sender) => {
+  if (sender.tab && req.vueDetected) {
+    chrome.browserAction.setIcon({
+      tabId: sender.tab.id,
+      path: {
+        16: 'icons/16.png',
+        48: 'icons/48.png',
+        128: 'icons/128.png'
+      }
+    })
+    chrome.browserAction.setPopup({
+      tabId: sender.tab.id,
+      popup: req.devtoolsEnabled ? 'popups/enabled.html' : 'popups/disabled.html'
+    })
+  }
+})
+
+// Right-click inspect context menu entry
+let activeTabId
+chrome.tabs.onActivated.addListener(({ tabId }) => {
+  activeTabId = tabId
+  updateContextMenuItem()
+})
+
+function updateContextMenuItem () {
+  if (ports[activeTabId]) {
+    chrome.contextMenus.create({
+      id: 'vue-inspect-instance',
+      title: 'Inspect Vue component',
+      contexts: ['all']
+    })
+  } else {
+    chrome.contextMenus.remove('vue-inspect-instance')
+  }
+}
+
+chrome.contextMenus.onClicked.addListener((info, tab) => {
+  chrome.runtime.sendMessage({
+    vueContextMenu: {
+      id: info.menuItemId
+    }
+  })
+})

+ 43 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/detector.js

@@ -0,0 +1,43 @@
+import { installToast } from 'src/backend/toast'
+
+window.addEventListener('message', e => {
+  if (e.source === window && e.data.vueDetected) {
+    chrome.runtime.sendMessage(e.data)
+  }
+})
+
+function detect (win) {
+  setTimeout(() => {
+    const all = document.querySelectorAll('*')
+    let el
+    for (let i = 0; i < all.length; i++) {
+      if (all[i].__vue__) {
+        el = all[i]
+        break
+      }
+    }
+    if (el) {
+      let Vue = Object.getPrototypeOf(el.__vue__).constructor
+      while (Vue.super) {
+        Vue = Vue.super
+      }
+      win.postMessage({
+        devtoolsEnabled: Vue.config.devtools,
+        vueDetected: true
+      }, '*')
+    }
+  }, 100)
+}
+
+// inject the hook
+if (document instanceof HTMLDocument) {
+  installScript(detect)
+  installScript(installToast)
+}
+
+function installScript (fn) {
+  const script = document.createElement('script')
+  script.textContent = ';(' + fn.toString() + ')(window)'
+  document.documentElement.appendChild(script)
+  script.parentNode.removeChild(script)
+}

+ 125 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/devtools-background.js

@@ -0,0 +1,125 @@
+// This is the devtools script, which is called when the user opens the
+// Chrome devtool on a page. We check to see if we global hook has detected
+// Vue presence on the page. If yes, create the Vue panel; otherwise poll
+// for 10 seconds.
+
+let panelLoaded = false
+let panelShown = false
+let pendingAction
+let created = false
+let checkCount = 0
+
+chrome.devtools.network.onNavigated.addListener(createPanelIfHasVue)
+const checkVueInterval = setInterval(createPanelIfHasVue, 1000)
+createPanelIfHasVue()
+
+function createPanelIfHasVue () {
+  if (created || checkCount++ > 10) {
+    return
+  }
+  panelLoaded = false
+  panelShown = false
+  chrome.devtools.inspectedWindow.eval(
+    '!!(window.__VUE_DEVTOOLS_GLOBAL_HOOK__.Vue)',
+    function (hasVue) {
+      if (!hasVue || created) {
+        return
+      }
+      clearInterval(checkVueInterval)
+      created = true
+      chrome.devtools.panels.create(
+        'Vue', 'icons/128.png', 'devtools.html',
+        panel => {
+          // panel loaded
+          panel.onShown.addListener(onPanelShown)
+          panel.onHidden.addListener(onPanelHidden)
+        }
+      )
+    }
+  )
+}
+
+// Runtime messages
+
+chrome.runtime.onMessage.addListener(request => {
+  if (request === 'vue-panel-load') {
+    onPanelLoad()
+  } else if (request.vueToast) {
+    toast(request.vueToast.message, request.vueToast.type)
+  } else if (request.vueContextMenu) {
+    onContextMenu(request.vueContextMenu)
+  }
+})
+
+// Page context menu entry
+
+function onContextMenu ({ id }) {
+  if (id === 'vue-inspect-instance') {
+    const src = `window.__VUE_DEVTOOLS_CONTEXT_MENU_HAS_TARGET__`
+
+    chrome.devtools.inspectedWindow.eval(src, function (res, err) {
+      if (err) {
+        console.log(err)
+      }
+      if (typeof res !== 'undefined' && res) {
+        panelAction(() => {
+          chrome.runtime.sendMessage('vue-get-context-menu-target')
+        }, 'Open Vue devtools to see component details')
+      } else {
+        pendingAction = null
+        toast('No Vue component was found', 'warn')
+      }
+    })
+  }
+}
+
+// Action that may execute immediatly
+// or later when the Vue panel is ready
+
+function panelAction (cb, message = null) {
+  if (created && panelLoaded && panelShown) {
+    cb()
+  } else {
+    pendingAction = cb
+    message && toast(message)
+  }
+}
+
+function executePendingAction () {
+  pendingAction && pendingAction()
+  pendingAction = null
+}
+
+// Execute pending action when Vue panel is ready
+
+function onPanelLoad () {
+  executePendingAction()
+  panelLoaded = true
+}
+
+// Manage panel visibility
+
+function onPanelShown () {
+  chrome.runtime.sendMessage('vue-panel-shown')
+  panelShown = true
+  panelLoaded && executePendingAction()
+}
+
+function onPanelHidden () {
+  chrome.runtime.sendMessage('vue-panel-hidden')
+  panelShown = false
+}
+
+// Toasts
+
+function toast (message, type = 'normal') {
+  const src = `(function() {
+    __VUE_DEVTOOLS_TOAST__(\`${message}\`, '${type}');
+  })()`
+
+  chrome.devtools.inspectedWindow.eval(src, function (res, err) {
+    if (err) {
+      console.log(err)
+    }
+  })
+}

+ 75 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/devtools.js

@@ -0,0 +1,75 @@
+// this script is called when the VueDevtools panel is activated.
+
+import { initDevTools } from 'src/devtools'
+import Bridge from 'src/bridge'
+
+initDevTools({
+
+  /**
+   * Inject backend, connect to background, and send back the bridge.
+   *
+   * @param {Function} cb
+   */
+
+  connect (cb) {
+    // 1. inject backend code into page
+    injectScript(chrome.runtime.getURL('build/backend.js'), () => {
+      // 2. connect to background to setup proxy
+      const port = chrome.runtime.connect({
+        name: '' + chrome.devtools.inspectedWindow.tabId
+      })
+      let disconnected = false
+      port.onDisconnect.addListener(() => {
+        disconnected = true
+      })
+
+      const bridge = new Bridge({
+        listen (fn) {
+          port.onMessage.addListener(fn)
+        },
+        send (data) {
+          if (!disconnected) {
+            port.postMessage(data)
+          }
+        }
+      })
+      // 3. send a proxy API to the panel
+      cb(bridge)
+    })
+  },
+
+  /**
+   * Register a function to reload the devtools app.
+   *
+   * @param {Function} reloadFn
+   */
+
+  onReload (reloadFn) {
+    chrome.devtools.network.onNavigated.addListener(reloadFn)
+  }
+})
+
+/**
+ * Inject a globally evaluated script, in the same context with the actual
+ * user app.
+ *
+ * @param {String} scriptName
+ * @param {Function} cb
+ */
+
+function injectScript (scriptName, cb) {
+  const src = `
+    (function() {
+      var script = document.constructor.prototype.createElement.call(document, 'script');
+      script.src = "${scriptName}";
+      document.documentElement.appendChild(script);
+      script.parentNode.removeChild(script);
+    })()
+  `
+  chrome.devtools.inspectedWindow.eval(src, function (res, err) {
+    if (err) {
+      console.log(err)
+    }
+    cb()
+  })
+}

+ 10 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/hook.js

@@ -0,0 +1,10 @@
+// This script is injected into every page.
+import { installHook } from 'src/backend/hook'
+
+// inject the hook
+if (document instanceof HTMLDocument) {
+  const script = document.createElement('script')
+  script.textContent = ';(' + installHook.toString() + ')(window)'
+  document.documentElement.appendChild(script)
+  script.parentNode.removeChild(script)
+}

+ 32 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/src/proxy.js

@@ -0,0 +1,32 @@
+// This is a content-script that is injected only when the devtools are
+// activated. Because it is not injected using eval, it has full privilege
+// to the chrome runtime API. It serves as a proxy between the injected
+// backend and the Vue devtools panel.
+
+const port = chrome.runtime.connect({
+  name: 'content-script'
+})
+
+port.onMessage.addListener(sendMessageToBackend)
+window.addEventListener('message', sendMessageToDevtools)
+port.onDisconnect.addListener(handleDisconnect)
+
+sendMessageToBackend('init')
+
+function sendMessageToBackend (payload) {
+  window.postMessage({
+    source: 'vue-devtools-proxy',
+    payload: payload
+  }, '*')
+}
+
+function sendMessageToDevtools (e) {
+  if (e.data && e.data.source === 'vue-devtools-backend') {
+    port.postMessage(e.data.payload)
+  }
+}
+
+function handleDisconnect () {
+  window.removeEventListener('message', sendMessageToDevtools)
+  sendMessageToBackend('shutdown')
+}

+ 21 - 0
章鱼车管家app/效果图/【批量下载】vue-devtools等/分享/vue-devtools/vue-devtools/vue-devtools/webpack.config.js

@@ -0,0 +1,21 @@
+const path = require('path')
+const createConfig = require('../createConfig')
+
+module.exports = createConfig({
+  entry: {
+    hook: './src/hook.js',
+    devtools: './src/devtools.js',
+    background: './src/background.js',
+    'devtools-background': './src/devtools-background.js',
+    backend: './src/backend.js',
+    proxy: './src/proxy.js',
+    detector: './src/detector.js'
+  },
+  output: {
+    path: path.join(__dirname, 'build'),
+    filename: '[name].js'
+  },
+  devtool: process.env.NODE_ENV !== 'production'
+    ? '#inline-source-map'
+    : false
+})

Някои файлове не бяха показани, защото твърде много файлове са промени