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

Side by Side Diff: Source/devtools/front_end/elements/ElementsPanel.js

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) 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
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 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 /** 243 /**
244 * @param {!WebInspector.DOMNode} node 244 * @param {!WebInspector.DOMNode} node
245 * @param {string} pseudoClass 245 * @param {string} pseudoClass
246 * @param {boolean} enable 246 * @param {boolean} enable
247 */ 247 */
248 _setPseudoClassForNode: function(node, pseudoClass, enable) 248 _setPseudoClassForNode: function(node, pseudoClass, enable)
249 { 249 {
250 if (!node || !node.target().cssModel.forcePseudoState(node, pseudoClass, enable)) 250 if (!node || !node.target().cssModel.forcePseudoState(node, pseudoClass, enable))
251 return; 251 return;
252 252
253 this._targetToTreeOutline.get(node.target()).updateOpenCloseTags(node); 253 this._treeOutlineForNode(node).updateOpenCloseTags(node);
254 this._metricsPaneEdited(); 254 this._metricsPaneEdited();
255 this._stylesPaneEdited(); 255 this._stylesPaneEdited();
256 256
257 WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMet rics.UserAction, { 257 WebInspector.notifications.dispatchEventToListeners(WebInspector.UserMet rics.UserAction, {
258 action: WebInspector.UserMetrics.UserActionNames.ForcedElementState, 258 action: WebInspector.UserMetrics.UserActionNames.ForcedElementState,
259 selector: WebInspector.DOMPresentationUtils.fullQualifiedSelector(no de, false), 259 selector: WebInspector.DOMPresentationUtils.fullQualifiedSelector(no de, false),
260 enabled: enable, 260 enabled: enable,
261 state: pseudoClass 261 state: pseudoClass
262 }); 262 });
263 }, 263 },
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 { 447 {
448 if (event.data) 448 if (event.data)
449 this.contentElement.classList.remove("nowrap"); 449 this.contentElement.classList.remove("nowrap");
450 else 450 else
451 this.contentElement.classList.add("nowrap"); 451 this.contentElement.classList.add("nowrap");
452 452
453 var selectedNode = this.selectedDOMNode(); 453 var selectedNode = this.selectedDOMNode();
454 if (!selectedNode) 454 if (!selectedNode)
455 return; 455 return;
456 456
457 var treeOutline = this._targetToTreeOutline.get(selectedNode.target()); 457 var treeElement = this._treeElementForNode(selectedNode);
458 var treeElement = treeOutline.findTreeElement(selectedNode);
459 if (treeElement) 458 if (treeElement)
460 treeElement.updateSelection(); // Recalculate selection highlight di mensions. 459 treeElement.updateSelection(); // Recalculate selection highlight di mensions.
461 }, 460 },
462 461
463 switchToAndFocus: function(node) 462 switchToAndFocus: function(node)
464 { 463 {
465 // Reset search restore. 464 // Reset search restore.
466 this._searchableView.cancelSearch(); 465 this._searchableView.cancelSearch();
467 WebInspector.inspectorView.setCurrentPanel(this); 466 WebInspector.inspectorView.setCurrentPanel(this);
468 this.selectDOMNode(node, true); 467 this.selectDOMNode(node, true);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 } 609 }
611 610
612 if (typeof searchResult.node === "undefined") { 611 if (typeof searchResult.node === "undefined") {
613 // No data for slot, request it. 612 // No data for slot, request it.
614 searchResult.target.domModel.searchResult(searchResult.index, search Callback.bind(this)); 613 searchResult.target.domModel.searchResult(searchResult.index, search Callback.bind(this));
615 return; 614 return;
616 } 615 }
617 616
618 this._searchableView.updateCurrentMatchIndex(index); 617 this._searchableView.updateCurrentMatchIndex(index);
619 618
620 var treeOutline = this._targetToTreeOutline.get(searchResult.target); 619 var treeElement = this._treeElementForNode(searchResult.node);
621 var treeElement = treeOutline.findTreeElement(searchResult.node);
622 if (treeElement) { 620 if (treeElement) {
623 treeElement.highlightSearchResults(this._searchQuery); 621 treeElement.highlightSearchResults(this._searchQuery);
624 treeElement.reveal(); 622 treeElement.reveal();
625 var matches = treeElement.listItemElement.getElementsByClassName("hi ghlighted-search-result"); 623 var matches = treeElement.listItemElement.getElementsByClassName("hi ghlighted-search-result");
626 if (matches.length) 624 if (matches.length)
627 matches[0].scrollIntoViewIfNeeded(); 625 matches[0].scrollIntoViewIfNeeded();
628 } 626 }
629 }, 627 },
630 628
631 _hideSearchHighlights: function() 629 _hideSearchHighlights: function()
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 1184
1187 if (!treeOutline.editing()) { 1185 if (!treeOutline.editing()) {
1188 handleUndoRedo.call(this, treeOutline); 1186 handleUndoRedo.call(this, treeOutline);
1189 if (event.handled) 1187 if (event.handled)
1190 return; 1188 return;
1191 } 1189 }
1192 1190
1193 treeOutline.handleShortcut(event); 1191 treeOutline.handleShortcut(event);
1194 }, 1192 },
1195 1193
1196 handleCopyEvent: function(event) 1194 /**
1195 * @param {?WebInspector.DOMNode} node
1196 * @return {?WebInspector.ElementsTreeOutline}
1197 */
1198 _treeOutlineForNode: function(node)
1197 { 1199 {
1198 var currentFocusElement = WebInspector.currentFocusElement(); 1200 if (!node)
1199 if (currentFocusElement && WebInspector.isBeingEdited(currentFocusElemen t)) 1201 return null;
1200 return; 1202 return this._targetToTreeOutline.get(node.target()) || null;
1201
1202 // Don't prevent the normal copy if the user has a selection.
1203 if (!window.getSelection().isCollapsed)
1204 return;
1205 event.clipboardData.clearData();
1206 event.preventDefault();
1207 this.selectedDOMNode().copyNode();
1208 }, 1203 },
1209 1204
1210 /** 1205 /**
1206 * @param {!WebInspector.DOMNode} node
1207 * @return {?WebInspector.ElementsTreeElement}
1208 */
1209 _treeElementForNode: function(node)
1210 {
1211 var treeOutline = this._treeOutlineForNode(node);
1212 return /** @type {?WebInspector.ElementsTreeElement} */ (treeOutline.fin dTreeElement(node));
1213 },
1214
1215 /**
1216 * @param {!Event} event
1217 */
1218 handleCopyEvent: function(event)
1219 {
1220 var treeOutline = this._treeOutlineForNode(this.selectedDOMNode());
1221 if (treeOutline)
1222 treeOutline.handleCopyOrCutKeyboardEvent(false, event);
1223 },
1224
1225 /**
1226 * @param {!Event} event
1227 */
1228 handleCutEvent: function(event)
1229 {
1230 var treeOutline = this._treeOutlineForNode(this.selectedDOMNode());
1231 if (treeOutline)
1232 treeOutline.handleCopyOrCutKeyboardEvent(true, event);
1233 },
1234
1235 /**
1236 * @param {!Event} event
1237 */
1238 handlePasteEvent: function(event)
1239 {
1240 var treeOutline = this._treeOutlineForNode(this.selectedDOMNode());
1241 if (treeOutline)
1242 treeOutline.handlePasteKeyboardEvent(event);
1243 },
1244
1245 /**
1211 * @param {!WebInspector.DOMNode} node 1246 * @param {!WebInspector.DOMNode} node
1212 * @return {!WebInspector.DOMNode} 1247 * @return {!WebInspector.DOMNode}
1213 */ 1248 */
1214 _leaveUserAgentShadowDOM: function(node) 1249 _leaveUserAgentShadowDOM: function(node)
1215 { 1250 {
1216 var userAgentShadowRoot = node.ancestorUserAgentShadowRoot(); 1251 var userAgentShadowRoot = node.ancestorUserAgentShadowRoot();
1217 return userAgentShadowRoot ? /** @type {!WebInspector.DOMNode} */ (userA gentShadowRoot.parentNode) : node; 1252 return userAgentShadowRoot ? /** @type {!WebInspector.DOMNode} */ (userA gentShadowRoot.parentNode) : node;
1218 }, 1253 },
1219 1254
1220 /** 1255 /**
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 /** 1532 /**
1498 * @suppressReceiverCheck 1533 * @suppressReceiverCheck
1499 * @this {Element} 1534 * @this {Element}
1500 */ 1535 */
1501 function parentElement() 1536 function parentElement()
1502 { 1537 {
1503 return this.parentElement; 1538 return this.parentElement;
1504 } 1539 }
1505 } 1540 }
1506 } 1541 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698