Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: Source/core/inspector/InspectorDOMAgent.cpp

Issue 397303002: DevTools: [Elements] Implement shortcut-based node cut-copy-pasting (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address comments Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * Copyright (C) 2009 Joseph Pecoraro 4 * Copyright (C) 2009 Joseph Pecoraro
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 9 *
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 } 463 }
464 464
465 if (node->isPseudoElement()) { 465 if (node->isPseudoElement()) {
466 *errorString = "Cannot edit pseudo elements"; 466 *errorString = "Cannot edit pseudo elements";
467 return 0; 467 return 0;
468 } 468 }
469 469
470 return node; 470 return node;
471 } 471 }
472 472
473 Node* InspectorDOMAgent::assertEditableChildNode(ErrorString* errorString, Eleme nt* parentElement, int nodeId)
474 {
475 Node* node = assertEditableNode(errorString, nodeId);
476 if (!node)
477 return 0;
478 if (node->parentNode() != parentElement) {
479 *errorString = "Anchor node must be child of the target element";
480 return 0;
481 }
482 return node;
483 }
484
473 Element* InspectorDOMAgent::assertEditableElement(ErrorString* errorString, int nodeId) 485 Element* InspectorDOMAgent::assertEditableElement(ErrorString* errorString, int nodeId)
474 { 486 {
475 Element* element = assertElement(errorString, nodeId); 487 Element* element = assertElement(errorString, nodeId);
476 if (!element) 488 if (!element)
477 return 0; 489 return 0;
478 490
479 if (element->isInShadowTree() && userAgentShadowRoot(element)) { 491 if (element->isInShadowTree() && userAgentShadowRoot(element)) {
480 *errorString = "Cannot edit elements from user-agent shadow trees"; 492 *errorString = "Cannot edit elements from user-agent shadow trees";
481 return 0; 493 return 0;
482 } 494 }
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 highlightConfig->contentOutline = parseColor(outlineColor); 1299 highlightConfig->contentOutline = parseColor(outlineColor);
1288 m_overlay->highlightNode(frame->deprecatedLocalOwner(), 0 /* eventTarget */, *highlightConfig, false); 1300 m_overlay->highlightNode(frame->deprecatedLocalOwner(), 0 /* eventTarget */, *highlightConfig, false);
1289 } 1301 }
1290 } 1302 }
1291 1303
1292 void InspectorDOMAgent::hideHighlight(ErrorString*) 1304 void InspectorDOMAgent::hideHighlight(ErrorString*)
1293 { 1305 {
1294 m_overlay->hideHighlight(); 1306 m_overlay->hideHighlight();
1295 } 1307 }
1296 1308
1297 void InspectorDOMAgent::moveTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, int* newNodeId) 1309 void InspectorDOMAgent::copyTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, int* newNodeId)
1298 { 1310 {
1299 Node* node = assertEditableNode(errorString, nodeId); 1311 Node* node = assertEditableNode(errorString, nodeId);
1300 if (!node) 1312 if (!node)
1301 return; 1313 return;
1302 1314
1303 Element* targetElement = assertEditableElement(errorString, targetElementId) ; 1315 Element* targetElement = assertEditableElement(errorString, targetElementId) ;
1304 if (!targetElement) 1316 if (!targetElement)
1305 return; 1317 return;
1306 1318
1307 Node* anchorNode = 0; 1319 Node* anchorNode = 0;
1308 if (anchorNodeId && *anchorNodeId) { 1320 if (anchorNodeId && *anchorNodeId) {
1309 anchorNode = assertEditableNode(errorString, *anchorNodeId); 1321 anchorNode = assertEditableChildNode(errorString, targetElement, *anchor NodeId);
1310 if (!anchorNode) 1322 if (!anchorNode)
1311 return; 1323 return;
1312 if (anchorNode->parentNode() != targetElement) { 1324 }
1313 *errorString = "Anchor node must be child of the target element"; 1325
1326 // The clone is deep by default.
1327 RefPtrWillBeRawPtr<Node> clonedNode = node->cloneNode(true);
1328 if (!clonedNode) {
1329 *errorString = "Failed to clone node";
1330 return;
1331 }
1332 if (!m_domEditor->insertBefore(targetElement, clonedNode, anchorNode, errorS tring))
1333 return;
1334
1335 *newNodeId = pushNodePathToFrontend(clonedNode.get());
1336 }
1337
1338 void InspectorDOMAgent::moveTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, int* newNodeId)
1339 {
1340 Node* node = assertEditableNode(errorString, nodeId);
1341 if (!node)
1342 return;
1343
1344 Element* targetElement = assertEditableElement(errorString, targetElementId) ;
1345 if (!targetElement)
1346 return;
1347
1348 Node* current = targetElement;
1349 while (current) {
1350 if (current == node) {
1351 *errorString = "Unable to move node into self or descendant";
1314 return; 1352 return;
1315 } 1353 }
1354 current = current->parentNode();
1355 }
1356
1357 Node* anchorNode = 0;
1358 if (anchorNodeId && *anchorNodeId) {
1359 anchorNode = assertEditableChildNode(errorString, targetElement, *anchor NodeId);
1360 if (!anchorNode)
1361 return;
1316 } 1362 }
1317 1363
1318 if (!m_domEditor->insertBefore(targetElement, node, anchorNode, errorString) ) 1364 if (!m_domEditor->insertBefore(targetElement, node, anchorNode, errorString) )
1319 return; 1365 return;
1320 1366
1321 *newNodeId = pushNodePathToFrontend(node); 1367 *newNodeId = pushNodePathToFrontend(node);
1322 } 1368 }
1323 1369
1324 void InspectorDOMAgent::undo(ErrorString* errorString) 1370 void InspectorDOMAgent::undo(ErrorString* errorString)
1325 { 1371 {
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
2138 visitor->trace(m_searchResults); 2184 visitor->trace(m_searchResults);
2139 #endif 2185 #endif
2140 visitor->trace(m_history); 2186 visitor->trace(m_history);
2141 visitor->trace(m_domEditor); 2187 visitor->trace(m_domEditor);
2142 visitor->trace(m_listener); 2188 visitor->trace(m_listener);
2143 InspectorBaseAgent::trace(visitor); 2189 InspectorBaseAgent::trace(visitor);
2144 } 2190 }
2145 2191
2146 } // namespace blink 2192 } // namespace blink
2147 2193
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698