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

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: Add visual feedback for nodes in the clipboard 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 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 } 461 }
462 462
463 if (node->isPseudoElement()) { 463 if (node->isPseudoElement()) {
464 *errorString = "Cannot edit pseudo elements"; 464 *errorString = "Cannot edit pseudo elements";
465 return 0; 465 return 0;
466 } 466 }
467 467
468 return node; 468 return node;
469 } 469 }
470 470
471 Node* InspectorDOMAgent::assertEditableChildNode(ErrorString* errorString, Eleme nt* parentElement, int nodeId)
472 {
473 Node* node = assertEditableNode(errorString, nodeId);
474 if (!node)
475 return 0;
476 if (node->parentNode() != parentElement) {
477 *errorString = "Anchor node must be child of the target element";
478 return 0;
479 }
480 return node;
481 }
482
471 Element* InspectorDOMAgent::assertEditableElement(ErrorString* errorString, int nodeId) 483 Element* InspectorDOMAgent::assertEditableElement(ErrorString* errorString, int nodeId)
472 { 484 {
473 Element* element = assertElement(errorString, nodeId); 485 Element* element = assertElement(errorString, nodeId);
474 if (!element) 486 if (!element)
475 return 0; 487 return 0;
476 488
477 if (element->isInShadowTree() && userAgentShadowRoot(element)) { 489 if (element->isInShadowTree() && userAgentShadowRoot(element)) {
478 *errorString = "Cannot edit elements from user-agent shadow trees"; 490 *errorString = "Cannot edit elements from user-agent shadow trees";
479 return 0; 491 return 0;
480 } 492 }
(...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 highlightConfig->contentOutline = parseColor(outlineColor); 1297 highlightConfig->contentOutline = parseColor(outlineColor);
1286 m_overlay->highlightNode(frame->deprecatedLocalOwner(), 0 /* eventTarget */, *highlightConfig, false); 1298 m_overlay->highlightNode(frame->deprecatedLocalOwner(), 0 /* eventTarget */, *highlightConfig, false);
1287 } 1299 }
1288 } 1300 }
1289 1301
1290 void InspectorDOMAgent::hideHighlight(ErrorString*) 1302 void InspectorDOMAgent::hideHighlight(ErrorString*)
1291 { 1303 {
1292 m_overlay->hideHighlight(); 1304 m_overlay->hideHighlight();
1293 } 1305 }
1294 1306
1295 void InspectorDOMAgent::moveTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, int* newNodeId) 1307 void InspectorDOMAgent::copyTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, const bool* const deep, int* newNodeId)
1296 { 1308 {
1297 Node* node = assertEditableNode(errorString, nodeId); 1309 Node* node = assertEditableNode(errorString, nodeId);
1298 if (!node) 1310 if (!node)
1299 return; 1311 return;
1300 1312
1301 Element* targetElement = assertEditableElement(errorString, targetElementId) ; 1313 Element* targetElement = assertEditableElement(errorString, targetElementId) ;
1302 if (!targetElement) 1314 if (!targetElement)
1303 return; 1315 return;
1304 1316
1305 Node* anchorNode = 0; 1317 Node* anchorNode = 0;
1306 if (anchorNodeId && *anchorNodeId) { 1318 if (anchorNodeId && *anchorNodeId) {
1307 anchorNode = assertEditableNode(errorString, *anchorNodeId); 1319 anchorNode = assertEditableChildNode(errorString, targetElement, *anchor NodeId);
1308 if (!anchorNode) 1320 if (!anchorNode)
1309 return; 1321 return;
1310 if (anchorNode->parentNode() != targetElement) { 1322 }
1311 *errorString = "Anchor node must be child of the target element"; 1323
1312 return; 1324 // The clone is deep by default.
1325 RefPtrWillBeRawPtr<Node> clonedNode = node->cloneNode(!deep || *deep);
1326 if (!clonedNode) {
1327 *errorString = "Failed to clone node";
1328 return;
1329 }
1330 if (!m_domEditor->insertBefore(targetElement, clonedNode, anchorNode, errorS tring))
1331 return;
1332
1333 *newNodeId = pushNodePathToFrontend(clonedNode.get());
1334 }
1335
1336 void InspectorDOMAgent::moveTo(ErrorString* errorString, int nodeId, int targetE lementId, const int* const anchorNodeId, int* newNodeId)
1337 {
1338 Node* node = assertEditableNode(errorString, nodeId);
1339 if (!node)
1340 return;
1341
1342 Element* targetElement = assertEditableElement(errorString, targetElementId) ;
1343 if (!targetElement)
1344 return;
1345
1346 Node* anchorNode = 0;
1347 if (anchorNodeId && *anchorNodeId) {
1348 if (anchorNodeId && *anchorNodeId) {
aandrey 2014/07/18 05:30:04 dup if-
apavlov 2014/07/18 09:02:07 Just to be absolutely sure :) Done.
1349 anchorNode = assertEditableChildNode(errorString, targetElement, *an chorNodeId);
1350 if (!anchorNode)
1351 return;
1313 } 1352 }
1314 } 1353 }
1315 1354
1316 if (!m_domEditor->insertBefore(targetElement, node, anchorNode, errorString) ) 1355 if (!m_domEditor->insertBefore(targetElement, node, anchorNode, errorString) )
1317 return; 1356 return;
1318 1357
1319 *newNodeId = pushNodePathToFrontend(node); 1358 *newNodeId = pushNodePathToFrontend(node);
1320 } 1359 }
1321 1360
1322 void InspectorDOMAgent::undo(ErrorString* errorString) 1361 void InspectorDOMAgent::undo(ErrorString* errorString)
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
2118 if (!m_documentNodeToIdMap->contains(m_document.get())) { 2157 if (!m_documentNodeToIdMap->contains(m_document.get())) {
2119 RefPtr<TypeBuilder::DOM::Node> root; 2158 RefPtr<TypeBuilder::DOM::Node> root;
2120 getDocument(errorString, root); 2159 getDocument(errorString, root);
2121 return errorString->isEmpty(); 2160 return errorString->isEmpty();
2122 } 2161 }
2123 return true; 2162 return true;
2124 } 2163 }
2125 2164
2126 } // namespace WebCore 2165 } // namespace WebCore
2127 2166
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698