Changeset 206008 in webkit
- Timestamp:
- Sep 15, 2016 5:56:14 PM (8 years ago)
- Location:
- trunk/Source/WebInspectorUI
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebInspectorUI/ChangeLog
r206005 r206008 1 2016-09-15 Devin Rousso <dcrousso+webkit@gmail.com> 2 3 Web Inspector: support drag and drop of CSS classes and ids onto DOM nodes 4 https://bugs.webkit.org/show_bug.cgi?id=16529 5 6 Reviewed by Joseph Pecoraro. 7 8 * UserInterface/Models/DOMNode.js: 9 (WebInspector.DOMNode.prototype.toggleClass.resolvedNode.inspectedPage_node_toggleClass): 10 (WebInspector.DOMNode.prototype.toggleClass.resolvedNode): 11 (WebInspector.DOMNode.prototype.toggleClass): 12 Moved from WebInspector.CSSStyleDetailsSidebarPanel.prototype._toggleClass. 13 14 * UserInterface/Views/CSSStyleDetailsSidebarPanel.css: 15 (.sidebar > .panel.details.css-style > .content ~ :matches(.options-container, .class-list-container)): 16 Added z-index to fix overlapping with selector origin. 17 18 * UserInterface/Views/CSSStyleDetailsSidebarPanel.js: 19 (WebInspector.CSSStyleDetailsSidebarPanel): 20 (WebInspector.CSSStyleDetailsSidebarPanel.prototype.computedStyleDetailsPanelShowProperty): 21 (WebInspector.CSSStyleDetailsSidebarPanel.prototype.initialLayout): 22 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._switchPanels): 23 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._classToggleButtonClicked): 24 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._addClassInputBlur): 25 Added a setting for auto-expanding the Classes toggle list based on the previous state. 26 Also renamed the existing _lastSelectedSectionSetting to _lastSelectedPanelSetting since the 27 setting doesn't have anything to do with the last selected section. 28 29 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._createToggleForClassName): 30 (WebInspector.CSSStyleDetailsSidebarPanel.ToggledClassesDragType): 31 Added functionality to allow dragging of a className toggle's text (not the checkbox) by 32 using a custom type, preventing the value from being dropped anywhere except the DOM tree. 33 34 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._createToggleForClassName.classNameToggleChanged): 35 Restructured to use arrow function to avoid function binding. 36 37 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._toggleClass.resolvedNode.toggleClass): Deleted. 38 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._toggleClass.resolvedNode): Deleted. 39 (WebInspector.CSSStyleDetailsSidebarPanel.prototype._toggleClass): Deleted. 40 41 * UserInterface/Views/DOMTreeOutline.js: 42 (WebInspector.DOMTreeOutline.prototype._ondragover): 43 (WebInspector.DOMTreeOutline.prototype._ondrop.callback): 44 (WebInspector.DOMTreeOutline.prototype._ondrop): 45 Allow dragging when the dataTransfer object contains the type specified by 46 WebInspector.CSSStyleDetailsSidebarPanel.ToggledClassesDragType. The value for that type 47 will be added to the dropped element's classList. 48 1 49 2016-09-15 Matt Baker <mattbaker@apple.com> 2 50 -
trunk/Source/WebInspectorUI/UserInterface/Models/DOMNode.js
r205426 r206008 409 409 } 410 410 DOMAgent.removeAttribute(this.id, name, mycallback.bind(this)); 411 } 412 413 toggleClass(className, flag) 414 { 415 if (!className || !className.length) 416 return; 417 418 if (this.isPseudoElement()) { 419 this.parentNode.toggleClass(className, flag); 420 return; 421 } 422 423 if (this.nodeType() !== Node.ELEMENT_NODE) 424 return; 425 426 function resolvedNode(object) 427 { 428 if (!object) 429 return; 430 431 function inspectedPage_node_toggleClass(className, flag) 432 { 433 this.classList.toggle(className, flag); 434 } 435 436 object.callFunction(inspectedPage_node_toggleClass, [className, flag]); 437 object.release(); 438 } 439 440 WebInspector.RemoteObject.resolveNode(this, "", resolvedNode); 411 441 } 412 442 -
trunk/Source/WebInspectorUI/UserInterface/Views/CSSStyleDetailsSidebarPanel.css
r204496 r206008 70 70 align-items: center; 71 71 position: absolute; 72 z-index: 1; 72 73 width: 100%; 73 74 background-color: white; -
trunk/Source/WebInspectorUI/UserInterface/Views/CSSStyleDetailsSidebarPanel.js
r203253 r206008 38 38 this._panelNavigationInfo = [this._computedStyleDetailsPanel.navigationInfo, this._rulesStyleDetailsPanel.navigationInfo, this._visualStyleDetailsPanel.navigationInfo]; 39 39 40 this._lastSelectedSectionSetting = new WebInspector.Setting("last-selected-style-details-panel", this._rulesStyleDetailsPanel.navigationInfo.identifier); 41 42 this._initiallySelectedPanel = this._panelMatchingIdentifier(this._lastSelectedSectionSetting.value) || this._rulesStyleDetailsPanel; 40 this._lastSelectedPanelSetting = new WebInspector.Setting("last-selected-style-details-panel", this._rulesStyleDetailsPanel.navigationInfo.identifier); 41 this._classListContainerToggledSetting = new WebInspector.Setting("class-list-container-toggled", false); 42 43 this._initiallySelectedPanel = this._panelMatchingIdentifier(this._lastSelectedPanelSetting.value) || this._rulesStyleDetailsPanel; 43 44 44 45 this._navigationItem = new WebInspector.ScopeRadioButtonNavigationItem(this.identifier, this.displayName, this._panelNavigationInfo, this._initiallySelectedPanel.navigationInfo); … … 78 79 this._switchPanels(this._rulesStyleDetailsPanel); 79 80 80 this._navigationItem.selectedItemIdentifier = this._lastSelected SectionSetting.value;81 this._navigationItem.selectedItemIdentifier = this._lastSelectedPanelSetting.value; 81 82 } 82 83 … … 202 203 WebInspector.cssStyleManager.addEventListener(WebInspector.CSSStyleManager.Event.StyleSheetAdded, this._styleSheetAddedOrRemoved, this); 203 204 WebInspector.cssStyleManager.addEventListener(WebInspector.CSSStyleManager.Event.StyleSheetRemoved, this._styleSheetAddedOrRemoved, this); 205 206 if (this._classListContainerToggledSetting.value) 207 this._classToggleButtonClicked(); 204 208 } 205 209 … … 279 283 this._selectedPanel.shown(); 280 284 281 this._lastSelected SectionSetting.value = selectedPanel.navigationInfo.identifier;285 this._lastSelectedPanelSetting.value = selectedPanel.navigationInfo.identifier; 282 286 } 283 287 … … 330 334 this._classToggleButton.classList.toggle("selected"); 331 335 this._classListContainer.hidden = !this._classListContainer.hidden; 336 this._classListContainerToggledSetting.value = !this._classListContainer.hidden; 332 337 if (this._classListContainer.hidden) 333 338 return; … … 352 357 _addClassInputBlur(event) 353 358 { 354 this. _toggleClass.call(this,this._addClassInput.value, true);359 this.domNode.toggleClass(this._addClassInput.value, true); 355 360 this._addClassContainer.classList.remove("active"); 356 361 this._addClassInput.value = null; … … 406 411 let classNameTitle = classNameContainer.createChild("span"); 407 412 classNameTitle.textContent = className; 408 409 function classNameToggleChanged(event) { 410 this._toggleClass.call(this, className, classNameToggle.checked); 413 classNameTitle.draggable = true; 414 classNameTitle.addEventListener("dragstart", (event) => { 415 event.dataTransfer.setData(WebInspector.CSSStyleDetailsSidebarPanel.ToggledClassesDragType, className); 416 event.dataTransfer.effectAllowed = "copy"; 417 }); 418 419 let classNameToggleChanged = (event) => { 420 this.domNode.toggleClass(className, classNameToggle.checked); 411 421 classToggledMap.set(className, classNameToggle.checked); 412 } 413 414 classNameToggle.addEventListener("click", classNameToggleChanged .bind(this));422 }; 423 424 classNameToggle.addEventListener("click", classNameToggleChanged); 415 425 classNameTitle.addEventListener("click", (event) => { 416 426 classNameToggle.checked = !classNameToggle.checked; 417 classNameToggleChanged .call(this);427 classNameToggleChanged(); 418 428 }); 419 429 420 430 this._classListContainer.appendChild(classNameContainer); 421 }422 423 _toggleClass(className, flag)424 {425 if (!className || !className.length)426 return;427 428 let effectiveNode = this.domNode;429 if (effectiveNode && effectiveNode.isPseudoElement())430 effectiveNode = effectiveNode.parentNode;431 432 console.assert(effectiveNode);433 if (!effectiveNode)434 return;435 436 if (effectiveNode.nodeType() !== Node.ELEMENT_NODE)437 return;438 439 function resolvedNode(object)440 {441 if (!object)442 return;443 444 function toggleClass(className, flag)445 {446 this.classList.toggle(className, flag);447 }448 449 object.callFunction(toggleClass, [className, flag]);450 object.release();451 }452 453 WebInspector.RemoteObject.resolveNode(effectiveNode, "", resolvedNode);454 431 } 455 432 … … 475 452 476 453 WebInspector.CSSStyleDetailsSidebarPanel.ToggledClassesSymbol = Symbol("css-style-details-sidebar-panel-toggled-classes-symbol"); 454 WebInspector.CSSStyleDetailsSidebarPanel.ToggledClassesDragType = "text/classname"; -
trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js
r205425 r206008 388 388 _ondragover(event) 389 389 { 390 if (event.dataTransfer.types.includes(WebInspector.CSSStyleDetailsSidebarPanel.ToggledClassesDragType)) { 391 event.preventDefault(); 392 event.dataTransfer.dropEffect = "copy"; 393 return false; 394 } 395 390 396 if (!this._nodeBeingDragged) 391 397 return false; 392 398 393 vartreeElement = this._treeElementFromEvent(event);399 let treeElement = this._treeElementFromEvent(event); 394 400 if (!this._isValidDragSourceOrTarget(treeElement)) 395 401 return false; 396 402 397 varnode = treeElement.representedObject;403 let node = treeElement.representedObject; 398 404 while (node) { 399 405 if (node === this._nodeBeingDragged) … … 448 454 } 449 455 450 vartreeElement = this._treeElementFromEvent(event);456 let treeElement = this._treeElementFromEvent(event); 451 457 if (this._nodeBeingDragged && treeElement) { 452 var parentNode;453 var anchorNode;458 let parentNode = null; 459 let anchorNode = null; 454 460 455 461 if (treeElement._elementCloseTag) { … … 457 463 parentNode = treeElement.representedObject; 458 464 } else { 459 vardragTargetNode = treeElement.representedObject;465 let dragTargetNode = treeElement.representedObject; 460 466 parentNode = dragTargetNode.parentNode; 461 467 anchorNode = dragTargetNode; … … 463 469 464 470 this._nodeBeingDragged.moveTo(parentNode, anchorNode, callback.bind(this)); 471 } else { 472 let className = event.dataTransfer.getData(WebInspector.CSSStyleDetailsSidebarPanel.ToggledClassesDragType); 473 if (className && treeElement) 474 treeElement.representedObject.toggleClass(className, true); 465 475 } 466 476
Note: See TracChangeset
for help on using the changeset viewer.