blob: f0db649f266e39704bd38bc5779adf12d3e38042 [file] [log] [blame]
// Copyright (c) 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @constructor
* @extends {WebInspector.StylesSidebarPane.BaseToolbarPaneWidget}
* @param {!WebInspector.ToolbarItem} toolbarItem
*/
WebInspector.ElementStatePaneWidget = function(toolbarItem)
{
WebInspector.StylesSidebarPane.BaseToolbarPaneWidget.call(this, toolbarItem);
this.element.className = "styles-element-state-pane";
this.element.createChild("div").createTextChild(WebInspector.UIString("Force element state"));
var table = createElementWithClass("table", "source-code");
var inputs = [];
this._inputs = inputs;
/**
* @param {!Event} event
*/
function clickListener(event)
{
var node = WebInspector.context.flavor(WebInspector.DOMNode);
if (!node)
return;
WebInspector.CSSStyleModel.fromNode(node).forcePseudoState(node, event.target.state, event.target.checked);
}
/**
* @param {string} state
* @return {!Element}
*/
function createCheckbox(state)
{
var td = createElement("td");
var label = createCheckboxLabel(":" + state);
var input = label.checkboxElement;
input.state = state;
input.addEventListener("click", clickListener, false);
inputs.push(input);
td.appendChild(label);
return td;
}
var tr = table.createChild("tr");
tr.appendChild(createCheckbox.call(null, "active"));
tr.appendChild(createCheckbox.call(null, "hover"));
tr = table.createChild("tr");
tr.appendChild(createCheckbox.call(null, "focus"));
tr.appendChild(createCheckbox.call(null, "visited"));
this.element.appendChild(table);
}
WebInspector.ElementStatePaneWidget.prototype = {
/**
* @param {?WebInspector.Target} target
*/
_updateTarget: function(target)
{
if (this._target === target)
return;
if (this._target) {
var cssModel = WebInspector.CSSStyleModel.fromTarget(this._target);
cssModel.removeEventListener(WebInspector.CSSStyleModel.Events.PseudoStateForced, this._pseudoStateForced, this)
}
this._target = target;
if (target) {
var cssModel = WebInspector.CSSStyleModel.fromTarget(target);
cssModel.addEventListener(WebInspector.CSSStyleModel.Events.PseudoStateForced, this._pseudoStateForced, this)
}
},
/**
* @param {!WebInspector.Event} event
*/
_pseudoStateForced: function(event)
{
var node = /** @type{!WebInspector.DOMNode} */(event.data.node);
if (node === WebInspector.context.flavor(WebInspector.DOMNode))
this._updateInputs(node);
},
/**
* @override
* @param {?WebInspector.DOMNode} newNode
*/
onNodeChanged: function(newNode)
{
this._updateTarget(newNode? newNode.target() : null);
if (newNode)
this._updateInputs(newNode);
},
/**
* @param {!WebInspector.DOMNode} node
*/
_updateInputs: function(node)
{
var nodePseudoState = WebInspector.CSSStyleModel.fromNode(node).pseudoState(node);
var inputs = this._inputs;
for (var i = 0; i < inputs.length; ++i) {
inputs[i].disabled = !!node.pseudoType();
inputs[i].checked = nodePseudoState.indexOf(inputs[i].state) >= 0;
}
},
__proto__: WebInspector.StylesSidebarPane.BaseToolbarPaneWidget.prototype
}
/**
* @constructor
* @implements {WebInspector.ToolbarItem.Provider}
*/
WebInspector.ElementStatePaneWidget.ButtonProvider = function()
{
this._button = new WebInspector.ToolbarButton(WebInspector.UIString("Toggle Element State"), "pin-toolbar-item");
this._button.addEventListener("click", this._clicked, this);
this._view = new WebInspector.ElementStatePaneWidget(this.item());
WebInspector.context.addFlavorChangeListener(WebInspector.DOMNode, this._nodeChanged, this);
this._nodeChanged();
}
WebInspector.ElementStatePaneWidget.ButtonProvider.prototype = {
_clicked: function()
{
var stylesSidebarPane = WebInspector.ElementsPanel.instance().sidebarPanes.styles;
stylesSidebarPane.showToolbarPane(!this._view.isShowing() ? this._view : null);
},
/**
* @override
* @return {!WebInspector.ToolbarItem}
*/
item: function()
{
return this._button;
},
_nodeChanged: function()
{
var enabled = !!WebInspector.context.flavor(WebInspector.DOMNode);
this._button.setEnabled(enabled);
if (!enabled && this._button.toggled())
WebInspector.ElementsPanel.instance().sidebarPanes.styles.showToolbarPane(null);
}
}