Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Commit 04a9096

Browse files
committed
Merge pull request #1529 from jdiehl/refactor-remotefunctions
Refactor remotefunctions
2 parents 92732a7 + 04ae860 commit 04a9096

File tree

9 files changed

+305
-253
lines changed

9 files changed

+305
-253
lines changed

src/LiveDevelopment/Agents/DOMAgent.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ define(function DOMAgent(require, exports, module) {
4242

4343
var Inspector = require("LiveDevelopment/Inspector/Inspector");
4444
var RemoteAgent = require("LiveDevelopment/Agents/RemoteAgent");
45+
var EditAgent = require("LiveDevelopment/Agents/EditAgent");
4546
var DOMNode = require("LiveDevelopment/Agents/DOMNode");
4647
var DOMHelpers = require("LiveDevelopment/Agents/DOMHelpers");
4748

@@ -274,7 +275,10 @@ define(function DOMAgent(require, exports, module) {
274275
value += text;
275276
value += node.value.substr(to - node.location);
276277
node.value = value;
277-
Inspector.DOM.setNodeValue(node.nodeId, node.value);
278+
if (!EditAgent.isEditing) {
279+
// only update the DOM if the change was not caused by the edit agent
280+
Inspector.DOM.setNodeValue(node.nodeId, node.value);
281+
}
278282
} else {
279283
console.warn("Changing non-text nodes not supported.");
280284
}

src/LiveDevelopment/Agents/EditAgent.js

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ define(function EditAgent(require, exports, module) {
3939

4040
var EditorManager = require("editor/EditorManager");
4141

42+
var _editedNode;
43+
4244
/** Find changed characters
4345
* @param {string} old value
4446
* @param {string} changed value
@@ -74,28 +76,51 @@ define(function EditAgent(require, exports, module) {
7476
return { from: index, to: index + length, text: value };
7577
}
7678

77-
// Remote Event: Go to the given source node
78-
function _onRemoteEdit(event, res) {
79-
// res = {nodeId, name, value}
80-
var node = DOMAgent.nodeWithId(res.nodeId);
81-
node = node.children[0];
82-
if (!node.location) {
79+
// WebInspector Event: DOM.characterDataModified
80+
function _onCharacterDataModified(event, res) {
81+
// res = {nodeId, characterData}
82+
if (_editedNode.nodeId !== res.nodeId) {
8383
return;
8484
}
85+
8586
GotoAgent.open(DOMAgent.url);
8687
var editor = EditorManager.getCurrentFullEditor();
8788
var codeMirror = editor._codeMirror;
88-
var change = _findChangedCharacters(node.value, res.value);
89+
var change = _findChangedCharacters(_editedNode.value, res.characterData);
8990
if (change) {
90-
var from = codeMirror.posFromIndex(node.location + change.from);
91-
var to = codeMirror.posFromIndex(node.location + change.to);
91+
var from = codeMirror.posFromIndex(_editedNode.location + change.from);
92+
var to = codeMirror.posFromIndex(_editedNode.location + change.to);
93+
exports.isEditing = true;
9294
editor.document.replaceRange(change.text, from, to);
95+
exports.isEditing = false;
9396

94-
var newPos = codeMirror.posFromIndex(node.location + change.from + change.text.length);
97+
var newPos = codeMirror.posFromIndex(_editedNode.location + change.from + change.text.length);
9598
editor.setCursorPos(newPos.line, newPos.ch);
9699
}
97100
}
98101

102+
// Remote Event: Go to the given source node
103+
function _onRemoteEdit(event, res) {
104+
// res = {nodeId, name, value}
105+
106+
// detach from DOM change events
107+
if (res.value === "0") {
108+
$(Inspector.DOM).off(".EditAgent");
109+
return;
110+
}
111+
112+
// find and store the edited node
113+
var node = DOMAgent.nodeWithId(res.nodeId);
114+
node = node.children[0];
115+
if (!node.location) {
116+
return;
117+
}
118+
_editedNode = node;
119+
120+
// attach to character data modified events
121+
$(Inspector.DOM).on("characterDataModified.EditAgent", _onCharacterDataModified);
122+
}
123+
99124
/** Initialize the agent */
100125
function load() {
101126
$(RemoteAgent).on("edit.EditAgent", _onRemoteEdit);

src/LiveDevelopment/Agents/GotoAgent.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,7 @@ define(function GotoAgent(require, exports, module) {
127127
}
128128
for (i in node.events) {
129129
var trace = node.events[i];
130-
if (trace.children.length > 0) {
131-
_makeJSTarget(targets, trace.children[0].callFrames[0]);
132-
}
130+
_makeJSTarget(targets, trace.callFrames[0]);
133131
}
134132
for (i in res.matchedCSSRules.reverse()) {
135133
_makeCSSTarget(targets, res.matchedCSSRules[i]);

src/LiveDevelopment/Agents/HighlightAgent.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ define(function HighlightAgent(require, exports, module) {
4646
if (res.value === "1") {
4747
node = DOMAgent.nodeWithId(res.nodeId);
4848
}
49-
$(exports).triggerHandler("highlight", node);
49+
$(exports).triggerHandler("highlight", [node]);
5050
}
5151

5252
/** Hide in-browser highlighting */

src/LiveDevelopment/Agents/RemoteAgent.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ define(function RemoteAgent(require, exports, module) {
3737

3838
var $exports = $(exports);
3939

40+
var LiveDevelopment = require("LiveDevelopment/LiveDevelopment");
4041
var Inspector = require("LiveDevelopment/Inspector/Inspector");
4142

4243
var _load; // deferred load
@@ -48,7 +49,7 @@ define(function RemoteAgent(require, exports, module) {
4849
var request = new XMLHttpRequest();
4950
request.open("GET", "LiveDevelopment/Agents/RemoteFunctions.js");
5051
request.onload = function onLoad() {
51-
var run = "window._LD=" + request.response + "()";
52+
var run = "window._LD=" + request.response + "(" + LiveDevelopment.config.experimental + ")";
5253
Inspector.Runtime.evaluate(run, function onEvaluate(res) {
5354
console.assert(!res.wasThrown, res.result.description);
5455
_objectId = res.result.objectId;

0 commit comments

Comments
 (0)