| |
| #--------------------------------------------------------------------------------- |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| #--------------------------------------------------------------------------------- |
| |
| IDLTools = require('../common/IDLTools') |
| Callback = require('../common/Callback') |
| Weinre = require('../common/Weinre') |
| MessageDispatcher = require('../common/MessageDispatcher') |
| Binding = require('../common/Binding') |
| IDGenerator = require('../common/IDGenerator') |
| |
| InspectorBackendImpl = require('./InspectorBackendImpl') |
| InspectorFrontendHostImpl = require('./InspectorFrontendHostImpl') |
| WeinreClientEventsImpl = require('./WeinreClientEventsImpl') |
| WeinreExtraTargetEventsImpl = require('./WeinreExtraTargetEventsImpl') |
| RemotePanel = require('./RemotePanel') |
| |
| AutoConnect = true |
| |
| Weinre.showNotImplemented() |
| |
| #------------------------------------------------------------------------------- |
| module.exports = class Client |
| |
| constructor: -> |
| |
| #--------------------------------------------------------------------------- |
| initialize: -> |
| |
| addHack_DOMNotify_setChildNodes() |
| |
| window.addEventListener 'load', Binding(this, 'onLoaded'), false |
| |
| messageDispatcher = new MessageDispatcher('../ws/client', @_getId()) |
| Weinre.messageDispatcher = messageDispatcher |
| |
| InspectorBackendImpl.setupProxies() |
| |
| Weinre.WeinreClientCommands = messageDispatcher.createProxy('WeinreClientCommands') |
| Weinre.WeinreExtraClientCommands = messageDispatcher.createProxy('WeinreExtraClientCommands') |
| |
| messageDispatcher.registerInterface 'WeinreExtraTargetEvents', new WeinreExtraTargetEventsImpl(), false |
| messageDispatcher.registerInterface 'WebInspector', WebInspector, false |
| messageDispatcher.registerInterface 'WeinreClientEvents', new WeinreClientEventsImpl(this), false |
| messageDispatcher.registerInterface 'InspectorFrontendHost', InspectorFrontendHost, false |
| |
| WebInspector.mainResource = {} |
| WebInspector.mainResource.url = location.href |
| |
| #--------------------------------------------------------------------------- |
| _getId: -> |
| hash = location.href.split('#')[1] |
| return hash if hash |
| 'anonymous' |
| |
| #--------------------------------------------------------------------------- |
| uiAvailable: -> |
| WebInspector.panels and WebInspector.panels.remote |
| |
| #--------------------------------------------------------------------------- |
| autoConnect: (value) -> |
| AutoConnect = not not value if arguments.length >= 1 |
| AutoConnect |
| |
| #--------------------------------------------------------------------------- |
| _installRemotePanel: -> |
| WebInspector.panels.remote = new RemotePanel() |
| |
| panel = WebInspector.panels.remote |
| toolbar = document.getElementById('toolbar') |
| |
| WebInspector.addPanelToolbarIcon toolbar, panel, toolbar.childNodes[1] |
| WebInspector.panelOrder.unshift WebInspector.panelOrder.pop() |
| WebInspector.currentPanel = panel |
| |
| toolButtonsToHide = [ 'scripts' ] |
| for toolButtonToHide in toolButtonsToHide |
| continue unless WebInspector.panels[toolButtonToHide] |
| continue unless WebInspector.panels[toolButtonToHide].toolbarItem |
| |
| WebInspector.panels[toolButtonToHide].toolbarItem.style.display = 'none' |
| |
| button = document.getElementById('dock-status-bar-item') |
| button.style.display = 'none' if button |
| |
| #--------------------------------------------------------------------------- |
| onLoaded: -> |
| Weinre.WeinreClientCommands.registerClient Binding(this, @cb_registerClient) |
| |
| @_installRemotePanel() |
| |
| #--------------------------------------------------------------------------- |
| cb_registerClient: (clientDescription) -> |
| Weinre.clientDescription = clientDescription |
| |
| if @uiAvailable() |
| WebInspector.panels.remote.setCurrentClient clientDescription.channel |
| WebInspector.panels.remote.afterInitialConnection() |
| |
| Weinre.messageDispatcher.getWebSocket().addEventListener 'close', Binding(this, @cb_webSocketClosed) |
| |
| #--------------------------------------------------------------------------- |
| cb_webSocketClosed: -> |
| |
| setTimeout (-> |
| WebInspector.panels.remote.connectionClosed() |
| WebInspector.currentPanel = WebInspector.panels.remote |
| ), 1000 |
| |
| #--------------------------------------------------------------------------- |
| @main: -> |
| Weinre.client = new Client() |
| Weinre.client.initialize() |
| |
| window.installWebInspectorAPIsource = installWebInspectorAPIsource |
| |
| |
| #------------------------------------------------------------------------------- |
| old_DOMNotify_setChildNodes = null |
| |
| #------------------------------------------------------------------------------- |
| new_DOMNotify_setChildNodes = (parentId, payloads) -> |
| domNode = this._domAgent._idToDOMNode[parentId] |
| |
| if domNode.children |
| if domNode.children.length > 0 |
| return |
| |
| old_DOMNotify_setChildNodes.call(this, parentId, payloads) |
| |
| #------------------------------------------------------------------------------- |
| addHack_DOMNotify_setChildNodes = -> |
| old_DOMNotify_setChildNodes = WebInspector.DOMDispatcher::setChildNodes |
| |
| WebInspector.DOMDispatcher::setChildNodes = new_DOMNotify_setChildNodes |
| |
| #------------------------------------------------------------------------------- |
| installWebInspectorAPIsource = () -> |
| return if 'webInspector' of window |
| |
| extensionAPI = window.parent.InspectorFrontendHost.getExtensionAPI() |
| extensionAPI = extensionAPI.replace('location.hostname + location.port', "location.hostname + ':' + location.port") |
| |
| id = IDGenerator.next() |
| |
| console.log "installing webInspector with injectedScriptId: #{id}" |
| |
| extensionAPI += "(null, null, #{id})" |
| extensionAPI |
| |
| #------------------------------------------------------------------------------- |
| require('../common/MethodNamer').setNamesForClass(module.exports) |