This commit is contained in:
Tim Taubert 2013-02-20 15:37:23 +01:00
Родитель 2d972ff70c 0c068e6bd5
Коммит 203c7ebb16
39 изменённых файлов: 806 добавлений и 1333 удалений

Просмотреть файл

@ -956,7 +956,7 @@
<toolbarpalette id="BrowserToolbarPalette">
# Update primaryToolbarButtons in browser/themes/browserShared.inc when adding
# Update primaryToolbarButtons in browser/themes/shared/browser.inc when adding
# or removing default items with the toolbarbutton-1 class.
<toolbarbutton id="print-button" class="toolbarbutton-1 chromeclass-toolbar-additional"

Просмотреть файл

@ -221,11 +221,11 @@ let SessionFileInternal = {
return TaskUtils.spawn(function task() {
try {
yield OS.File.copy(self.path, self.backupPath);
} catch (ex if self._isNoSuchFile(ex)) {
// Ignore exceptions about non-existent files.
} catch (ex) {
if (!self._isNoSuchFile(ex)) {
Cu.reportError("Could not backup session state file: " + ex);
throw ex;
}
Cu.reportError("Could not backup session state file: " + ex);
throw ex;
}
});
},
@ -235,12 +235,17 @@ let SessionFileInternal = {
return TaskUtils.spawn(function task() {
try {
yield OS.File.remove(self.path);
} catch (ex if self._isNoSuchFile(ex)) {
// Ignore exceptions about non-existent files.
} catch (ex) {
Cu.reportError("Could not remove session state file: " + ex);
throw ex;
}
try {
yield OS.File.remove(self.backupPath);
} catch (ex if self._isNoSuchFile(ex)) {
// Ignore exceptions about non-existent files.
} catch (ex) {
Cu.reportError("Could not remove session state backup file: " + ex);
throw ex;

Просмотреть файл

@ -1,4 +1,5 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<meta charset="utf-8">
<title>Test for bug 248970</title>
<h3>Text Fields</h3>

Просмотреть файл

@ -1,4 +1,5 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<meta charset="utf-8">
<title>Test for bug 339445</title>
storageTestItem = <span id="storageTestItem">FAIL</span>

Просмотреть файл

@ -1,6 +1,7 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
// generate an enormous random number...
var r = Math.floor(Math.random() * Math.pow(2, 62)).toString();

Просмотреть файл

@ -1,4 +1,5 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Testcase for bug 447951</title>
<a href="#end">click me</a>

Просмотреть файл

@ -4,7 +4,7 @@
<title>Test for bug 459906</title>
<body>
<iframe src="data:text/html,not_on_localhost"></iframe>
<iframe src="data:text/html;charset=utf-8,not_on_localhost"></iframe>
<iframe></iframe>
<script type="application/javascript">

Просмотреть файл

@ -4,7 +4,7 @@
<title>Test for bug 461743</title>
<body>
<iframe src="data:text/html,empty"></iframe>
<iframe src="data:text/html;charset=utf-8,empty"></iframe>
<iframe></iframe>
<script type="application/javascript">

Просмотреть файл

@ -13,9 +13,9 @@ function test() {
let doneURL = "done";
let mainURL = testURL;
let frame1URL = "data:text/html,<input%20id='original'>";
let frame1URL = "data:text/html;charset=utf-8,<input%20id='original'>";
let frame2URL = rootDir + "browser_463205_helper.html";
let frame3URL = "data:text/html,mark2";
let frame3URL = "data:text/html;charset=utf-8,mark2";
let frameCount = 0;
@ -68,7 +68,7 @@ function test() {
frame1URL = "http://mochi.test:8888/browser/" +
"browser/components/sessionstore/test/browser_463205_helper.html";
frame2URL = rootDir + "browser_463205_helper.html";
frame3URL = "data:text/html,mark2";
frame3URL = "data:text/html;charset=utf-8,mark2";
frameCount = 0;

Просмотреть файл

@ -1,4 +1,5 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for bug 463205 (cross domain)</title>
<input id="original" value="preserve me">

Просмотреть файл

@ -1,17 +1,18 @@
<!-- Testcase originally by <moz_bug_r_a4@yahoo.com> -->
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for bug 463205</title>
<body onload="onLoad()">
<iframe src="data:text/html,<input%20id='original'>"></iframe>
<iframe src="data:text/html;charset=utf-8,<input%20id='original'>"></iframe>
<iframe src="browser_463205_helper.html"></iframe>
<iframe src="data:text/html,mark1"></iframe>
<iframe src="data:text/html;charset=utf-8,mark1"></iframe>
<script type="application/javascript">
function onLoad() {
if (frames[2].document.location.href == "data:text/html,mark1") {
frames[2].document.location = "data:text/html,mark2";
if (frames[2].document.location.href == "data:text/html;charset-utf-8,mark1") {
frames[2].document.location = "data:text/html;charset=utf-8,mark2";
}
else {
frames[1].document.location.hash = "#original";

Просмотреть файл

@ -1,10 +1,11 @@
<!-- Testcase originally by <moz_bug_r_a4@yahoo.com> -->
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for bug 463206</title>
<iframe src="data:text/html,<iframe></iframe><iframe%20src='data:text/html,<input%2520id=%2522in1%2522>'></iframe>"></iframe>
<iframe src="data:text/html,<input%20id='out1'><input%20id='out2'><iframe%20src='data:text/html,<input%2520id=%2522in1%2522>'>"></iframe>
<iframe src="data:text/html;charset=utf-8,<iframe></iframe><iframe%20src='data:text/html;charset=utf-8,<input%2520id=%2522in1%2522>'></iframe>"></iframe>
<iframe src="data:text/html;charset=utf-8,<input%20id='out1'><input%20id='out2'><iframe%20src='data:text/html;charset=utf-8,<input%2520id=%2522in1%2522>'>"></iframe>
<input id="out1">
<input name="1|#out2">

Просмотреть файл

@ -15,7 +15,7 @@
return;
firstPass = frames[1].location.href == "about:blank";
if (firstPass) {
frames[0].location = 'data:text/html,<body onload="if (parent.firstPass) parent.step();"><input id="x" oninput="parent.xss()">XXX</body>';
frames[0].location = 'data:text/html;charset=utf-8,<body onload="if (parent.firstPass) parent.step();"><input id="x" oninput="parent.xss()">XXX</body>';
}
frames[1].location = targetUrl;
}

Просмотреть файл

@ -16,8 +16,8 @@
return;
firstPass = frames[2].location.href == "about:blank";
if (firstPass) {
frames[0].location = 'data:text/html,<body onload="parent.step()">a</body>';
frames[1].location = 'data:text/html,<body onload="document.designMode=\'on\';">XXX</body>';
frames[0].location = 'data:text/html;charset=utf-8,<body onload="parent.step()">a</body>';
frames[1].location = 'data:text/html;charset=utf-8,<body onload="document.designMode=\'on\';">XXX</body>';
}
frames[2].location = targetUrl;
}

Просмотреть файл

@ -1,6 +1,7 @@
<!-- Testcase originally by <moz_bug_r_a4@yahoo.com> -->
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for bug 466937</title>
<input id="thief" value="/home/user/secret">

Просмотреть файл

@ -33,5 +33,5 @@ function test() {
}, true);
}, true);
browser.loadURI("data:text/html,<body style='width: 100000px; height: 100000px;'><p>top</p></body>");
browser.loadURI("data:text/html;charset=utf-8,<body style='width: 100000px; height: 100000px;'><p>top</p></body>");
}

Просмотреть файл

@ -33,7 +33,7 @@ function test() {
}
// test content URL
const TEST_URL = "data:text/html,"
const TEST_URL = "data:text/html;charset=utf-8,"
+ "<body style='width: 100000px; height: 100000px;'><p>top</p></body>"
// preferences that we use

Просмотреть файл

@ -1,7 +1,7 @@
function test() {
waitForExplicitFinish();
var tab1 = gBrowser.addTab("data:text/plain,foo");
var tab1 = gBrowser.addTab("data:text/plain;charset=utf-8,foo");
gBrowser.pinTab(tab1);
tab1.linkedBrowser.addEventListener("load", function () {

Просмотреть файл

@ -3,6 +3,7 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function boom()
@ -18,7 +19,7 @@ function boom()
</script>
</head>
<body onload="boom();">
<iframe src="data:text/html,1" id="f"></iframe>
<iframe src="data:text/html;charset=utf-8,1" id="f"></iframe>
</body>
</html>

Просмотреть файл

@ -2,7 +2,7 @@
http://creativecommons.org/publicdomain/zero/1.0/ */
let tabState = {
entries: [{url: "data:text/html,<input%20id='foo'>", formdata: { id: { "foo": "bar" } } }]
entries: [{url: "data:text/html;charset=utf-8,<input%20id='foo'>", formdata: { id: { "foo": "bar" } } }]
};
function test() {

Просмотреть файл

@ -1,4 +1,5 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for form restore events (originally bug 476161)</title>
<script>

Просмотреть файл

@ -18,7 +18,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "Toolbox",
XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory",
"resource:///modules/devtools/Target.jsm");
const FORBIDDEN_IDS = new Set("toolbox", "");
const FORBIDDEN_IDS = new Set(["toolbox", ""]);
/**
* DevTools is a class that represents a set of developer tools, it holds a
@ -388,7 +388,7 @@ let gDevToolsBrowser = {
doc.getElementById("mainCommandSet").appendChild(elements.cmd);
if (elements.key) {
this.attachKeybindingsToBrowser(doc, elements.keys);
this.attachKeybindingsToBrowser(doc, elements.key);
}
doc.getElementById("mainBroadcasterSet").appendChild(elements.bc);

Просмотреть файл

@ -140,11 +140,13 @@ Highlighter.prototype = {
if (id != "inspector") {
this.chromeWin.clearTimeout(this.pageEventsMuter);
this.detachMouseListeners();
this.disabled = true;
this.hide();
} else {
if (!this.locked) {
this.attachMouseListeners();
}
this.disabled = false;
this.show();
}
}.bind(this);
@ -206,6 +208,9 @@ Highlighter.prototype = {
this.selection.isElementNode();
if (canHighlightNode) {
if (this.selection.reason != "navigateaway") {
this.disabled = false;
}
this.show();
this.updateInfobar();
this.invalidateSize();
@ -214,6 +219,7 @@ Highlighter.prototype = {
LayoutHelpers.scrollIntoViewIfNeeded(this.selection.node);
}
} else {
this.disabled = true;
this.hide();
}
},
@ -246,7 +252,7 @@ Highlighter.prototype = {
* Show the highlighter if it has been hidden.
*/
show: function() {
if (!this.hidden) return;
if (!this.hidden || this.disabled) return;
this.showOutline();
this.showInfobar();
this.computeZoomFactor();

Просмотреть файл

@ -242,8 +242,12 @@ InspectorPanel.prototype = {
function onDOMReady() {
newWindow.removeEventListener("DOMContentLoaded", onDOMReady, true);
if (self._destroyed) {
return;
}
if (!self.selection.node) {
self.selection.setNode(newWindow.document.documentElement);
self.selection.setNode(newWindow.document.documentElement, "navigateaway");
}
self._initMarkup();
}

Просмотреть файл

@ -38,6 +38,8 @@ _BROWSER_FILES = \
browser_inspector_bug_817558_delete_node.js \
browser_inspector_bug_650804_search.js \
browser_inspector_bug_650804_search.html \
browser_inspector_bug_840156_destroy_after_navigation.js \
browser_inspector_bug_835722_infobar_reappears.js \
head.js \
helpers.js \
$(NULL)

Просмотреть файл

@ -0,0 +1,92 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
function test() {
let inspector;
function startLocationTests() {
openInspector(runInspectorTests);
}
function runInspectorTests(aInspector) {
inspector = aInspector;
executeSoon(function() {
inspector.selection.once("new-node", onNewSelection);
info("selecting the DOCTYPE node");
inspector.selection.setNode(content.document.doctype, "test");
});
}
function onNewSelection() {
is(inspector.highlighter.isHidden(), true,
"The infobar should be hidden now on selecting a non element node.");
inspector.sidebar.select("ruleview");
let ruleView = inspector.sidebar.getTab("ruleview");
ruleView.addEventListener("mouseover", function onMouseOver() {
ruleView.removeEventListener("mouseover", onMouseOver, false);
is(inspector.highlighter.isHidden(), true,
"The infobar was hidden so mouseover on the rules view did nothing");
mouseOutAndContinue();
}, false);
EventUtils.synthesizeMouse(ruleView, 10, 50, {type: "mouseover"},
ruleView.ownerDocument.defaultView);
}
function mouseOutAndContinue() {
let ruleView = inspector.sidebar.getTab("ruleview");
ruleView.addEventListener("mouseout", function onMouseOut() {
ruleView.removeEventListener("mouseout", onMouseOut, false);
is(inspector.highlighter.isHidden(), true,
"The infobar should not be visible after we mouseout of rules view");
switchToWebConsole();
}, false);
EventUtils.synthesizeMouse(ruleView, 10, 10, {type: "mousemove"},
ruleView.ownerDocument.defaultView);
EventUtils.synthesizeMouse(ruleView, -10, -10, {type: "mouseout"},
ruleView.ownerDocument.defaultView);
}
function switchToWebConsole() {
inspector.selection.once("new-node", function() {
is(inspector.highlighter.isHidden(), false,
"The infobar should be visible after we select a div.");
gDevTools.showToolbox(inspector.target, "webconsole").then(function() {
is(inspector.highlighter.isHidden(), true,
"The infobar should not be visible after we switched to webconsole");
reloadAndWait();
});
});
inspector.selection.setNode(content.document.querySelector("div"), "test");
}
function reloadAndWait() {
gBrowser.selectedBrowser.addEventListener("load", function onBrowserLoad() {
gBrowser.selectedBrowser.removeEventListener("load", onBrowserLoad, true);
waitForFocus(testAfterReload, content);
}, true);
content.location.reload();
}
function testAfterReload() {
is(inspector.highlighter.isHidden(), true,
"The infobar should not be visible after we reload with webconsole shown");
testEnd();
}
function testEnd() {
gBrowser.removeCurrentTab();
executeSoon(finish);
}
waitForExplicitFinish();
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.selectedBrowser.addEventListener("load", function onBrowserLoad() {
gBrowser.selectedBrowser.removeEventListener("load", onBrowserLoad, true);
waitForFocus(startLocationTests, content);
}, true);
content.location = "data:text/html,<!DOCTYPE html><div>Infobar should not " +
"reappear</div><p>init</p>";
}

Просмотреть файл

@ -0,0 +1,61 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
let temp = {};
Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", temp);
let Promise = temp.Promise;
temp = {};
Cu.import("resource:///modules/devtools/Toolbox.jsm", temp);
let Toolbox = temp.Toolbox;
temp = {};
Cu.import("resource:///modules/devtools/Target.jsm", temp);
let TargetFactory = temp.TargetFactory;
temp = null;
function test() {
waitForExplicitFinish();
const URL_1 = "data:text/plain;charset=UTF-8,abcde";
const URL_2 = "data:text/plain;charset=UTF-8,12345";
let target, toolbox;
// open tab, load URL_1, and wait for load to finish
let tab = gBrowser.selectedTab = gBrowser.addTab();
let target = TargetFactory.forTab(gBrowser.selectedTab);
let deferred = Promise.defer();
let browser = gBrowser.getBrowserForTab(tab);
function onTabLoad() {
browser.removeEventListener("load", onTabLoad, true);
deferred.resolve(null);
}
browser.addEventListener("load", onTabLoad, true);
browser.loadURI(URL_1);
// open devtools panel
deferred.promise
.then(function () gDevTools.showToolbox(target, null, Toolbox.HostType.BOTTOM))
.then(function (aToolbox) { toolbox = aToolbox; })
// select the inspector
.then(function () toolbox.selectTool("inspector"))
// navigate to URL_2
.then(function () {
let deferred = Promise.defer();
target.once("navigate", function () deferred.resolve());
browser.loadURI(URL_2);
return deferred.promise;
})
// destroy the toolbox (and hence the inspector) before the load completes
.then(function () toolbox.destroy())
// this (or any other) exception should not occur:
// [JavaScript Error: "TypeError: self.selection is null" {file: "resource:///modules/devtools/InspectorPanel.jsm" line: 250}]
.then(function cleanUp() {
gBrowser.removeCurrentTab();
finish();
});
}

Просмотреть файл

@ -125,8 +125,6 @@ CssLogic.prototype = {
_matchedRules: null,
_matchedSelectors: null,
domUtils: Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils),
/**
* Reset various properties
*/
@ -470,8 +468,9 @@ CssLogic.prototype = {
rule.selectors.forEach(function (aSelector) {
if (aSelector._matchId !== this._matchId &&
(aSelector.elementStyle ||
this._selectorMatchesElement(aSelector))) {
(aSelector.elementStyle ||
this.selectorMatchesElement(rule._domRule, aSelector.selectorIndex))) {
aSelector._matchId = this._matchId;
this._matchedSelectors.push([ aSelector, status ]);
if (aCallback) {
@ -489,15 +488,19 @@ CssLogic.prototype = {
* parents.
*
* @private
* @param {string} aSelector the selector string you want to check.
* @return {boolean} true if the given selector matches the highlighted
* element or any of its parents, otherwise false is returned.
* @param {DOMRule} domRule
* The DOM Rule containing the selector.
* @param {Number} idx
* The index of the selector within the DOMRule.
* @return {boolean}
* true if the given selector matches the highlighted element or any
* of its parents, otherwise false is returned.
*/
_selectorMatchesElement: function CL__selectorMatchesElement(aSelector)
selectorMatchesElement: function CL_selectorMatchesElement2(domRule, idx)
{
let element = this.viewedElement;
do {
if (element.mozMatchesSelector(aSelector)) {
if (domUtils.selectorMatchesElement(element, domRule, idx)) {
return true;
}
} while ((element = element.parentNode) &&
@ -531,7 +534,7 @@ CssLogic.prototype = {
if (rule.getPropertyValue(aProperty) &&
(status == CssLogic.STATUS.MATCHED ||
(status == CssLogic.STATUS.PARENT_MATCH &&
this.domUtils.isInheritedProperty(aProperty)))) {
domUtils.isInheritedProperty(aProperty)))) {
result[aProperty] = true;
return false;
}
@ -569,7 +572,7 @@ CssLogic.prototype = {
CssLogic.STATUS.MATCHED : CssLogic.STATUS.PARENT_MATCH;
try {
domRules = this.domUtils.getCSSStyleRules(element);
domRules = domUtils.getCSSStyleRules(element);
} catch (ex) {
Services.console.
logStringMessage("CL__buildMatchedRules error: " + ex);
@ -690,65 +693,22 @@ CssLogic.getShortNamePath = function CssLogic_getShortNamePath(aElement)
};
/**
* Get a string list of selectors for a given CSSStyleRule.selectorText
* Get a string list of selectors for a given DOMRule.
*
* @param {string} aSelectorText The CSSStyleRule.selectorText to parse.
* @return {array} An array of string selectors.
* @param {DOMRule} aDOMRule
* The DOMRule to parse.
* @return {Array}
* An array of string selectors.
*/
CssLogic.getSelectors = function CssLogic_getSelectors(aSelectorText)
CssLogic.getSelectors = function CssLogic_getSelectors(aDOMRule)
{
let selectors = [];
let selector = aSelectorText.trim();
if (!selector) {
return selectors;
let len = domUtils.getSelectorCount(aDOMRule);
for (let i = 0; i < len; i++) {
let text = domUtils.getSelectorText(aDOMRule, i);
selectors.push(text);
}
let nesting = 0;
let currentSelector = [];
// Parse a selector group into selectors. Normally we could just .split(',')
// however Gecko allows -moz-any(a, b, c) as a selector so we ignore commas
// inside brackets.
for (let i = 0, selLen = selector.length; i < selLen; i++) {
let c = selector.charAt(i);
switch (c) {
case ",":
if (nesting == 0 && currentSelector.length > 0) {
let selectorStr = currentSelector.join("").trim();
if (selectorStr) {
selectors.push(selectorStr);
}
currentSelector = [];
} else {
currentSelector.push(c);
}
break;
case "(":
nesting++;
currentSelector.push(c);
break;
case ")":
nesting--;
currentSelector.push(c);
break;
default:
currentSelector.push(c);
break;
}
}
// Add the last selector.
if (nesting == 0 && currentSelector.length > 0) {
let selectorStr = currentSelector.join("").trim();
if (selectorStr) {
selectors.push(selectorStr);
}
}
return selectors;
}
@ -1171,7 +1131,7 @@ function CssRule(aCssSheet, aDomRule, aElement)
if (this._cssSheet) {
// parse _domRule.selectorText on call to this.selectors
this._selectors = null;
this.line = this._cssSheet._cssLogic.domUtils.getRuleLine(this._domRule);
this.line = domUtils.getRuleLine(this._domRule);
this.source = this._cssSheet.shortSource + ":" + this.line;
if (this.mediaText) {
this.source += " @media " + this.mediaText;
@ -1179,7 +1139,7 @@ function CssRule(aCssSheet, aDomRule, aElement)
this.href = this._cssSheet.href;
this.contentRule = this._cssSheet.contentSheet;
} else if (aElement) {
this._selectors = [ new CssSelector(this, "@element.style") ];
this._selectors = [ new CssSelector(this, "@element.style", 0) ];
this.line = -1;
this.source = CssLogic.l10n("rule.sourceElement");
this.href = "#";
@ -1263,8 +1223,12 @@ CssRule.prototype = {
return this._selectors;
}
let selectors = CssLogic.getSelectors(this._domRule.selectorText);
this._selectors = [new CssSelector(this, text) for (text of selectors)];
let selectors = CssLogic.getSelectors(this._domRule);
for (let i = 0, len = selectors.length; i < len; i++) {
this._selectors.push(new CssSelector(this, selectors[i], i));
}
return this._selectors;
},
@ -1281,13 +1245,15 @@ CssRule.prototype = {
* @constructor
* @param {CssRule} aCssRule the CssRule instance from where the selector comes.
* @param {string} aSelector The selector that we wish to investigate.
* @param {Number} aIndex The index of the selector within it's rule.
*/
this.CssSelector = function CssSelector(aCssRule, aSelector)
this.CssSelector = function CssSelector(aCssRule, aSelector, aIndex)
{
this._cssRule = aCssRule;
this.text = aSelector;
this.elementStyle = this.text == "@element.style";
this._specificity = null;
this.selectorIndex = aIndex;
}
CssSelector.prototype = {
@ -1402,8 +1368,7 @@ CssSelector.prototype = {
* @see http://www.w3.org/TR/css3-selectors/#specificity
* @see http://www.w3.org/TR/CSS2/selector.html
*
* @return {object} an object holding specificity information for the current
* selector.
* @return {Number} The selector's specificity.
*/
get specificity()
{
@ -1411,59 +1376,8 @@ CssSelector.prototype = {
return this._specificity;
}
let specificity = {
ids: 0,
classes: 0,
tags: 0
};
let text = this.text;
if (!this.elementStyle) {
// Remove universal selectors as they are not relevant as far as specificity
// is concerned.
text = text.replace(RX_UNIVERSAL_SELECTOR, "");
// not() is ignored but any selectors contained by it are counted. Let's
// remove the not() and keep the contents.
text = text.replace(RX_NOT, " $1");
// Simplify remaining psuedo classes & elements.
text = text.replace(RX_PSEUDO_CLASS_OR_ELT, " $1)");
// Replace connectors with spaces
text = text.replace(RX_CONNECTORS, " ");
text.split(/\s/).forEach(function(aSimple) {
// Count IDs.
aSimple = aSimple.replace(RX_ID, function() {
specificity.ids++;
return "";
});
// Count class names and attribute matchers.
aSimple = aSimple.replace(RX_CLASS_OR_ATTRIBUTE, function() {
specificity.classes++;
return "";
});
aSimple = aSimple.replace(RX_PSEUDO, function(aDummy, aPseudoName) {
if (this.pseudoElements.has(aPseudoName)) {
// Pseudo elements count as tags.
specificity.tags++;
} else {
// Pseudo classes count as classes.
specificity.classes++;
}
return "";
}.bind(this));
if (aSimple) {
specificity.tags++;
}
}, this);
}
this._specificity = specificity;
this._specificity = domUtils.getSpecificity(this._cssRule._domRule,
this.selectorIndex);
return this._specificity;
},
@ -1610,7 +1524,7 @@ CssPropertyInfo.prototype = {
if (value &&
(aStatus == CssLogic.STATUS.MATCHED ||
(aStatus == CssLogic.STATUS.PARENT_MATCH &&
this._cssLogic.domUtils.isInheritedProperty(this.property)))) {
domUtils.isInheritedProperty(this.property)))) {
let selectorInfo = new CssSelectorInfo(aSelector, this.property, value,
aStatus);
this._matchedSelectors.push(selectorInfo);
@ -1677,25 +1591,6 @@ function CssSelectorInfo(aSelector, aProperty, aValue, aStatus)
let priority = this.selector._cssRule.getPropertyPriority(this.property);
this.important = (priority === "important");
/* Score prefix:
0 UA normal property
1 UA important property
2 normal property
3 inline (element.style)
4 important
5 inline important
*/
let scorePrefix = this.contentRule ? 2 : 0;
if (this.elementStyle) {
scorePrefix++;
}
if (this.important) {
scorePrefix += this.contentRule ? 2 : 1;
}
this.specificityScore = "" + scorePrefix + this.specificity.ids +
this.specificity.classes + this.specificity.tags;
}
CssSelectorInfo.prototype = {
@ -1824,14 +1719,8 @@ CssSelectorInfo.prototype = {
if (this.important && !aThat.important) return -1;
if (aThat.important && !this.important) return 1;
if (this.specificity.ids > aThat.specificity.ids) return -1;
if (aThat.specificity.ids > this.specificity.ids) return 1;
if (this.specificity.classes > aThat.specificity.classes) return -1;
if (aThat.specificity.classes > this.specificity.classes) return 1;
if (this.specificity.tags > aThat.specificity.tags) return -1;
if (aThat.specificity.tags > this.specificity.tags) return 1;
if (this.specificity > aThat.specificity) return -1;
if (aThat.specificity > this.specificity) return 1;
if (this.sheetIndex > aThat.sheetIndex) return -1;
if (aThat.sheetIndex > this.sheetIndex) return 1;
@ -1847,3 +1736,7 @@ CssSelectorInfo.prototype = {
return this.selector + " -> " + this.value;
},
};
XPCOMUtils.defineLazyGetter(this, "domUtils", function() {
return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
});

Просмотреть файл

@ -108,8 +108,6 @@ ElementStyle.prototype = {
// to figure out how shorthand properties will be parsed.
dummyElement: null,
domUtils: Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils),
/**
* Called by the Rule object when it has been changed through the
* setProperty* methods.
@ -158,7 +156,7 @@ ElementStyle.prototype = {
});
// Get the styles that apply to the element.
var domRules = this.domUtils.getCSSStyleRules(aElement);
var domRules = domUtils.getCSSStyleRules(aElement);
// getCSStyleRules returns ordered from least-specific to
// most-specific.
@ -413,7 +411,7 @@ Rule.prototype = {
// No stylesheet, no ruleLine
return null;
}
return this.elementStyle.domUtils.getRuleLine(this.domRule);
return domUtils.getRuleLine(this.domRule);
},
/**
@ -576,8 +574,7 @@ Rule.prototype = {
continue;
let name = matches[1];
if (this.inherited &&
!this.elementStyle.domUtils.isInheritedProperty(name)) {
if (this.inherited && !domUtils.isInheritedProperty(name)) {
continue;
}
let value = store.userProperties.getProperty(this.style, name, matches[2]);
@ -1448,7 +1445,7 @@ RuleEditor.prototype = {
// actually match. For custom selector text (such as for the 'element'
// style, just show the text directly.
if (this.rule.domRule && this.rule.domRule.selectorText) {
let selectors = CssLogic.getSelectors(this.rule.selectorText);
let selectors = CssLogic.getSelectors(this.rule.domRule);
let element = this.rule.inherited || this.ruleView._viewedElement;
for (let i = 0; i < selectors.length; i++) {
let selector = selectors[i];
@ -1458,8 +1455,12 @@ RuleEditor.prototype = {
textContent: ", "
});
}
let cls = element.mozMatchesSelector(selector) ? "ruleview-selector-matched" :
"ruleview-selector-unmatched";
let cls;
if (domUtils.selectorMatchesElement(element, this.rule.domRule, i)) {
cls = "ruleview-selector-matched";
} else {
cls = "ruleview-selector-unmatched";
}
createChild(this.selectorText, "span", {
class: cls,
textContent: selector
@ -2847,3 +2848,7 @@ XPCOMUtils.defineLazyGetter(this, "_strings", function() {
XPCOMUtils.defineLazyGetter(this, "osString", function() {
return Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS;
});
XPCOMUtils.defineLazyGetter(this, "domUtils", function() {
return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);
});

Просмотреть файл

@ -6,44 +6,98 @@
let tempScope = {};
Cu.import("resource:///modules/devtools/CssLogic.jsm", tempScope);
const DOMUtils = Cc["@mozilla.org/inspector/dom-utils;1"]
.getService(Ci.inIDOMUtils);
let CssLogic = tempScope.CssLogic;
let CssSelector = tempScope.CssSelector;
function test()
function createDocument()
{
let tests = [
{text: "*", expected: "000"},
{text: "LI", expected: "001"},
{text: "UL LI", expected: "002"},
{text: "UL OL+LI", expected: "003"},
{text: "H1 + *[REL=up]", expected: "011"},
{text: "UL OL LI.red", expected: "013"},
{text: "LI.red.level", expected: "021"},
{text: ".red .level", expected: "020"},
{text: "#x34y", expected: "100"},
{text: "#s12:not(FOO)", expected: "101"},
{text: "body#home div#warning p.message", expected: "213"},
{text: "* body#home div#warning p.message", expected: "213"},
{text: "#footer *:not(nav) li", expected: "102"},
{text: "bar:nth-child(1n+0)", expected: "011"},
{text: "li::-moz-list-number", expected: "002"},
{text: "a:hover", expected: "011"},
];
let doc = content.document;
doc.body.innerHTML = getStylesheetText();
doc.title = "Computed view specificity test";
runTests(doc);
}
tests.forEach(function(aTest) {
let selector = new CssSelector(null, aTest.text);
let specificity = selector.specificity;
function runTests(doc) {
let cssLogic = new CssLogic();
cssLogic.highlight(doc.body);
let result = "" + specificity.ids + specificity.classes + specificity.tags;
is(result, aTest.expected, "selector \"" + aTest.text +
"\" produces expected result");
});
let tests = getTests();
let cssSheet = cssLogic.sheets[0];
let cssRule = cssSheet.domSheet.cssRules[0];
let selectors = CssLogic.getSelectors(cssRule);
for (let i = 0; i < selectors.length; i++) {
let selectorText = selectors[i];
let selector = new CssSelector(cssRule, selectorText, i);
let expected = getExpectedSpecificity(selectorText);
let specificity = DOMUtils.getSpecificity(selector._cssRule,
selector.selectorIndex)
is(specificity, expected,
'selector "' + selectorText + '" has a specificity of ' + expected);
}
finishUp();
}
function getExpectedSpecificity(selectorText) {
let tests = getTests();
for (let test of tests) {
if (test.text == selectorText) {
return test.expected;
}
}
}
function getTests() {
return [
{text: "*", expected: 0},
{text: "LI", expected: 1},
{text: "UL LI", expected: 2},
{text: "UL OL + LI", expected: 3},
{text: "H1 + [REL=\"up\"]", expected: 257},
{text: "UL OL LI.red", expected: 259},
{text: "LI.red.level", expected: 513},
{text: ".red .level", expected: 512},
{text: "#x34y", expected: 65536},
{text: "#s12:not(FOO)", expected: 65537},
{text: "body#home div#warning p.message", expected: 131331},
{text: "* body#home div#warning p.message", expected: 131331},
{text: "#footer :not(nav) li", expected: 65538},
{text: "bar:nth-child(n)", expected: 257},
{text: "li::-moz-list-number", expected: 1},
{text: "a:hover", expected: 257},
];
}
function getStylesheetText() {
let tests = getTests();
let text = "";
tests.forEach(function(test) {
if (text.length > 0) {
text += ",";
}
text += test.text;
});
return '<style type="text/css">' + text + " {color:red;}</style>";
}
function finishUp()
{
CssLogic = CssSelector = null;
CssLogic = CssSelector = tempScope = null;
finish();
}
function test()
{
waitForExplicitFinish();
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) {
gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true);
waitForFocus(createDocument, content);
}, true);
content.location = "data:text/html,Computed view specificity test";
}

Просмотреть файл

@ -9,7 +9,7 @@
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
%include ../browserShared.inc
%include ../shared/browser.inc
%filter substitution
%define toolbarHighlight rgba(255,255,255,.3)
%define selectedTabHighlight rgba(255,255,255,.8) 1px, rgba(255,255,255,.5) 3px
@ -1972,135 +1972,6 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
margin-left: 1em;
}
/* Highlighter */
.highlighter-outline {
box-shadow: 0 0 0 1px black;
outline: 1px dashed white;
outline-offset: -1px;
}
.highlighter-outline[locked] {
box-shadow: 0 0 0 1px rgba(0,0,0,0.3);
outline-color: rgba(255,255,255,0.7);
}
/* Developer toolbar */
#developer-toolbar {
border-top: 1px solid hsla(210, 8%, 5%, .65);
}
/* Highlighter - Node Infobar */
.highlighter-nodeinfobar {
color: hsl(200, 100%, 65%);
border: 1px solid hsla(210, 19%, 63%, .5);
border-radius: 3px;
background: linear-gradient(hsl(209, 18%, 30%), hsl(210, 24%, 16%)) no-repeat padding-box;
}
/* Highlighter - Node Infobar - text */
.highlighter-nodeinfobar-text {
/* 100% - size of the buttons and margins */
max-width: calc(100% - 2 * (26px + 6px));
padding-bottom: 1px;
}
html|*.highlighter-nodeinfobar-tagname {
color: white;
}
html|*.highlighter-nodeinfobar-id {
color: hsl(90, 79%, 52%);
}
html|*.highlighter-nodeinfobar-pseudo-classes {
color: hsl(20, 100%, 70%);
}
/* Highlighter - Node Infobar - buttons */
.highlighter-nodeinfobar-button {
-moz-appearance: none;
border: 0 solid hsla(210,8%,5%,.45);
padding: 0;
width: 26px;
min-height: 26px;
}
.highlighter-nodeinfobar-inspectbutton {
-moz-border-end-width: 1px;
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-end: 6px;
list-style-image: url("chrome://browser/skin/devtools/inspect-button.png");
-moz-image-region: rect(0px 16px 16px 0px);
}
.highlighter-nodeinfobar-inspectbutton:-moz-locale-dir(rtl) {
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-inspectbutton:active:hover,
.highlighter-nodeinfobar-container:not([locked]) > .highlighter-nodeinfobar > .highlighter-nodeinfobar-inspectbutton {
-moz-image-region: rect(0px 32px 16px 16px);
}
.highlighter-nodeinfobar-menu {
-moz-border-start-width: 1px;
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-start: 6px;
}
.highlighter-nodeinfobar-menu:-moz-locale-dir(rtl) {
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-menu > .toolbarbutton-menu-dropmarker {
-moz-appearance: none !important;
list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-moz-box-align: center;
-moz-margin-start: -1px;
}
/* Highlighter - Node Infobar - box & arrow */
.highlighter-nodeinfobar-arrow {
width: 14px;
height: 14px;
-moz-margin-start: calc(50% - 7px);
transform: rotate(-45deg);
border: 1px solid transparent;
background-clip: padding-box;
background-repeat: no-repeat;
}
.highlighter-nodeinfobar-arrow-top {
margin-bottom: -8px;
margin-top: 8px;
border-right-color: hsla(210, 19%, 63%, .5);
border-top-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to top right, transparent 50%, hsl(209, 18%, 30%) 50%);
}
.highlighter-nodeinfobar-arrow-bottom {
margin-top: -8px;
margin-bottom: 8px;
border-left-color: hsla(210, 19%, 63%, .5);
border-bottom-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to bottom left, transparent 50%, hsl(210, 24%, 16%) 50%);
}
.highlighter-nodeinfobar-container[position="top"] > .highlighter-nodeinfobar,
.highlighter-nodeinfobar-container[position="overlap"] > .highlighter-nodeinfobar {
box-shadow: 0 1px 0 hsla(0, 0%, 100%, .1) inset;
}
.highlighter-nodeinfobar-container[hide-arrow] > .highlighter-nodeinfobar {
margin: 7px 0;
}
#full-screen-warning-message {
background-color: hsl(0,0%,15%);
color: white;
@ -2127,149 +1998,35 @@ html|*.highlighter-nodeinfobar-pseudo-classes {
font-size: 120%;
}
html|*#gcli-tooltip-frame,
html|*#gcli-output-frame {
padding: 0;
border-width: 0;
background-color: transparent;
/* Developer toolbar */
#developer-toolbar {
border-top: 1px solid hsla(210, 8%, 5%, .65);
}
%include ../shared/devtools/responsivedesign.inc.css
%include ../shared/devtools/highlighter.inc.css
%include ../shared/devtools/commandline.inc.css
.gcli-panel {
padding: 0;
}
#gcli-output,
#gcli-tooltip {
border-width: 0;
background-color: transparent;
-moz-appearance: none;
margin-bottom: -2px;
}
.gclitoolbar-input-node,
.gclitoolbar-complete-node,
.gclitoolbar-prompt {
margin: 0;
-moz-margin-end: 5px;
-moz-box-align: center;
padding-top: 0;
padding-bottom: 0;
padding-right: 4px;
border: 1px solid transparent;
border-radius: 3px;
text-shadow: none;
}
.gclitoolbar-input-node {
padding-left: 20px;
background-color: transparent;
-moz-appearance: none;
border-color: hsl(210,11%,10%);
color: hsl(210,30%,85%);
text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset,
0 0 0 1px hsla(210,16%,76%,.1) inset,
0 1px 0 hsla(210,16%,76%,.15);
}
.gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
background-color: hsl(210,30%,85%);
color: hsl(210,11%,16%);
text-shadow: none;
}
.gclitoolbar-complete-node {
padding-left: 21px;
background-color: transparent;
color: transparent;
}
.gclitoolbar-prompt {
padding-left: 4px;
padding-bottom: 2px;
font-size: 150%;
font-weight: bold;
color: hsl(210,30%,85%);
background-color: hsl(210,11%,16%);
}
.gclitoolbar-prompt-label,
.gcli-in-incomplete,
.gcli-in-error,
.gcli-in-ontab,
.gcli-in-todo,
.gcli-in-closebrace,
.gcli-in-param,
.gcli-in-valid {
margin: 0;
padding: 0;
}
.gcli-in-incomplete {
border-bottom: 2px dotted #999;
}
.gcli-in-error {
border-bottom: 2px dotted #F00;
}
.gcli-in-ontab {
color: hsl(210,0%,35%);
}
.gcli-in-todo {
color: hsl(210,50%,35%);
}
.gcli-in-closebrace {
color: hsl(0,0%,80%);
}
/* Responsive Mode */
.browserContainer[responsivemode] {
background: #222 url("chrome://browser/skin/devtools/responsive-background.png");
padding: 0 20px 20px 20px;
}
.browserStack[responsivemode] {
box-shadow: 0 0 7px black;
}
.devtools-responsiveui-toolbar {
background: transparent;
margin: 10px 0;
padding: 0;
box-shadow: none;
}
.devtools-responsiveui-toolbar > menulist,
.devtools-responsiveui-toolbar > toolbarbutton {
min-width: 22px;
border-radius: 0;
}
.devtools-responsiveui-toolbar:-moz-locale-dir(ltr) > *:first-child,
.devtools-responsiveui-toolbar:-moz-locale-dir(rtl) > *:last-child {
margin-left: 0;
}
.devtools-responsiveui-resizebar {
width: 7px;
height: 24px;
cursor: ew-resize;
transform: translate(12px, -12px);
background-image: url("chrome://browser/skin/devtools/responsive-vertical-resizer.png");
}
.devtools-responsiveui-resizehandle {
width: 16px;
height: 16px;
cursor: se-resize;
transform: translate(12px, 12px);
background-image: url("chrome://browser/skin/devtools/responsive-se-resizer.png");
}
/* Web Console */
.web-console-frame {
@ -2396,152 +2153,39 @@ html|*#gcli-output-frame {
padding: 0;
}
.chat-status-icon {
max-height: 16px;
max-width: 16px;
padding: 0;
}
.chat-toolbarbutton {
-moz-appearance: none;
border: none;
padding: 0;
margin: 0;
background: none;
}
.chat-toolbarbutton > .toolbarbutton-text {
display: none;
}
.chat-close-button {
list-style-image: url('chrome://browser/skin/social/chat-close.png');
-moz-image-region: rect(0, 14px, 14px, 0);
}
.chat-close-button:hover:active {
-moz-image-region: rect(14px, 14px, 28px, 0);
}
.chat-close-button:hover {
-moz-image-region: rect(28px, 14px, 42px, 0);
}
.chat-title {
font-weight: bold;
color: black;
text-shadow: none;
cursor: inherit;
}
%include ../shared/social/chat.inc.css
.chat-titlebar {
background-color: #d9d9d9;
background-image: linear-gradient(@toolbarHighlight@, rgba(255,255,255,0));
height: 20px;
min-height: 20px;
width: 100%;
margin: 0;
padding: 2px;
-moz-padding-start: 6px;
border: none;
border-bottom: 1px solid #ccc;
cursor: pointer;
}
.chat-titlebar[minimized="true"] {
border-bottom: none;
}
.chat-titlebar[selected] {
background-color: #f0f0f0;
}
.chat-titlebar[activity] {
background-image: radial-gradient(ellipse closest-side at center, rgb(255,255,255), rgba(255,255,255,0));
background-repeat: no-repeat;
background-size: 100% 20px;
background-position: 0 -10px;
}
.chat-frame {
padding: 0;
margin: 0;
overflow: hidden;
}
.chatbar-button {
-moz-appearance: none;
background-color: #d9d9d9;
list-style-image: url("chrome://browser/skin/social/social.png");
border: none;
margin: 0;
padding: 2px;
height: 21px;
width: 21px;
border-top: 1px solid #ccc;
-moz-border-end: 1px solid #ccc;
}
.chatbar-button > .toolbarbutton-icon {
opacity: .6;
-moz-margin-end: 0;
}
.chatbar-button:hover > .toolbarbutton-icon,
.chatbar-button[open="true"] > .toolbarbutton-icon {
opacity: 1;
}
.chatbar-button[open="true"] {
background-color: #f0f0f0;
box-shadow: inset 0 2px 5px rgba(0,0,0,0.6), 0 1px rgba(255,255,255,0.2);
}
.chatbar-button > .toolbarbutton-text,
.chatbar-button > .toolbarbutton-menu-dropmarker {
display: none;
}
.chatbar-button[activity] {
background-image: radial-gradient(circle farthest-corner at center 3px, rgb(233,242,252) 3%, rgba(172,206,255,0.75) 40%, rgba(87,151,201,0.5) 80%, rgba(87,151,201,0));
}
.chatbar-button > menupopup > menuitem[activity] {
font-weight: bold;
}
.chatbar-button > menupopup > .menuitem-iconic > .menu-iconic-left > .menu-iconic-icon {
width: auto;
height: auto;
max-height: 16px;
max-width: 16px;
}
.chatbar-innerbox {
background: transparent;
margin: -285px -1px 0 -1px;
overflow: hidden;
}
chatbar {
-moz-margin-end: 20px;
}
chatbox {
height: 285px;
width: 260px;
-moz-margin-start: 4px;
background-color: white;
border: 1px solid #ccc;
border-bottom: none;
border-top-left-radius: 2.5px;
border-top-right-radius: 2.5px;
}
chatbox[minimized="true"] {
width: 160px;
height: 20px;
}
.click-to-play-plugins-notification-content {
margin: -10px;
}

Просмотреть файл

@ -3405,38 +3405,6 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
margin-left: 1em;
}
/* Highlighter */
.highlighter-outline {
box-shadow: 0 0 0 1px black;
outline: 1px dashed white;
outline-offset: -1px;
}
.highlighter-outline[locked] {
box-shadow: 0 0 0 1px rgba(0,0,0,0.3);
outline-color: rgba(255,255,255,0.7);
}
/* Developer toolbar */
#developer-toolbar {
border-top: 1px solid hsla(210, 8%, 5%, .65);
padding-top: 4px;
padding-bottom: 4px;
}
#developer-toolbar:-moz-locale-dir(ltr) {
padding-left: 2px;
padding-right: 16px; /* use -moz-padding-end when/if bug 631729 gets fixed */
}
#developer-toolbar:-moz-locale-dir(rtl) {
padding-left: 4px;
padding-right: 18px; /* use -moz-padding-end when/if bug 631729 gets fixed */
}
/* Lion Fullscreen window styling */
@media (-moz-mac-lion-theme) {
#navigator-toolbox[inFullscreen][tabsontop="true"]:not(:-moz-lwtheme)::before {
@ -3451,117 +3419,6 @@ toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
}
}
/* Highlighter - Node Infobar */
.highlighter-nodeinfobar {
color: hsl(200, 100%, 65%);
border: 1px solid hsla(210, 19%, 63%, .5);
border-radius: 3px;
background: linear-gradient(hsl(209, 18%, 30%), hsl(210, 24%, 16%)) no-repeat padding-box;
}
/* Highlighter - Node Infobar - text */
.highlighter-nodeinfobar-text {
/* 100% - size of the buttons + margins */
max-width: calc(100% - 2 * (26px + 6px));
padding-bottom: 1px;
}
html|*.highlighter-nodeinfobar-tagname {
color: white;
}
html|*.highlighter-nodeinfobar-id {
color: hsl(90, 79%, 52%);
}
html|*.highlighter-nodeinfobar-pseudo-classes {
color: hsl(20, 100%, 70%);
}
/* Highlighter - Node Infobar - buttons */
.highlighter-nodeinfobar-button {
-moz-appearance: none;
border: 0 solid hsla(210,8%,5%,.45);
padding: 0;
width: 26px;
min-height: 26px;
background-color: transparent;
}
.highlighter-nodeinfobar-inspectbutton {
-moz-border-end-width: 1px;
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-end: 6px;
list-style-image: url("chrome://browser/skin/devtools/inspect-button.png");
-moz-image-region: rect(0px 16px 16px 0px);
}
.highlighter-nodeinfobar-inspectbutton:-moz-locale-dir(rtl) {
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-inspectbutton:active:hover,
.highlighter-nodeinfobar-container:not([locked]) > .highlighter-nodeinfobar > .highlighter-nodeinfobar-inspectbutton {
-moz-image-region: rect(0px 32px 16px 16px);
}
.highlighter-nodeinfobar-menu {
-moz-border-start-width: 1px;
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-start: 6px;
}
.highlighter-nodeinfobar-menu:-moz-locale-dir(rtl) {
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-menu > .toolbarbutton-menu-dropmarker {
-moz-appearance: none !important;
list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-moz-box-align: center;
-moz-margin-start: -1px;
}
/* Highlighter - Node Infobar - box & arrow */
.highlighter-nodeinfobar-arrow {
width: 14px;
height: 14px;
-moz-margin-start: calc(50% - 7px);
transform: rotate(-45deg);
border: 1px solid transparent;
background-clip: padding-box;
background-repeat: no-repeat;
}
.highlighter-nodeinfobar-arrow-top {
margin-bottom: -8px;
margin-top: 8px;
border-right-color: hsla(210, 19%, 63%, .5);
border-top-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to top right, transparent 50%, hsl(209, 18%, 30%) 50%);
}
.highlighter-nodeinfobar-arrow-bottom {
margin-top: -8px;
margin-bottom: 8px;
border-left-color: hsla(210, 19%, 63%, .5);
border-bottom-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to bottom left, transparent 50%, hsl(210, 24%, 16%) 50%);
}
.highlighter-nodeinfobar-container[position="top"] > .highlighter-nodeinfobar,
.highlighter-nodeinfobar-container[position="overlap"] > .highlighter-nodeinfobar {
box-shadow: 0 1px 0 hsla(0, 0%, 100%, .1) inset;
}
.highlighter-nodeinfobar-container[hide-arrow] > .highlighter-nodeinfobar {
margin: 7px 0;
}
#full-screen-warning-message {
background-color: hsl(0,0%,15%);
color: white;
@ -3588,145 +3445,49 @@ html|*.highlighter-nodeinfobar-pseudo-classes {
font-size: 120%;
}
html|*#gcli-tooltip-frame,
html|*#gcli-output-frame {
padding: 0;
border-width: 0;
background-color: transparent;
/* Developer toolbar */
#developer-toolbar {
border-top: 1px solid hsla(210, 8%, 5%, .65);
padding-top: 4px;
padding-bottom: 4px;
}
#gcli-output,
#gcli-tooltip {
border-width: 0;
background-color: transparent;
-moz-appearance: none;
margin-bottom: -2px;
#developer-toolbar:-moz-locale-dir(ltr) {
padding-left: 2px;
padding-right: 16px; /* use -moz-padding-end when/if bug 631729 gets fixed */
}
#developer-toolbar:-moz-locale-dir(rtl) {
padding-left: 4px;
padding-right: 18px; /* use -moz-padding-end when/if bug 631729 gets fixed */
}
%include ../shared/devtools/responsivedesign.inc.css
%include ../shared/devtools/highlighter.inc.css
%include ../shared/devtools/commandline.inc.css
.gclitoolbar-input-node,
.gclitoolbar-complete-node,
.gclitoolbar-prompt {
margin: 0;
-moz-margin-end: 5px;
-moz-box-align: center;
padding-top: 0;
padding-bottom: 0;
padding-right: 4px;
border: 1px solid transparent;
border-radius: @toolbarbuttonCornerRadius@;
text-shadow: none;
}
.gclitoolbar-input-node {
padding-left: 20px;
background-color: transparent;
-moz-appearance: none;
border-color: hsl(210,11%,10%);
color: hsl(210,30%,85%);
text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
box-shadow: 0 1px 1px hsla(210,8%,5%,.3) inset,
0 0 0 1px hsla(210,16%,76%,.1) inset,
0 1px 0 hsla(210,16%,76%,.15);
}
.gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
background-color: hsl(210,30%,85%);
color: hsl(210,11%,16%);
text-shadow: none;
}
.gclitoolbar-complete-node {
padding-left: 21px;
background-color: transparent;
color: transparent;
}
.gclitoolbar-prompt {
padding-left: 4px;
padding-bottom: 2px;
font-size: 150%;
font-weight: bold;
color: hsl(210,30%,85%);
background-color: hsl(210,11%,16%);
}
.gclitoolbar-prompt-label,
.gcli-in-incomplete,
.gcli-in-error,
.gcli-in-ontab,
.gcli-in-todo,
.gcli-in-closebrace,
.gcli-in-param,
.gcli-in-valid {
margin: 0;
padding: 0;
}
.gcli-in-incomplete {
border-bottom: 2px dotted #999;
}
.gcli-in-error {
border-bottom: 2px dotted #F00;
}
.gcli-in-ontab {
color: hsl(210,0%,35%);
}
.gcli-in-todo {
color: hsl(210,50%,35%);
}
.gcli-in-closebrace {
color: hsl(0,0%,80%);
}
/* Responsive Mode */
.browserContainer[responsivemode] {
background: #222 url("chrome://browser/skin/devtools/responsive-background.png");
padding: 0 20px 20px 20px;
}
.browserStack[responsivemode] {
box-shadow: 0 0 7px black;
}
.devtools-responsiveui-toolbar {
background: transparent;
margin: 10px 0;
padding: 0;
box-shadow: none;
}
.devtools-responsiveui-toolbar > menulist,
.devtools-responsiveui-toolbar > toolbarbutton {
min-width: 22px;
border-radius: 0;
}
.devtools-responsiveui-toolbar:-moz-locale-dir(ltr) > *:first-child,
.devtools-responsiveui-toolbar:-moz-locale-dir(rtl) > *:last-child {
margin-left: 0;
}
.devtools-responsiveui-resizebar {
width: 7px;
height: 24px;
cursor: ew-resize;
transform: translate(12px, -12px);
background-image: url("chrome://browser/skin/devtools/responsive-vertical-resizer.png");
}
.devtools-responsiveui-resizehandle {
width: 16px;
height: 16px;
cursor: se-resize;
transform: translate(12px, 12px);
background-image: url("chrome://browser/skin/devtools/responsive-se-resizer.png");
}
/* Web Console */
.web-console-frame {
@ -3872,150 +3633,34 @@ toolbar[mode="icons"] > *|* > .social-notification-container > .toolbarbutton-1[
/* === end of social toolbar provider menu === */
.chat-status-icon {
max-height: 16px;
max-width: 16px;
padding: 0;
}
.chat-toolbarbutton {
-moz-appearance: none;
border: none;
padding: 0;
margin: 0;
background: none;
}
.chat-toolbarbutton > .toolbarbutton-text {
display: none;
}
.chat-close-button {
list-style-image: url('chrome://browser/skin/social/chat-close.png');
-moz-image-region: rect(0, 14px, 14px, 0);
}
.chat-close-button:hover:active {
-moz-image-region: rect(14px, 14px, 28px, 0);
}
.chat-close-button:hover {
-moz-image-region: rect(28px, 14px, 42px, 0);
}
.chat-title {
font-weight: bold;
color: black;
text-shadow: none;
cursor: inherit;
}
%include ../shared/social/chat.inc.css
.chat-titlebar {
background-color: #d9d9d9;
background-image: linear-gradient(rgba(255,255,255,.43), rgba(255,255,255,0));
height: 20px;
min-height: 20px;
width: 100%;
margin: 0;
padding: 2px;
-moz-padding-start: 6px;
border: none;
border-bottom: 1px solid #ccc;
cursor: pointer;
}
.chat-titlebar[minimized="true"] {
border-bottom: none;
}
.chat-titlebar[activity] {
background-image: radial-gradient(ellipse closest-side at center, rgb(255,255,255), rgba(255,255,255,0));
background-repeat: no-repeat;
background-size: 100% 20px;
background-position: 0 -10px;
}
.chat-titlebar[selected] {
background-color: #f0f0f0;
}
.chat-frame {
padding: 0;
margin: 0;
overflow: hidden;
}
.chatbar-button {
background-color: #d9d9d9;
list-style-image: url("chrome://browser/skin/social/social.png");
border: none;
margin: 0;
padding: 2px;
height: 21px;
width: 21px;
border-top: 1px solid #ccc;
-moz-border-end: 1px solid #ccc;
}
.chatbar-button > .toolbarbutton-icon {
opacity: .6;
}
.chatbar-button:hover > .toolbarbutton-icon,
.chatbar-button[open="true"] > .toolbarbutton-icon {
opacity: 1;
}
.chatbar-button[open="true"] {
background-color: #f0f0f0;
box-shadow: inset 0 2px 5px rgba(0,0,0,0.6), 0 1px rgba(255,255,255,0.2);
}
.chatbar-button > .toolbarbutton-text,
.chatbar-button > .toolbarbutton-menu-dropmarker {
display: none;
}
.chatbar-button[activity] {
background-image: radial-gradient(circle farthest-corner at center 2px, rgb(254,254,255) 3%, rgba(210,235,255,0.9) 12%, rgba(148,205,253,0.6) 30%, rgba(148,205,253,0.2) 70%);
}
.chatbar-button > menupopup > menuitem[activity] {
font-weight: bold;
}
.chatbar-button > menupopup > .menuitem-iconic > .menu-iconic-left > .menu-iconic-icon {
width: auto;
height: auto;
max-height: 16px;
max-width: 16px;
}
.chatbar-innerbox {
background: transparent;
margin: -285px 0 0;
overflow: hidden;
}
chatbar {
-moz-margin-end: 20px;
}
chatbox {
height: 285px;
width: 260px;
-moz-margin-start: 4px;
background-color: white;
border: 1px solid #ccc;
border-bottom: none;
border-top-left-radius: @toolbarbuttonCornerRadius@;
border-top-right-radius: @toolbarbuttonCornerRadius@;
}
chatbox[minimized="true"] {
width: 160px;
height: 20px;
}
panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="top"],
panel[type="arrow"][popupid="click-to-play-plugins"] > .panel-arrowcontainer > .panel-arrowbox > .panel-arrow[side="bottom"] {
list-style-image: url("chrome://global/skin/arrow/panelarrow-light-vertical.png");

Просмотреть файл

@ -1,5 +1,5 @@
%include ../../../toolkit/themes/pinstripe/global/shared.inc
%include ../browserShared.inc
%include ../shared/browser.inc
%define hudButton -moz-appearance: none; color: #434343; border-radius: 4px; border: 1px solid #b5b5b5; background: -moz-linear-gradient(#fff, #f2f2f2); box-shadow: inset 0 1px rgba(255,255,255,.8), inset 0 0 1px rgba(255,255, 255,.25), 0 1px rgba(255,255,255,.3); background-clip: padding-box; background-origin: padding-box; padding: 2px 6px;
%define hudButtonPressed box-shadow: inset 0 1px 4px -3px #000, 0 1px rgba(255,255,255,.3);

Просмотреть файл

Просмотреть файл

@ -0,0 +1,98 @@
%if 0
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
%endif
html|*#gcli-tooltip-frame,
html|*#gcli-output-frame {
padding: 0;
border-width: 0;
background-color: transparent;
}
#gcli-output,
#gcli-tooltip {
border-width: 0;
background-color: transparent;
-moz-appearance: none;
margin-bottom: -2px;
}
.gclitoolbar-input-node,
.gclitoolbar-complete-node,
.gclitoolbar-prompt {
margin: 0;
-moz-margin-end: 5px;
-moz-box-align: center;
padding-top: 0;
padding-bottom: 0;
padding-right: 4px;
border: 1px solid transparent;
border-radius: 3px;
text-shadow: none;
}
.gclitoolbar-input-node {
padding-left: 20px;
background-color: transparent;
-moz-appearance: none;
border-color: hsl(210,24%,10%);
color: hsl(210,30%,85%);
text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
box-shadow: inset 0 1px 0 hsla(211,68%,6%,.05),
0 0 0 1px hsla(210,40%,83%,.1);
}
.gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
background-color: hsl(210,30%,85%);
color: hsl(210,24%,16%);
text-shadow: none;
}
.gclitoolbar-complete-node {
padding-left: 21px;
background-color: transparent;
color: transparent;
}
.gclitoolbar-prompt {
padding-left: 4px;
padding-bottom: 2px;
font-size: 150%;
font-weight: bold;
color: hsl(210,30%,85%);
background-color: hsl(210,24%,16%);
}
.gclitoolbar-prompt-label,
.gcli-in-incomplete,
.gcli-in-error,
.gcli-in-ontab,
.gcli-in-todo,
.gcli-in-closebrace,
.gcli-in-param,
.gcli-in-valid {
margin: 0;
padding: 0;
}
.gcli-in-incomplete {
border-bottom: 2px dotted #999;
}
.gcli-in-error {
border-bottom: 2px dotted #F00;
}
.gcli-in-ontab {
color: hsl(210,0%,35%);
}
.gcli-in-todo {
color: hsl(210,50%,35%);
}
.gcli-in-closebrace {
color: hsl(0,0%,80%);
}

Просмотреть файл

@ -0,0 +1,131 @@
%if 0
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
%endif
/* Highlighter */
.highlighter-outline {
box-shadow: 0 0 0 1px black;
outline: 1px dashed white;
outline-offset: -1px;
}
.highlighter-outline[locked] {
box-shadow: 0 0 0 1px rgba(0,0,0,0.3);
outline-color: rgba(255,255,255,0.7);
}
/* Highlighter - Node Infobar */
.highlighter-nodeinfobar {
color: hsl(200, 100%, 65%);
border: 1px solid hsla(210, 19%, 63%, .5);
border-radius: 3px;
background: linear-gradient(hsl(209, 18%, 30%), hsl(210, 24%, 16%)) no-repeat padding-box;
}
/* Highlighter - Node Infobar - text */
.highlighter-nodeinfobar-text {
/* 100% - size of the buttons and margins */
max-width: calc(100% - 2 * (26px + 6px));
padding-bottom: 1px;
}
html|*.highlighter-nodeinfobar-tagname {
color: white;
}
html|*.highlighter-nodeinfobar-id {
color: hsl(90, 79%, 52%);
}
html|*.highlighter-nodeinfobar-pseudo-classes {
color: hsl(20, 100%, 70%);
}
/* Highlighter - Node Infobar - buttons */
.highlighter-nodeinfobar-button {
-moz-appearance: none;
border: 0 solid hsla(210,8%,5%,.45);
padding: 0;
width: 26px;
min-height: 26px;
%ifndef XP_LINUX
background-color: transparent;
%endif
}
.highlighter-nodeinfobar-inspectbutton {
-moz-border-end-width: 1px;
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-end: 6px;
list-style-image: url("chrome://browser/skin/devtools/inspect-button.png");
-moz-image-region: rect(0px 16px 16px 0px);
}
.highlighter-nodeinfobar-inspectbutton:-moz-locale-dir(rtl) {
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-inspectbutton:active:hover,
.highlighter-nodeinfobar-container:not([locked]) > .highlighter-nodeinfobar > .highlighter-nodeinfobar-inspectbutton {
-moz-image-region: rect(0px 32px 16px 16px);
}
.highlighter-nodeinfobar-menu {
-moz-border-start-width: 1px;
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-start: 6px;
}
.highlighter-nodeinfobar-menu:-moz-locale-dir(rtl) {
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-menu > .toolbarbutton-menu-dropmarker {
-moz-appearance: none !important;
list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-moz-box-align: center;
-moz-margin-start: -1px;
}
/* Highlighter - Node Infobar - box & arrow */
.highlighter-nodeinfobar-arrow {
width: 14px;
height: 14px;
-moz-margin-start: calc(50% - 7px);
transform: rotate(-45deg);
border: 1px solid transparent;
background-clip: padding-box;
background-repeat: no-repeat;
}
.highlighter-nodeinfobar-arrow-top {
margin-bottom: -8px;
margin-top: 8px;
border-right-color: hsla(210, 19%, 63%, .5);
border-top-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to top right, transparent 50%, hsl(209, 18%, 30%) 50%);
}
.highlighter-nodeinfobar-arrow-bottom {
margin-top: -8px;
margin-bottom: 8px;
border-left-color: hsla(210, 19%, 63%, .5);
border-bottom-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to bottom left, transparent 50%, hsl(210, 24%, 16%) 50%);
}
.highlighter-nodeinfobar-container[position="top"] > .highlighter-nodeinfobar,
.highlighter-nodeinfobar-container[position="overlap"] > .highlighter-nodeinfobar {
box-shadow: 0 1px 0 hsla(0, 0%, 100%, .1) inset;
}
.highlighter-nodeinfobar-container[hide-arrow] > .highlighter-nodeinfobar {
margin: 7px 0;
}

Просмотреть файл

@ -0,0 +1,53 @@
%if 0
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
%endif
/* Responsive Mode */
.browserContainer[responsivemode] {
background: #222 url("chrome://browser/skin/devtools/responsive-background.png");
padding: 0 20px 20px 20px;
}
.browserStack[responsivemode] {
box-shadow: 0 0 7px black;
}
.devtools-responsiveui-toolbar {
background: transparent;
margin: 10px 0;
padding: 0;
box-shadow: none;
%ifdef XP_WIN
border-bottom-width: 0;
%endif
}
.devtools-responsiveui-toolbar > menulist,
.devtools-responsiveui-toolbar > toolbarbutton {
min-width: 22px;
border-radius: 0;
}
.devtools-responsiveui-toolbar:-moz-locale-dir(ltr) > *:first-child,
.devtools-responsiveui-toolbar:-moz-locale-dir(rtl) > *:last-child {
margin-left: 0;
}
.devtools-responsiveui-resizebar {
width: 7px;
height: 24px;
cursor: ew-resize;
transform: translate(12px, -12px);
background-image: url("chrome://browser/skin/devtools/responsive-vertical-resizer.png");
}
.devtools-responsiveui-resizehandle {
width: 16px;
height: 16px;
cursor: se-resize;
transform: translate(12px, 12px);
background-image: url("chrome://browser/skin/devtools/responsive-se-resizer.png");
}

Просмотреть файл

@ -0,0 +1,137 @@
%if 0
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
%endif
.chat-status-icon {
max-height: 16px;
max-width: 16px;
padding: 0;
}
.chat-toolbarbutton {
-moz-appearance: none;
border: none;
padding: 0;
margin: 0;
background: none;
}
.chat-toolbarbutton > .toolbarbutton-text {
display: none;
}
.chat-close-button {
list-style-image: url('chrome://browser/skin/social/chat-close.png');
-moz-image-region: rect(0, 14px, 14px, 0);
}
.chat-close-button:hover:active {
-moz-image-region: rect(14px, 14px, 28px, 0);
}
.chat-close-button:hover {
-moz-image-region: rect(28px, 14px, 42px, 0);
}
.chat-title {
font-weight: bold;
color: black;
text-shadow: none;
cursor: inherit;
}
.chat-titlebar {
height: 20px;
min-height: 20px;
width: 100%;
margin: 0;
padding: 2px;
-moz-padding-start: 6px;
border: none;
border-bottom: 1px solid #ccc;
cursor: pointer;
}
.chat-titlebar[minimized="true"] {
border-bottom: none;
}
.chat-titlebar[activity] {
background-image: radial-gradient(ellipse closest-side at center, rgb(255,255,255), rgba(255,255,255,0));
background-repeat: no-repeat;
background-size: 100% 20px;
background-position: 0 -10px;
}
.chat-frame {
padding: 0;
margin: 0;
overflow: hidden;
}
.chatbar-button {
/* XXX get a real image for this */
list-style-image: url("chrome://browser/skin/social/social.png");
border: none;
margin: 0;
padding: 2px;
height: 21px;
width: 21px;
border-top: 1px solid #ccc;
-moz-border-end: 1px solid #ccc;
}
.chatbar-button > menupopup > .menuitem-iconic > .menu-iconic-left > .menu-iconic-icon {
width: auto;
height: auto;
max-height: 16px;
max-width: 16px;
}
.chatbar-button > .toolbarbutton-icon {
opacity: .6;
}
.chatbar-button:hover > .toolbarbutton-icon,
.chatbar-button[open="true"] > .toolbarbutton-icon {
opacity: 1;
}
.chatbar-button[open="true"] {
box-shadow: inset 0 2px 5px rgba(0,0,0,0.6), 0 1px rgba(255,255,255,0.2);
}
.chatbar-button > .toolbarbutton-text,
.chatbar-button > .toolbarbutton-menu-dropmarker {
display: none;
}
.chatbar-button > menupopup > menuitem[activity] {
font-weight: bold;
}
.chatbar-innerbox {
background: transparent;
margin: -285px 0 0;
overflow: hidden;
}
chatbar {
-moz-margin-end: 20px;
}
chatbox {
height: 285px;
width: 260px;
-moz-margin-start: 4px;
background-color: white;
border: 1px solid #ccc;
border-bottom: none;
}
chatbox[minimized="true"] {
width: 160px;
height: 20px;
}

Просмотреть файл

@ -7,7 +7,7 @@
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
%include ../browserShared.inc
%include ../shared/browser.inc
%filter substitution
%define toolbarHighlight rgba(255,255,255,.5)
%define selectedTabHighlight rgba(255,255,255,.7)
@ -2548,136 +2548,6 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
margin-left: 1em;
}
/* Highlighter */
.highlighter-outline {
box-shadow: 0 0 0 1px black;
outline: 1px dashed white;
outline-offset: -1px;
}
.highlighter-outline[locked] {
box-shadow: 0 0 0 1px rgba(0,0,0,0.3);
outline-color: rgba(255,255,255,0.7);
}
/* Developer toolbar */
#developer-toolbar {
border-top: 1px solid hsla(211,68%,6%,.65) !important;
}
/* Highlighter - Node Infobar */
.highlighter-nodeinfobar {
color: hsl(200, 100%, 65%);
border: 1px solid hsla(210, 19%, 63%, .5);
border-radius: 3px;
background: linear-gradient(hsl(209, 18%, 30%), hsl(210, 24%, 16%)) no-repeat padding-box;
}
/* Highlighter - Node Infobar - text */
.highlighter-nodeinfobar-text {
/* 100% - size of the buttons and margins */
max-width: calc(100% - 2 * (26px + 6px));
padding-bottom: 1px;
}
html|*.highlighter-nodeinfobar-tagname {
color: white;
}
html|*.highlighter-nodeinfobar-id {
color: hsl(90, 79%, 52%);
}
html|*.highlighter-nodeinfobar-pseudo-classes {
color: hsl(20, 100%, 70%);
}
/* Highlighter - Node Infobar - buttons */
.highlighter-nodeinfobar-button {
-moz-appearance: none;
border: 0 solid hsla(210,8%,5%,.45);
padding: 0;
width: 26px;
min-height: 26px;
background-color: transparent;
}
.highlighter-nodeinfobar-inspectbutton {
-moz-border-end-width: 1px;
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-end: 6px;
list-style-image: url("chrome://browser/skin/devtools/inspect-button.png");
-moz-image-region: rect(0px 16px 16px 0px);
}
.highlighter-nodeinfobar-inspectbutton:-moz-locale-dir(rtl) {
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-inspectbutton:active:hover,
.highlighter-nodeinfobar-container:not([locked]) > .highlighter-nodeinfobar > .highlighter-nodeinfobar-inspectbutton {
-moz-image-region: rect(0px 32px 16px 16px);
}
.highlighter-nodeinfobar-menu {
-moz-border-start-width: 1px;
box-shadow: -1px 0 0 hsla(210,16%,76%,.15), 1px 0 0 hsla(210,16%,76%,.15) inset;
-moz-margin-start: 6px;
}
.highlighter-nodeinfobar-menu:-moz-locale-dir(rtl) {
box-shadow: 1px 0 0 hsla(210,16%,76%,.15), -1px 0 0 hsla(210,16%,76%,.15) inset;
}
.highlighter-nodeinfobar-menu > .toolbarbutton-menu-dropmarker {
-moz-appearance: none !important;
list-style-image: url("chrome://browser/skin/devtools/dropmarker.png");
-moz-box-align: center;
-moz-margin-start: -1px;
}
/* Highlighter - Node Infobar - box & arrow */
.highlighter-nodeinfobar-arrow {
width: 14px;
height: 14px;
-moz-margin-start: calc(50% - 7px);
transform: rotate(-45deg);
border: 1px solid transparent;
background-clip: padding-box;
background-repeat: no-repeat;
}
.highlighter-nodeinfobar-arrow-top {
margin-bottom: -8px;
margin-top: 8px;
border-right-color: hsla(210, 19%, 63%, .5);
border-top-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to top right, transparent 50%, hsl(209, 18%, 30%) 50%);
}
.highlighter-nodeinfobar-arrow-bottom {
margin-top: -8px;
margin-bottom: 8px;
border-left-color: hsla(210, 19%, 63%, .5);
border-bottom-color: hsla(210, 19%, 63%, .5);
background-image: linear-gradient(to bottom left, transparent 50%, hsl(210, 24%, 16%) 50%);
}
.highlighter-nodeinfobar-container[position="top"] > .highlighter-nodeinfobar,
.highlighter-nodeinfobar-container[position="overlap"] > .highlighter-nodeinfobar {
box-shadow: 0 1px 0 hsla(0, 0%, 100%, .1) inset;
}
.highlighter-nodeinfobar-container[hide-arrow] > .highlighter-nodeinfobar {
margin: 7px 0;
}
#full-screen-warning-message {
background-color: hsl(0,0%,15%);
color: white;
@ -2704,145 +2574,22 @@ html|*.highlighter-nodeinfobar-pseudo-classes {
font-size: 120%;
}
html|*#gcli-tooltip-frame,
html|*#gcli-output-frame {
padding: 0;
border-width: 0;
background-color: transparent;
/* Developer toolbar */
#developer-toolbar {
border-top: 1px solid hsla(211,68%,6%,.65) !important;
}
#gcli-output,
#gcli-tooltip {
border-width: 0;
background-color: transparent;
-moz-appearance: none;
margin-bottom: -2px;
}
.gclitoolbar-input-node,
.gclitoolbar-complete-node,
.gclitoolbar-prompt {
margin: 0;
-moz-margin-end: 5px;
-moz-box-align: center;
padding-top: 0;
padding-bottom: 0;
padding-right: 4px;
border: 1px solid transparent;
border-radius: 3px;
text-shadow: none;
}
%include ../shared/devtools/responsivedesign.inc.css
%include ../shared/devtools/highlighter.inc.css
%include ../shared/devtools/commandline.inc.css
.gclitoolbar-input-node {
padding-left: 20px;
background-color: transparent;
-moz-appearance: none;
border-color: hsl(210,24%,10%);
color: hsl(210,30%,85%);
text-shadow: 0 -1px 0 hsla(210,8%,5%,.45);
box-shadow: inset 0 1px 0 hsla(211,68%,6%,.05),
0 0 0 1px hsla(210,40%,83%,.1);
}
.gclitoolbar-input-node > .textbox-input-box > html|*.textbox-input::-moz-selection {
background-color: hsl(210,30%,85%);
color: hsl(210,24%,16%);
text-shadow: none;
}
.gclitoolbar-complete-node {
padding-left: 21px;
background-color: transparent;
color: transparent;
}
.gclitoolbar-prompt {
padding-left: 4px;
padding-bottom: 2px;
font-size: 150%;
font-weight: bold;
color: hsl(210,30%,85%);
background-color: hsl(210,24%,16%);
}
.gclitoolbar-prompt-label,
.gcli-in-incomplete,
.gcli-in-error,
.gcli-in-ontab,
.gcli-in-todo,
.gcli-in-closebrace,
.gcli-in-param,
.gcli-in-valid {
margin: 0;
padding: 0;
}
.gcli-in-incomplete {
border-bottom: 2px dotted #999;
}
.gcli-in-error {
border-bottom: 2px dotted #F00;
}
.gcli-in-ontab {
color: hsl(210,0%,35%);
}
.gcli-in-todo {
color: hsl(210,50%,35%);
}
.gcli-in-closebrace {
color: hsl(0,0%,80%);
}
/* Responsive Mode */
.browserContainer[responsivemode] {
background: #222 url("chrome://browser/skin/devtools/responsive-background.png");
padding: 0 20px 20px 20px;
}
.browserStack[responsivemode] {
box-shadow: 0 0 7px black;
}
.devtools-responsiveui-toolbar {
background: transparent;
margin: 10px 0;
padding: 0;
box-shadow: none;
border-bottom-width: 0;
}
.devtools-responsiveui-toolbar > menulist,
.devtools-responsiveui-toolbar > toolbarbutton {
min-width: 22px;
border-radius: 0;
}
.devtools-responsiveui-toolbar:-moz-locale-dir(ltr) > *:first-child,
.devtools-responsiveui-toolbar:-moz-locale-dir(rtl) > *:last-child {
margin-left: 0;
}
.devtools-responsiveui-resizebar {
width: 7px;
height: 24px;
cursor: ew-resize;
transform: translate(12px, -12px);
background-image: url("chrome://browser/skin/devtools/responsive-vertical-resizer.png");
}
.devtools-responsiveui-resizehandle {
width: 16px;
height: 16px;
cursor: se-resize;
transform: translate(12px, 12px);
background-image: url("chrome://browser/skin/devtools/responsive-se-resizer.png");
}
/* Web Console */
.web-console-frame {
@ -3011,153 +2758,39 @@ html|*#gcli-output-frame {
border-radius: inherit;
}
.chat-status-icon {
max-height: 16px;
max-width: 16px;
padding: 0;
}
.chat-toolbarbutton {
-moz-appearance: none;
border: none;
padding: 0;
margin: 0;
background: none;
}
.chat-toolbarbutton > .toolbarbutton-text {
display: none;
}
.chat-close-button {
list-style-image: url('chrome://browser/skin/social/chat-close.png');
-moz-image-region: rect(0, 14px, 14px, 0);
}
.chat-close-button:hover:active {
-moz-image-region: rect(14px, 14px, 28px, 0);
}
.chat-close-button:hover {
-moz-image-region: rect(28px, 14px, 42px, 0);
}
.chat-title {
font-weight: bold;
color: black;
text-shadow: none;
cursor: inherit;
}
%include ../shared/social/chat.inc.css
.chat-titlebar {
background-color: #c4cfde;
background-image: linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,0));
height: 20px;
min-height: 20px;
width: 100%;
margin: 0;
padding: 2px;
-moz-padding-start: 6px;
border: none;
border-bottom: 1px solid #ccc;
cursor: pointer;
}
.chat-titlebar[minimized="true"] {
border-bottom: none;
}
.chat-titlebar[selected] {
background-color: #dae3f0;
}
.chat-titlebar[activity] {
background-image: radial-gradient(ellipse closest-side at center, rgb(255,255,255), rgba(255,255,255,0));
background-repeat: no-repeat;
background-size: 100% 20px;
background-position: 0 -10px;
}
.chat-frame {
padding: 0;
margin: 0;
overflow: hidden;
}
.chatbar-button {
/* XXX get a real image for this */
-moz-appearance: none;
list-style-image: url("chrome://browser/skin/social/social.png");
background-color: #c4cfde;
border: none;
margin: 0;
padding: 2px;
height: 21px;
width: 21px;
border-top: 1px solid #ccc;
-moz-border-end: 1px solid #ccc;
}
.chatbar-button > menupopup > .menuitem-iconic > .menu-iconic-left > .menu-iconic-icon {
width: auto;
height: auto;
max-height: 16px;
max-width: 16px;
}
.chatbar-button > .toolbarbutton-icon {
opacity: .6;
-moz-margin-end: 0;
}
.chatbar-button:hover > .toolbarbutton-icon,
.chatbar-button[open="true"] > .toolbarbutton-icon {
opacity: 1;
}
.chatbar-button[open="true"] {
background-color: #dae3f0;
box-shadow: inset 0 2px 5px rgba(0,0,0,0.6), 0 1px rgba(255,255,255,0.2);
}
.chatbar-button > .toolbarbutton-text,
.chatbar-button > .toolbarbutton-menu-dropmarker {
display: none;
}
.chatbar-button[activity]:not([open="true"]) {
background-image: radial-gradient(circle farthest-corner at center 3px, rgb(255,255,255) 3%, rgba(186,221,251,0.75) 40%, rgba(127,179,255,0.5) 80%, rgba(127,179,255,0.25));
}
.chatbar-button > menupopup > menuitem[activity] {
font-weight: bold;
}
.chatbar-innerbox {
background: transparent;
margin: -285px 0 0;
overflow: hidden;
}
chatbar {
-moz-margin-end: 20px;
}
chatbox {
height: 285px;
width: 260px;
-moz-margin-start: 4px;
background-color: white;
border: 1px solid #ccc;
border-bottom: none;
border-top-left-radius: 2.5px;
border-top-right-radius: 2.5px;
}
chatbox[minimized="true"] {
width: 160px;
height: 20px;
}
.click-to-play-plugins-notification-content {
margin: -10px;
border-radius: 4px;