Add Pale Moon

This commit is contained in:
NTD 2018-02-02 03:35:06 -05:00 • committed by Roy Tam
commit fe8028fa2e
1173 changed files with 143053 additions and 934 deletions

View file

@ -0,0 +1,15 @@
/* 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/. */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/*
* Status Popup
*/
statuspanel
{
-moz-binding: url("chrome://browser/content/statusbar/tabbrowser.xml#statuspanel");
}

View file

@ -0,0 +1,16 @@
/* 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/. */
if(!caligon) var caligon = {};
window.addEventListener("load", function buildS4E()
{
window.removeEventListener("load", buildS4E, false);
Components.utils.import("resource:///modules/statusbar/Status4Evar.jsm");
caligon.status4evar = new Status4Evar(window, gBrowser, gNavToolbox);
caligon.status4evar.setup();
}, false);

View file

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 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/. -->
<!DOCTYPE overlay SYSTEM "chrome://browser/locale/statusbar/statusbar-overlay.dtd">
<?xml-stylesheet href="chrome://browser/content/statusbar/overlay.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/skin/statusbar/overlay.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/skin/statusbar/dynamic.css" type="text/css" ?>
<overlay id="status4evar-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<stringbundleset id="stringbundleset">
<stringbundle id="bundle_status4evar" src="chrome://browser/locale/statusbar/overlay.properties" />
</stringbundleset>
<script type="application/javascript" src="chrome://browser/content/statusbar/overlay.js" />
<commandset>
<command id="S4E:Options" oncommand="caligon.status4evar.launchOptions(window);"/>
</commandset>
<popupset id="mainPopupSet">
<hbox id="status4evar-download-notification-container" mousethrough="always">
<vbox id="status4evar-download-notification-anchor">
<vbox id="status4evar-download-notification-icon" />
</vbox>
</hbox>
</popupset>
<menupopup id="menu_ToolsPopup">
<menuitem id="statusbar-options-fx" command="S4E:Options"
label="&status4evar.menu.options.label;"/>
</menupopup>
<menupopup id="appmenu_customizeMenu">
<menuitem id="statusbar-options-app" command="S4E:Options"
label="&status4evar.menu.options.label;"/>
</menupopup>
<toolbarpalette id="BrowserToolbarPalette">
<toolbaritem id="status4evar-status-widget"
title="&status4evar.status.widget.title;"
removable="true" flex="1" persist="width" width="100">
<label id="status4evar-status-text" flex="1" crop="end" value="&status4evar.status.widget.title;" />
</toolbaritem>
<toolbarbutton id="status4evar-download-button"
title="&status4evar.download.widget.title;"
class="toolbarbutton-1 chromeclass-toolbar-additional"
removable="true" collapsed="true" tooltip="_child"
oncommand="caligon.status4evar.downloadStatus.openUI(event)">
<stack id="status4evar-download-anchor" class="toolbarbutton-icon">
<vbox id="status4evar-download-icon" />
<vbox pack="end">
<progressmeter id="status4evar-download-progress-bar" mode="normal" value="0" collapsed="true" min="0" max="100" />
</vbox>
</stack>
<tooltip id="status4evar-download-tooltip" />
<label id="status4evar-download-label" value="&status4evar.download.widget.title;" class="toolbarbutton-text" crop="right" flex="1" />
</toolbarbutton>
<toolbaritem id="status4evar-progress-widget"
title="&status4evar.progress.widget.title;"
removable="true">
<progressmeter id="status4evar-progress-bar" class="progressmeter-statusbar"
mode="normal" value="0" collapsed="true" min="0" max="100" />
</toolbaritem>
<toolbarbutton id="status4evar-options-button"
title="&status4evar.options.widget.title;"
class="toolbarbutton-1 chromeclass-toolbar-additional"
label="&status4evar.options.widget.label;"
removable="true" command="S4E:Options" tooltiptext="&status4evar.options.widget.title;" />
</toolbarpalette>
<statusbar id="status-bar" ordinal="1" />
</overlay>

View file

@ -0,0 +1,11 @@
/* 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/. */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
.css-bg-editor
{
-moz-binding: url("chrome://browser/content/statusbar/prefs.xml#css-bg-editor");
}

View file

@ -0,0 +1,274 @@
/* 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/. */
Components.utils.import("resource://gre/modules/Services.jsm");
var status4evarPrefs =
{
get dynamicProgressStyle()
{
let styleSheets = window.document.styleSheets;
for(let i = 0; i < styleSheets.length; i++)
{
let styleSheet = styleSheets[i];
if(styleSheet.href == "chrome://browser/skin/statusbar/dynamic.css")
{
delete this.dynamicProgressStyle;
return this.dynamicProgressStyle = styleSheet;
}
}
return null;
},
//
// Status timeout management
//
get statusTimeoutPref()
{
delete this.statusTimeoutPref;
return this.statusTimeoutPref = document.getElementById("status4evar-pref-status-timeout");
},
get statusTimeoutCheckbox()
{
delete this.statusTimeoutCheckbox;
return this.statusTimeoutCheckbox = document.getElementById("status4evar-status-timeout-check");
},
statusTimeoutChanged: function()
{
if(this.statusTimeoutPref.value > 0)
{
this.statusTimeoutPref.disabled = false;
this.statusTimeoutCheckbox.checked = true;
}
else
{
this.statusTimeoutPref.disabled = true;
this.statusTimeoutCheckbox.checked = false;
}
},
statusTimeoutSync: function()
{
this.statusTimeoutChanged();
return undefined;
},
statusTimeoutToggle: function()
{
if(this.statusTimeoutPref.disabled == this.statusTimeoutCheckbox.checked)
{
if(this.statusTimeoutCheckbox.checked)
{
this.statusTimeoutPref.value = 10;
}
else
{
this.statusTimeoutPref.value = 0;
}
}
},
//
// Status network management
//
get statusNetworkPref()
{
delete this.statusNetworkPref;
return this.statusNetworkPref = document.getElementById("status4evar-pref-status-network");
},
get statusNetworkXHRPref()
{
delete this.statusNetworkXHRPref;
return this.statusNetworkXHRPref = document.getElementById("status4evar-pref-status-network-xhr");
},
statusNetworkChanged: function()
{
this.statusNetworkXHRPref.disabled = ! this.statusNetworkPref.value;
},
statusNetworkSync: function()
{
this.statusNetworkChanged();
return undefined;
},
//
// Status Text langth managment
//
get textMaxLengthPref()
{
delete this.textMaxLengthPref;
return this.textMaxLengthPref = document.getElementById("status4evar-pref-status-toolbar-maxLength");
},
get textMaxLengthCheckbox()
{
delete this.textMaxLengthCheckbox;
return this.textMaxLengthCheckbox = document.getElementById("status4evar-status-toolbar-maxLength-check");
},
textLengthChanged: function()
{
if(this.textMaxLengthPref.value > 0)
{
this.textMaxLengthPref.disabled = false;
this.textMaxLengthCheckbox.checked = true;
}
else
{
this.textMaxLengthPref.disabled = true;
this.textMaxLengthCheckbox.checked = false;
}
},
textLengthSync: function()
{
this.textLengthChanged();
return undefined;
},
textLengthToggle: function()
{
if(this.textMaxLengthPref.disabled == this.textMaxLengthCheckbox.checked)
{
if(this.textMaxLengthCheckbox.checked)
{
this.textMaxLengthPref.value = 800;
}
else
{
this.textMaxLengthPref.value = 0;
}
}
},
//
// Toolbar progress style management
//
get progressToolbarStylePref()
{
delete this.progressToolbarStylePref;
return this.progressToolbarStylePref = document.getElementById("status4evar-pref-progress-toolbar-style");
},
get progressToolbarCSSPref()
{
delete this.progressToolbarCSSPref;
return this.progressToolbarCSSPref = document.getElementById("status4evar-pref-progress-toolbar-css");
},
get progressToolbarProgress()
{
delete this.progressToolbarProgress;
return this.progressToolbarProgress = document.getElementById("status4evar-progress-bar");
},
progressToolbarCSSChanged: function()
{
if(!this.progressToolbarCSSPref.value)
{
this.progressToolbarCSSPref.value = "#33FF33";
}
this.dynamicProgressStyle.cssRules[1].style.background = this.progressToolbarCSSPref.value;
},
progressToolbarStyleChanged: function()
{
this.progressToolbarCSSChanged();
this.progressToolbarCSSPref.disabled = !this.progressToolbarStylePref.value;
if(this.progressToolbarStylePref.value)
{
this.progressToolbarProgress.setAttribute("s4estyle", true);
}
else
{
this.progressToolbarProgress.removeAttribute("s4estyle");
}
},
progressToolbarStyleSync: function()
{
this.progressToolbarStyleChanged();
return undefined;
},
//
// Download progress management
//
get downloadProgressCheck()
{
delete this.downloadProgressCheck;
return this.downloadProgressCheck = document.getElementById("status4evar-download-progress-check");
},
get downloadProgressPref()
{
delete this.downloadProgressPref;
return this.downloadProgressPref = document.getElementById("status4evar-pref-download-progress");
},
get downloadProgressColorActivePref()
{
delete this.downloadProgressActiveColorPref;
return this.downloadProgressActiveColorPref = document.getElementById("status4evar-pref-download-color-active");
},
get downloadProgressColorPausedPref()
{
delete this.downloadProgressPausedColorPref;
return this.downloadProgressPausedColorPref = document.getElementById("status4evar-pref-download-color-paused");
},
downloadProgressSync: function()
{
let val = this.downloadProgressPref.value;
this.downloadProgressColorActivePref.disabled = (val == 0);
this.downloadProgressColorPausedPref.disabled = (val == 0);
this.downloadProgressPref.disabled = (val == 0);
this.downloadProgressCheck.checked = (val != 0);
return ((val == 0) ? 1 : val);
},
downloadProgressToggle: function()
{
let enabled = this.downloadProgressCheck.checked;
this.downloadProgressPref.value = ((enabled) ? 1 : 0);
},
//
// Pref Window load
//
get downloadButtonActionCommandPref()
{
delete this.downloadButtonActionCommandPref;
return this.downloadButtonActionCommandPref = document.getElementById("status4evar-pref-download-button-action-command");
},
get downloadButtonActionThirdPartyItem()
{
delete this.downloadButtonActionThirdPartyItem;
return this.downloadButtonActionThirdPartyItem = document.getElementById("status4evar-download-button-action-menu-thirdparty");
},
onPrefWindowLoad: function()
{
if(!this.downloadButtonActionCommandPref.value)
{
this.downloadButtonActionThirdPartyItem.disabled = true;
}
},
onPrefWindowUnLoad: function()
{
}
}
var XULBrowserWindow = {
}

View file

@ -0,0 +1,704 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 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/. -->
<!DOCTYPE bindings SYSTEM "chrome://browser/locale/statusbar/statusbar-prefs.dtd">
<bindings id="status4evar-prefs-bindings"
xmlns="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:xbl="http://www.mozilla.org/xbl">
<binding id="css-bg-editor">
<content sizetopopup="pref">
<xul:vbox flex="1">
<xul:deck anonid="css-bg-editor-deck" flex="1">
<xul:vbox>
<xul:hbox align="center">
<xul:label xbl:inherits="disabled">&status4evar.editor.css.color.label;</xul:label>
<xul:colorpicker anonid="css-bg-editor-color" type="button" onchange="this._editor._buildCSS();" xbl:inherits="disabled" />
</xul:hbox>
<xul:hbox align="center">
<xul:label xbl:inherits="disabled">&status4evar.editor.css.image.label;</xul:label>
<xul:textbox anonid="css-bg-editor-image" readonly="true" flex="1" xbl:inherits="disabled" />
<xul:button anonid="css-bg-editor-image-browse" label="&status4evar.option.browse;" oncommand="this._editor._imageBrowse();" xbl:inherits="disabled" />
</xul:hbox>
<xul:hbox align="center" pack="end">
<xul:button anonid="css-bg-editor-image-clear" label="&status4evar.option.clear;" oncommand="this._editor._imageClear();" xbl:inherits="disabled=no-image" />
</xul:hbox>
<xul:hbox>
<xul:groupbox pack="center">
<xul:caption label="" />
<xul:hbox flex="1" align="center">
<xul:label>X</xul:label>
</xul:hbox>
<xul:separator class="groove" orient="horizontal" />
<xul:hbox flex="1" align="center">
<xul:label>Y</xul:label>
</xul:hbox>
</xul:groupbox>
<xul:groupbox>
<xul:caption label="&status4evar.editor.css.image.repeat;" xbl:inherits="disabled=no-image" />
<xul:menulist anonid="css-bg-editor-image-repeat-x" sizetopopup="always" onselect="this._editor._buildCSS();" xbl:inherits="disabled=no-image">
<xul:menupopup>
<xul:menuitem label="&status4evar.option.no-repeat;" value="no-repeat" />
<xul:menuitem label="&status4evar.option.repeat;" value="repeat" />
<!--
<xul:menuitem label="&status4evar.option.space;" value="space" />
<xul:menuitem label="&status4evar.option.round;" value="round" />
-->
</xul:menupopup>
</xul:menulist>
<xul:separator class="groove" orient="horizontal" />
<xul:menulist anonid="css-bg-editor-image-repeat-y" sizetopopup="always" onselect="this._editor._buildCSS();" xbl:inherits="disabled=no-image">
<xul:menupopup>
<xul:menuitem label="&status4evar.option.no-repeat;" value="no-repeat" />
<xul:menuitem label="&status4evar.option.repeat;" value="repeat" />
<!--
<xul:menuitem label="&status4evar.option.space;" value="space" />
<xul:menuitem label="&status4evar.option.round;" value="round" />
-->
</xul:menupopup>
</xul:menulist>
</xul:groupbox>
<xul:groupbox>
<xul:caption label="&status4evar.editor.css.image.position;" xbl:inherits="disabled=no-image" />
<xul:menulist anonid="css-bg-editor-image-position-x" sizetopopup="always" onselect="this._editor._updatePositionX();" xbl:inherits="disabled=no-image">
<xul:menupopup>
<xul:menuitem label="&status4evar.option.left;" value="left" />
<xul:menuitem label="&status4evar.option.center;" value="center" />
<xul:menuitem label="&status4evar.option.right;" value="right" />
<xul:menuitem label="&status4evar.option.offset;" value="offset" />
</xul:menupopup>
</xul:menulist>
<xul:separator class="groove" orient="horizontal" />
<xul:menulist anonid="css-bg-editor-image-position-y" sizetopopup="always" onselect="this._editor._updatePositionY();" xbl:inherits="disabled=no-image">
<xul:menupopup>
<xul:menuitem label="&status4evar.option.top;" value="top" />
<xul:menuitem label="&status4evar.option.center;" value="center" />
<xul:menuitem label="&status4evar.option.bottom;" value="bottom" />
<xul:menuitem label="&status4evar.option.offset;" value="offset" />
</xul:menupopup>
</xul:menulist>
</xul:groupbox>
<xul:groupbox>
<xul:caption label="&status4evar.editor.css.image.offset;" xbl:inherits="disabled=no-image" />
<xul:hbox>
<xul:textbox anonid="css-bg-editor-image-offset-x" type="number" size="4" min="-65535" onchange="this._editor._buildCSS();" />
<xul:menulist anonid="css-bg-editor-image-offset-unit-x" sizetopopup="always" onselect="this._editor._buildCSS();">
<xul:menupopup>
<xul:menuitem label="%" value="%" />
<xul:menuitem label="px" value="px" />
<xul:menuitem label="em" value="em" />
<xul:menuitem label="in" value="in" />
<xul:menuitem label="cm" value="cm" />
<xul:menuitem label="mm" value="mm" />
<xul:menuitem label="pt" value="pt" />
<xul:menuitem label="pc" value="pc" />
</xul:menupopup>
</xul:menulist>
</xul:hbox>
<xul:separator class="groove" orient="horizontal" />
<xul:hbox>
<xul:textbox anonid="css-bg-editor-image-offset-y" type="number" size="4" min="-65535" onchange="this._editor._buildCSS();" />
<xul:menulist anonid="css-bg-editor-image-offset-unit-y" sizetopopup="always" onselect="this._editor._buildCSS();">
<xul:menupopup>
<xul:menuitem label="%" value="%" />
<xul:menuitem label="px" value="px" />
<xul:menuitem label="em" value="em" />
<xul:menuitem label="in" value="in" />
<xul:menuitem label="cm" value="cm" />
<xul:menuitem label="mm" value="mm" />
<xul:menuitem label="pt" value="pt" />
<xul:menuitem label="pc" value="pc" />
</xul:menupopup>
</xul:menulist>
</xul:hbox>
</xul:groupbox>
</xul:hbox>
</xul:vbox>
<xul:textbox anonid="css-bg-editor-css-text" multiline="true" rows="6" xbl:inherits="disabled" />
</xul:deck>
</xul:vbox>
<xul:hbox align="center" pack="end">
<children includes="progressmeter|toolbox" />
<xul:label xbl:inherits="disabled">&status4evar.editor.label;</xul:label>
<xul:menulist anonid="css-bg-editor-mode-menu" sizetopopup="always" onselect="this._editor._updateMode();" xbl:inherits="disabled">
<xul:menupopup>
<xul:menuitem label="&status4evar.option.simple;" />
<xul:menuitem label="&status4evar.option.advanced;" />
</xul:menupopup>
</xul:menulist>
</xul:hbox>
</content>
<implementation>
<constructor><![CDATA[
[
"_editorColor",
"_editorImageBrowse",
"_editorImageClear",
"_editorImageRepeatX",
"_editorImageRepeatY",
"_editorImagePositionX",
"_editorImagePositionY",
"_editorImageOffsetX",
"_editorImageOffsetY",
"_editorImageOffsetUnitX",
"_editorImageOffsetUnitY",
"_editorMode"
].forEach(function(prop)
{
this[prop]._editor = this;
}, this);
this.setAdvanced(true, false);
]]></constructor>
<destructor><![CDATA[
]]></destructor>
<field name="_disableBuildCSS"><![CDATA[
true
]]></field>
<field name="_editorColor" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-color");
]]></field>
<field name="_editorCSS" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-css-text");
]]></field>
<field name="_editorDeck" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-deck");
]]></field>
<field name="_editorImage" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image");
]]></field>
<field name="_editorImageBrowse" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-browse");
]]></field>
<field name="_editorImageClear" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-clear");
]]></field>
<field name="_editorImageRepeatX" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-repeat-x");
]]></field>
<field name="_editorImageRepeatY" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-repeat-y");
]]></field>
<field name="_editorImagePositionX" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-position-x");
]]></field>
<field name="_editorImagePositionY" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-position-y");
]]></field>
<field name="_editorImageOffsetX" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-offset-x");
]]></field>
<field name="_editorImageOffsetY" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-offset-y");
]]></field>
<field name="_editorImageOffsetUnitX" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-offset-unit-x");
]]></field>
<field name="_editorImageOffsetUnitY" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-image-offset-unit-y");
]]></field>
<field name="_editorMode" readonly="true"><![CDATA[
document.getAnonymousElementByAttribute(this, "anonid", "css-bg-editor-mode-menu");
]]></field>
<field name="_initialized"><![CDATA[
false
]]></field>
<field name="_reRGB" readonly="true"><![CDATA[
/^rgb\((\d+), (\d+), (\d+)\)$/
]]></field>
<field name="_reURL" readonly="true"><![CDATA[
/^url\(\s*['"]?(.+?)['"]?\s*\)$/
]]></field>
<field name="_reBgPosition" readonly="true"><![CDATA[
/^(left|center|right)? ?(-?\d+[^\s\d]+)? ?(top|center|bottom)? ?(-?\d+[^\s\d]+)?$/
]]></field>
<field name="_reCSSUnit" readonly="true"><![CDATA[
/^(-?\d+)([^\s\d]+)$/
]]></field>
<field name="_strings" readonly="true"><![CDATA[
document.getElementById("bundle_status4evar");
]]></field>
<property name="value">
<getter><![CDATA[
return this._editorCSS.value;
]]></getter>
<setter><![CDATA[
this._editorCSS.value = val;
if(!this._initialized)
{
this.setAdvanced(false, false);
this._initialized = true;
}
return val;
]]></setter>
</property>
<property name="disabled">
<getter><![CDATA[
return this.getAttribute("disabled") == "true";
]]></getter>
<setter><![CDATA[
if(val)
{
this.setAttribute("disabled", "true");
}
else
{
this.removeAttribute("disabled");
}
this._updateImageControllDisable();
return val;
]]></setter>
</property>
<method name="setAdvanced">
<parameter name="aVal"/>
<parameter name="aPrompt"/>
<body><![CDATA[
if(!aVal)
{
let success = this._parseCSS();
if(!success)
{
let result = aPrompt && Services.prompt.confirm(window,
this._strings.getString("simpleEditorTitle"),
this._strings.getString("simpleEditorMessage"));
if(result)
{ // Continue to simple mode
this._buildCSS();
}
else
{ // Stay on advanced mode
aVal = true;
}
}
}
this._disableBuildCSS = aVal;
this._editorDeck.selectedIndex = ((aVal) ? 1 : 0);
this._editorMode.selectedIndex = ((aVal) ? 1 : 0);
]]></body>
</method>
<method name="_buildCSS">
<body><![CDATA[
if(this._disableBuildCSS)
{
return;
}
let cssVal = this._editorColor.color;
let imgVal = this._editorImage.value;
if(imgVal)
{
cssVal += " url(\"" + imgVal + "\")";
//
// Print the background repeat
//
let bgRX = this._editorImageRepeatX.value;
let bgRY = this._editorImageRepeatY.value;
if(bgRX == "repeat" && bgRY == "no-repeat")
{
cssVal += " repeat-x";
}
else if(bgRX == "no-repeat" && bgRY == "repeat")
{
cssVal += " repeat-y";
}
else
{
cssVal += " " + bgRX;
if(bgRX != bgRY)
{
cssVal += " " + bgRY;
}
}
//
// Print the background position
//
let bgPX = this._editorImagePositionX.value;
let bgPOX = this._editorImageOffsetX.value;
if(bgPX != "offset")
{
cssVal += " " + bgPX;
}
else
{
cssVal += " " + bgPOX + this._editorImageOffsetUnitX.value;
}
let bgPY = this._editorImagePositionY.value;
let bgPOY = this._editorImageOffsetY.value;
if(bgPY != "offset")
{
cssVal += " " + bgPY;
}
else
{
cssVal += " " + bgPOY + this._editorImageOffsetUnitY.value;
}
}
this._editorCSS.value = cssVal;
let event = document.createEvent("Event");
event.initEvent("change", true, true);
this._editorCSS.dispatchEvent(event);
]]></body>
</method>
<method name="_parseCSS">
<body><![CDATA[
let retVal = true;
let cssParser = document.createElement("div");
cssParser.style.background = this._editorCSS.value;
if(!cssParser.style.background)
{
Components.utils.reportError("Error parsing background CSS rule: " + this._editorCSS.value);
cssParser.style.background = "#33FF33";
retVal = false;
}
//
// Parse the background color
//
let bgC = cssParser.style.backgroundColor;
if(this._reRGB.test(bgC))
{
let digits = this._reRGB.exec(bgC);
let red = parseInt(digits[1]);
let green = parseInt(digits[2]);
let blue = parseInt(digits[3]);
let rgb = blue | (green << 8) | (red << 16);
bgC = "#" + rgb.toString(16);
}
else
{
Components.utils.reportError("Error parsing background-color value: " + bgC);
bgC = "#33FF33";
retVal = false;
}
//
// Parse the background image
//
let bgI = cssParser.style.backgroundImage;
if(bgI != "none" && !this._reURL.test(bgI))
{
Components.utils.reportError("Error parsing background-image value: " + bgI);
bgI = "none";
retVal = false;
}
bgI = ((bgI != "none") ? this._reURL.exec(bgI)[1].trim() : "");
//
// Parse the background repeat
//
let bgR = cssParser.style.backgroundRepeat.split(" ");
let bgRX = bgR[0];
if(bgRX == "repeat-x")
{
bgRX = "repeat";
}
else if(bgRX == "repeat-y")
{
bgRX = "no-repeat";
}
let bgRY = bgR[bgR.length - 1];
if(bgRY == "repeat-x")
{
bgRY = "no-repeat";
}
else if(bgRY == "repeat-y")
{
bgRY = "repeat";
}
//
// Parse the background position
//
let bgP = cssParser.style.backgroundPosition;
let bgPParts = this._reBgPosition.exec(bgP);
let bgPValues = new Array();
for(let i = 1; i <= 4; i++)
{
if(bgPParts[i])
{
bgPValues.push({
"value": bgPParts[i],
"group": i
});
}
}
if(bgPValues.length == 1)
{
bgPValues.splice(((bgPValues[0].group == 2) ? 0 : 1), 0, {
"value": "center",
"group": ((bgPValues[0].group == 2) ? 0 : 2)
});
}
if(bgPValues.length == 2 && bgPValues[1].group == 2)
{
bgPValues[1].group = 4;
}
for(let i = 0; i < 4; i++)
{
let group = (i + 1);
if(bgPValues[i] != undefined && bgPValues[i].group == group)
{
continue;
}
let tmp = "0px";
switch(i)
{
case 0:
tmp = "offset";
break;
case 2:
tmp = "offset";
break;
}
bgPValues.splice(i, 0, {
"value": tmp,
"group": group
});
}
let bgPOXParts = this._reCSSUnit.exec(bgPValues[1].value);
let bgPOYParts = this._reCSSUnit.exec(bgPValues[3].value);
//
// Parse the background size
//
//
// Initialize the UI
//
let disableBuildCSS = this._disableBuildCSS;
this._disableBuildCSS = true;
this._editorColor.color = bgC;
this._editorImage.value = bgI;
this._editorImageOffsetX.value = bgPOXParts[1];
this._editorImageOffsetY.value = bgPOYParts[1];
[
[this._editorImageRepeatX, bgRX, "repeat", "repeat X"],
[this._editorImageRepeatY, bgRY, "repeat", "repeat Y"],
[this._editorImagePositionX, bgPValues[0].value, "left", "position X"],
[this._editorImagePositionY, bgPValues[2].value, "top", "position Y"],
[this._editorImageOffsetUnitX, bgPOXParts[2], "px", "offset X unit"],
[this._editorImageOffsetUnitY, bgPOYParts[2], "px", "offset Y unit"]
].forEach(function(info)
{
if(!this._setSelectedItemSafe(info[0], info[1], info[2]))
{
Components.utils.reportError("Error setting " + info[3] + " to " + info[1]);
retVal = false;
}
}, this);
this._updateImageControllDisable();
this._disableBuildCSS = disableBuildCSS;
return retVal;
]]></body>
</method>
<method name="_imageBrowse">
<body><![CDATA[
let nsIFilePicker = Components.interfaces.nsIFilePicker;
let filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
filePicker.init(window, this._strings.getString("imageSelectTitle"), nsIFilePicker.modeOpen);
filePicker.appendFilters(nsIFilePicker.filterImages);
let res = filePicker.show();
if(res == nsIFilePicker.returnOK)
{
this._editorImage.value = Services.io.newFileURI(filePicker.file).spec;
this._updateImageControllDisable();
this._buildCSS();
}
]]></body>
</method>
<method name="_imageClear">
<body><![CDATA[
this._editorImage.value = "";
this._editorImageRepeatX.value = "repeat";
this._editorImageRepeatY.value = "repeat";
this._editorImagePositionX.value = "left";
this._editorImagePositionY.value = "top";
this._editorImageOffsetX.value = 0;
this._editorImageOffsetY.value = 0;
this._editorImageOffsetUnitX.value = "px";
this._editorImageOffsetUnitY.value = "px";
this._updateImageControllDisable();
this._buildCSS();
]]></body>
</method>
<method name="_processEvent">
<parameter name="event"/>
<body><![CDATA[
if(!("css-bg-editor-css-text" == event.originalTarget.getAttribute("anonid")
|| "css-bg-editor-css-text" == document.getBindingParent(event.originalTarget).getAttribute("anonid")))
{
event.stopPropagation();
}
//Components.utils.reportError("Editor event " + event.type + " on " + event.originalTarget.tagName + "::" + event.originalTarget.getAttribute("anonid"));
]]></body>
</method>
<method name="_setSelectedItemSafe">
<parameter name="aElement"/>
<parameter name="aValue"/>
<parameter name="aDefault"/>
<body><![CDATA[
aElement.value = aValue;
if(!aElement.selectedItem || aElement.selectedItem.value != aValue)
{
aElement.value = aDefault;
return false;
}
return true;
]]></body>
</method>
<method name="_updateImageControllDisable">
<body><![CDATA[
if(this.disabled || !this._editorImage.value)
{
this.setAttribute("no-image", "true");
this._updatePositionOffsetXDisabled(true);
this._updatePositionOffsetYDisabled(true);
}
else
{
this.removeAttribute("no-image");
this._updatePositionOffsetXDisabled(false);
this._updatePositionOffsetYDisabled(false);
}
]]></body>
</method>
<method name="_updateMode">
<body><![CDATA[
if(this._editorMode.selectedIndex == this._editorDeck.selectedIndex)
{
return;
}
this.setAdvanced(((this._editorMode.selectedIndex == 1) ? true : false), true);
]]></body>
</method>
<method name="_updatePositionOffsetXDisabled">
<parameter name="aVal"/>
<body><![CDATA[
let bgPX = this._editorImagePositionX.value;
let disableOffsetX = aVal || (bgPX != "offset");// || bgPX == "center");
this._editorImageOffsetX.disabled = disableOffsetX;
this._editorImageOffsetUnitX.disabled = disableOffsetX;
]]></body>
</method>
<method name="_updatePositionOffsetYDisabled">
<parameter name="aVal"/>
<body><![CDATA[
let bgPY = this._editorImagePositionY.value;
var disableOffsetY = aVal || (bgPY != "offset");// || bgPY == "center");
this._editorImageOffsetY.disabled = disableOffsetY;
this._editorImageOffsetUnitY.disabled = disableOffsetY;
]]></body>
</method>
<method name="_updatePositionX">
<body><![CDATA[
this._updatePositionOffsetXDisabled(false);
this._buildCSS();
]]></body>
</method>
<method name="_updatePositionY">
<body><![CDATA[
this._updatePositionOffsetYDisabled(false);
this._buildCSS();
]]></body>
</method>
</implementation>
<handlers>
<handler event="command"><![CDATA[
this._processEvent(event);
]]></handler>
<handler event="change"><![CDATA[
this._processEvent(event);
]]></handler>
<handler event="input"><![CDATA[
this._processEvent(event);
]]></handler>
<handler event="select"><![CDATA[
this._processEvent(event);
]]></handler>
</handlers>
</binding>
</bindings>

View file

@ -0,0 +1,297 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 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/. -->
<!DOCTYPE prefwindow [
<!ENTITY % prefsDTD SYSTEM "chrome://browser/locale/statusbar/statusbar-prefs.dtd">
%prefsDTD;
]>
<?xml-stylesheet href="chrome://global/skin/config.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/skin/browser.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/content/statusbar/overlay.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/skin/statusbar/overlay.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/skin/statusbar/dynamic.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/content/statusbar/prefs.css" type="text/css" ?>
<?xml-stylesheet href="chrome://browser/skin/statusbar/prefs.css" type="text/css" ?>
<prefwindow id="status4evar-prefs" title="&status4evar.window.title;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="status4evarPrefs.onPrefWindowLoad();" onunload="status4evarPrefs.onPrefWindowUnLoad();">
<stringbundleset id="stringbundleset">
<stringbundle id="bundle_status4evar" src="chrome://browser/locale/statusbar/prefs.properties" />
</stringbundleset>
<script type="application/javascript" src="chrome://browser/content/statusbar/prefs.js" />
<prefpane id="status4evar-pane-status" label="&status4evar.pane.status;">
<preferences>
<preference id="status4evar-pref-status" name="status4evar.status" type="int" />
<preference id="status4evar-pref-status-default" name="status4evar.status.default" type="bool" />
<preference id="status4evar-pref-status-network" name="status4evar.status.network" type="bool"
onchange="status4evarPrefs.statusNetworkChanged();" />
<preference id="status4evar-pref-status-network-xhr" name="status4evar.status.network.xhr" type="bool" />
<preference id="status4evar-pref-status-timeout" name="status4evar.status.timeout" type="int"
onchange="status4evarPrefs.statusTimeoutChanged();" />
<preference id="status4evar-pref-status-linkOver" name="status4evar.status.linkOver" type="int" />
<preference id="status4evar-pref-status-linkOver-delay-show" name="status4evar.status.linkOver.delay.show" type="int" />
<preference id="status4evar-pref-status-linkOver-delay-hide" name="status4evar.status.linkOver.delay.hide" type="int" />
<preference id="status4evar-pref-status-toolbar-maxLength" name="status4evar.status.toolbar.maxLength" type="int"
onchange="status4evarPrefs.textLengthChanged();" />
<preference id="status4evar-pref-status-popup-invertMirror" name="status4evar.status.popup.invertMirror" type="bool" />
<preference id="status4evar-pref-status-popup-mouseMirror" name="status4evar.status.popup.mouseMirror" type="bool" />
<preference id="toolkit-pref-dom-status-change" name="dom.disable_window_status_change" type="bool" inverted="true" />
</preferences>
<commandset id="status4evar-commandset-status">
<command id="status4evar-command-status-timeout" oncommand="status4evarPrefs.statusTimeoutToggle();" />
<command id="status4evar-command-status-toolbar-maxLength" oncommand="status4evarPrefs.textLengthToggle();" />
</commandset>
<tabbox id="status4evar-tabbox-status" flex="1">
<tabs id="status4evar-tabs-status">
<tab id="status4evar-tab-status-general" label="&status4evar.tab.general;" />
<tab id="status4evar-tab-status-toolbar" label="&status4evar.tab.toolbar;" />
<tab id="status4evar-tab-status-popup" label="&status4evar.tab.popup;" />
</tabs>
<tabpanels id="status4evar-tabpanels-status" flex="1">
<tabpanel id="status4evar-tabpanel-status-general" orient="vertical">
<groupbox id="status4evar-status-general-status">
<caption label="&status4evar.status.general.status.caption;" />
<hbox align="center">
<label id="status4evar-status-label" control="status4evar-status-menu">&status4evar.status.label;</label>
<menulist id="status4evar-status-menu" preference="status4evar-pref-status" sizetopopup="always">
<menupopup>
<menuitem label="&status4evar.option.none;" value="0" />
<menuitem label="&status4evar.option.toolbar;" value="1" />
<menuitem label="&status4evar.option.popup;" value="3" />
</menupopup>
</menulist>
</hbox>
<hbox align="center">
<checkbox id="status4evar-status-timeout-check" label="&status4evar.status.timeout.label;"
command="status4evar-command-status-timeout" />
<textbox id="status4evar-status-timeout-value" preference="status4evar-pref-status-timeout" type="number" size="4"
onsyncfrompreference="return status4evarPrefs.statusTimeoutSync();" />
<label id="status4evar-status-timeout-unit">&status4evar.unit.seconds;</label>
</hbox>
<checkbox id="status4evar-status-default-check" preference="status4evar-pref-status-default" label="&status4evar.status.default.label;" />
<checkbox id="status4evar-status-network-check" preference="status4evar-pref-status-network" label="&status4evar.status.network.label;"
onsyncfrompreference="return status4evarPrefs.statusNetworkSync();" />
<hbox align="center" class="indent">
<checkbox id="status4evar-status-network-xhr-check" preference="status4evar-pref-status-network-xhr" label="&status4evar.status.network.xhr.label;" />
</hbox>
<checkbox id="toolkit-dom-status-change-check" preference="toolkit-pref-dom-status-change" label="&toolkit.dom.status.change.label;" />
</groupbox>
<groupbox id="status4evar-status-general-linkOver">
<caption label="&status4evar.status.general.linkOver.caption;" />
<hbox align="center">
<label id="status4evar-status-linkOver-label" control="status4evar-status-linkOver-menu">&status4evar.status.linkOver.label;</label>
<menulist id="status4evar-status-linkOver-menu" preference="status4evar-pref-status-linkOver" sizetopopup="always">
<menupopup>
<menuitem label="&status4evar.option.none;" value="0" />
<menuitem label="&status4evar.option.toolbar;" value="1" />
<menuitem label="&status4evar.option.popup;" value="3" />
</menupopup>
</menulist>
</hbox>
<hbox align="center">
<label id="status4evar-status-linkOver-delay-show-label" control="status4evar-status-linkOver-delay-show-value">&status4evar.status.linkOver.delay.show.label;</label>
<textbox id="status4evar-status-linkOver-delay-show-value" preference="status4evar-pref-status-linkOver-delay-show" type="number" size="5" />
<label id="status4evar-status-linkOver-delay-show-unit">&status4evar.unit.milliseconds;</label>
</hbox>
<hbox align="center">
<label id="status4evar-status-linkOver-delay-hide-label" control="status4evar-status-linkOver-delay-hide-value">&status4evar.status.linkOver.delay.hide.label;</label>
<textbox id="status4evar-status-linkOver-delay-hide-value" preference="status4evar-pref-status-linkOver-delay-hide" type="number" size="5" />
<label id="status4evar-status-linkOver-delay-hide-unit">&status4evar.unit.milliseconds;</label>
</hbox>
</groupbox>
</tabpanel>
<tabpanel id="status4evar-tabpanel-status-toolbar" orient="vertical">
<hbox align="center">
<checkbox id="status4evar-status-toolbar-maxLength-check" label="&status4evar.status.toolbar.maxLength.label;"
command="status4evar-command-status-toolbar-maxLength" />
<textbox id="status4evar-status-toolbar-maxLength-value" preference="status4evar-pref-status-toolbar-maxLength" type="number" size="4"
onsyncfrompreference="return status4evarPrefs.textLengthSync();" />
<label id="status4evar-status-toolbar-maxLength-unit">&status4evar.unit.px;</label>
</hbox>
</tabpanel>
<tabpanel id="status4evar-tabpanel-status-popup" orient="vertical">
<checkbox id="status4evar-status-popup-invertMirror-check" preference="status4evar-pref-status-popup-invertMirror" label="&status4evar.status.popup.invertMirror.label;" />
<checkbox id="status4evar-status-popup-mouseMirror-check" preference="status4evar-pref-status-popup-mouseMirror" label="&status4evar.status.popup.mouseMirror.label;" />
</tabpanel>
</tabpanels>
</tabbox>
</prefpane>
<prefpane id="status4evar-pane-progress" label="&status4evar.pane.progress;">
<preferences>
<preference id="status4evar-pref-progress-toolbar-force" name="status4evar.progress.toolbar.force" type="bool" />
<preference id="status4evar-pref-progress-toolbar-style" name="status4evar.progress.toolbar.style" type="bool"
onchange="status4evarPrefs.progressToolbarStyleChanged();" />
<preference id="status4evar-pref-progress-toolbar-css" name="status4evar.progress.toolbar.css" type="string"
onchange="status4evarPrefs.progressToolbarCSSChanged();" />
</preferences>
<commandset id="status4evar-commandset-status">
</commandset>
<checkbox id="status4evar-progress-toolbar-force-check" preference="status4evar-pref-progress-toolbar-force" label="&status4evar.progress.toolbar.force.label;" />
<checkbox id="status4evar-progress-toolbar-style-check" preference="status4evar-pref-progress-toolbar-style" label="&status4evar.progress.style.label;"
onsyncfrompreference="return status4evarPrefs.progressToolbarStyleSync();" />
<vbox class="css-bg-editor" preference="status4evar-pref-progress-toolbar-css" preference-editable="true" flex="1">
<progressmeter id="status4evar-progress-bar" value="75" flex="1" />
</vbox>
</prefpane>
<prefpane id="status4evar-pane-download" label="&status4evar.pane.download;">
<preferences>
<preference id="status4evar-pref-download-button-action" name="status4evar.download.button.action" type="int" />
<preference id="status4evar-pref-download-color-active" name="status4evar.download.color.active" type="string" />
<preference id="status4evar-pref-download-color-paused" name="status4evar.download.color.paused" type="string" />
<preference id="status4evar-pref-download-force" name="status4evar.download.force" type="bool" />
<preference id="status4evar-pref-download-label" name="status4evar.download.label" type="int" />
<preference id="status4evar-pref-download-label-force" name="status4evar.download.label.force" type="bool" />
<preference id="status4evar-pref-download-notify-animate" name="status4evar.download.notify.animate" type="bool" />
<preference id="status4evar-pref-download-notify-timeout" name="status4evar.download.notify.timeout" type="int" />
<preference id="status4evar-pref-download-progress" name="status4evar.download.progress" type="int" />
<preference id="status4evar-pref-download-tooltip" name="status4evar.download.tooltip" type="int" />
<preference id="status4evar-pref-download-button-action-command" name="status4evar.download.button.action.command" type="string"/>
</preferences>
<commandset id="status4evar-commandset-download">
<command id="status4evar-command-download-progress" oncommand="status4evarPrefs.downloadProgressToggle();" />
</commandset>
<checkbox id="status4evar-download-force-check" preference="status4evar-pref-download-force" label="&status4evar.download.force.label;" />
<checkbox id="status4evar-download-label-force-check" preference="status4evar-pref-download-label-force" label="&status4evar.download.label.force.label;" />
<hbox align="center">
<label id="status4evar-download-label-label" control="status4evar-download-label-menu">&status4evar.download.label.label;</label>
<menulist id="status4evar-download-label-menu" preference="status4evar-pref-download-label" sizetopopup="always">
<menupopup>
<menuitem value="0" label="&status4evar.option.dlcount;" />
<menuitem value="1" label="&status4evar.option.dltime;" />
<menuitem value="2" label="&status4evar.option.both;" />
</menupopup>
</menulist>
</hbox>
<hbox align="center">
<label id="status4evar-download-tooltip-label" control="status4evar-download-tooltip-menu">&status4evar.download.tooltip.label;</label>
<menulist id="status4evar-download-tooltip-menu" preference="status4evar-pref-download-tooltip" sizetopopup="always">
<menupopup>
<menuitem value="0" label="&status4evar.option.dlcount;" />
<menuitem value="1" label="&status4evar.option.dltime;" />
<menuitem value="2" label="&status4evar.option.both;" />
</menupopup>
</menulist>
</hbox>
<hbox align="center">
<label id="status4evar-download-button-action-label" control="status4evar-download-button-action-menu">&status4evar.download.button.action.label;</label>
<menulist id="status4evar-download-button-action-menu" preference="status4evar-pref-download-button-action" sizetopopup="always">
<menupopup>
<menuitem value="0" label="&status4evar.option.nothing;" />
<menuitem value="1" label="&status4evar.option.firefoxdefault;" />
<menuitem value="2" label="&status4evar.option.download.library;" />
<menuitem value="3" label="&status4evar.option.download.tab;" />
<menuitem value="4" label="&status4evar.option.download.thirdparty;" id="status4evar-download-button-action-menu-thirdparty" />
</menupopup>
</menulist>
</hbox>
<hbox align="center">
<label id="status4evar-download-notify-timeout-label" control="status4evar-download-notify-timeout-value">&status4evar.download.notify.timeout.label;</label>
<textbox id="status4evar-download-notify-timeout-value" preference="status4evar-pref-download-notify-timeout" type="number" size="3" />
<label id="status4evar-download-notify-timeout-unit">&status4evar.unit.seconds;</label>
</hbox>
<checkbox id="status4evar-download-notify-animate-check" preference="status4evar-pref-download-notify-animate" label="&status4evar.download.notify.animate.label;" />
<checkbox id="status4evar-download-progress-check" command="status4evar-command-download-progress" label="&status4evar.download.progress.label;" />
<vbox class="indent">
<hbox align="center">
<radiogroup id="status4evar-download-progress-radiogroup" preference="status4evar-pref-download-progress"
onsyncfrompreference="return status4evarPrefs.downloadProgressSync();">
<radio value="1" label="&status4evar.download.progress.average.label;" />
<radio value="2" label="&status4evar.download.progress.max.label;" />
<radio value="3" label="&status4evar.download.progress.min.label;" />
</radiogroup>
</hbox>
<hbox align="center">
<label id="status4evar-download-color-active-label" control="status4evar-download-color-active-picker">&status4evar.download.color.active.label;</label>
<colorpicker id="status4evar-download-color-active-picker" preference="status4evar-pref-download-color-active" type="button" />
</hbox>
<hbox align="center">
<label id="status4evar-download-color-paused-label" control="status4evar-download-color-paused-picker">&status4evar.download.color.paused.label;</label>
<colorpicker id="status4evar-download-color-paused-picker" preference="status4evar-pref-download-color-paused" type="button" />
</hbox>
</vbox>
</prefpane>
<prefpane id="status4evar-pane-addonbar" label="&status4evar.pane.statusbar;">
<preferences>
<preference id="status4evar-pref-addonbar-borderStyle" name="status4evar.addonbar.borderStyle" type="bool" />
<preference id="status4evar-pref-addonbar-closeButton" name="status4evar.addonbar.closeButton" type="bool" />
<preference id="status4evar-pref-addonbar-windowGripper" name="status4evar.addonbar.windowGripper" type="bool" />
</preferences>
<checkbox id="status4evar-addonbar-borderStyle-check" preference="status4evar-pref-addonbar-borderStyle" label="&status4evar.addonbar.borderStyle;" />
<checkbox id="status4evar-addonbar-closeButton-check" preference="status4evar-pref-addonbar-closeButton" label="&status4evar.addonbar.closeButton;" />
<checkbox id="status4evar-addonbar-windowGripper-check" preference="status4evar-pref-addonbar-windowGripper" label="&status4evar.addonbar.windowGripper;" />
</prefpane>
<prefpane id="status4evar-pane-advanced" label="&status4evar.pane.advanced;">
<preferences>
<preference id="status4evar-pref-advanced-status-detectFullScreen" name="status4evar.advanced.status.detectFullScreen" type="bool" />
<preference id="status4evar-pref-advanced-status-detectVideo" name="status4evar.advanced.status.detectVideo" type="bool" />
<preference id="browser-pref-urlbar-trimming-enabled" name="browser.urlbar.trimURLs" type="bool" />
</preferences>
<vbox flex="1">
<groupbox id="status4evar-status-urlbar-builtin">
<caption label="&status4evar.status.urlbar.firefox.builtin.caption;" />
<checkbox id="browser-urlbar-trimming-enabled-ckeck" preference="browser-pref-urlbar-trimming-enabled" label="&browser.urlbar.trimming.enabled.label;" />
</groupbox>
<groupbox id="status4evar-advanced-status">
<caption label="&status4evar.pane.status;" />
<checkbox id="status4evar-advanced-status-detectFullScreen-check" preference="status4evar-pref-advanced-status-detectFullScreen" label="&status4evar.advanced.status.detectFullScreen;" />
<checkbox id="status4evar-advanced-status-detectVideo-check" preference="status4evar-pref-advanced-status-detectVideo" label="&status4evar.advanced.status.detectVideo;" />
</groupbox>
</vbox>
</prefpane>
</prefwindow>

View file

@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 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/. -->
<bindings id="status4evar-bindings"
xmlns="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:xbl="http://www.mozilla.org/xbl">
<binding id="statuspanel" display="xul:hbox" extends="chrome://browser/content/tabbrowser.xml#statuspanel">
<implementation>
<!-- -->
<!-- Inverted mirror handling -->
<!-- -->
<field name="_invertMirror"><![CDATA[
false
]]></field>
<property name="invertMirror">
<setter><![CDATA[
this._invertMirror = val;
this.mirror = this._isMirrored;
return val;
]]></setter>
<getter><![CDATA[
return this._invertMirror;
]]></getter>
</property>
<!-- -->
<!-- Mouse mirror handling -->
<!-- -->
<field name="_mouseMirror"><![CDATA[
true
]]></field>
<field name="_mouseMirrorListen"><![CDATA[
false
]]></field>
<property name="mouseMirror">
<setter><![CDATA[
this._mouseMirror = val;
this.setupMouseMirror(this.value);
return val;
]]></setter>
<getter><![CDATA[
return this._mouseMirror;
]]></getter>
</property>
<method name="setupMouseMirror">
<parameter name="val"/>
<body><![CDATA[
if(val && this._mouseMirror)
{
this._calcMouseTargetRect();
if(!this._mouseMirrorListen)
{
MousePosTracker.addListener(this);
this._mouseMirrorListen = true;
}
}
else
{
this.mirror = false;
if(this._mouseMirrorListen)
{
MousePosTracker.removeListener(this);
this._mouseMirrorListen = false;
}
}
]]></body>
</method>
<method name="_calcMouseTargetRect">
<body><![CDATA[
let alignRight = false;
let isRTL = (getComputedStyle(document.documentElement).direction == "rtl");
if((this._invertMirror && !isRTL) || (!this._invertMirror && isRTL))
{
alignRight = true;
}
let rect = this.getBoundingClientRect();
this._mouseTargetRect =
{
top: rect.top,
bottom: rect.bottom,
left: ((alignRight) ? window.innerWidth - rect.width : 0),
right: ((alignRight) ? window.innerWidth : rect.width)
};
]]></body>
</method>
<method name="onMouseEnter">
<body><![CDATA[
this.mirror = true;
]]></body>
</method>
<method name="onMouseLeave">
<body><![CDATA[
this.mirror = false;
]]></body>
</method>
<!-- -->
<!-- Mirror handling -->
<!-- -->
<field name="_isMirrored"><![CDATA[
false
]]></field>
<property name="mirror">
<setter><![CDATA[
this._isMirrored = val;
if(this._invertMirror)
{
val = !val;
}
this.setBooleanAttr("mirror", val);
]]></setter>
<getter><![CDATA[
return this._isMirrored;
]]></getter>
</property>
<method name="_mirror">
<body><![CDATA[
this.mirror = !this._isMirrored;
]]></body>
</method>
<!-- -->
<!-- Value handling -->
<!-- -->
<property name="label">
<setter><![CDATA[
if(window.caligon && window.caligon.status4evar)
{
window.caligon.status4evar.statusService.setStatusText(val);
}
return undefined;
]]></setter>
<getter><![CDATA[
if(window.caligon && window.caligon.status4evar)
{
return window.caligon.status4evar.statusService.getStatusText();
}
return "";
]]></getter>
</property>
<property name="value">
<setter><![CDATA[
this.setValue(val);
this.setupMouseMirror(val);
return val;
]]></setter>
<getter><![CDATA[
return ((this.hasAttribute("inactive")) ? "" : this.getAttribute("label"));
]]></getter>
</property>
<method name="setValue">
<parameter name="val"/>
<body><![CDATA[
if((this.getAttribute("type") || "").indexOf("network") > -1 && (this.getAttribute("previoustype") || "").indexOf("network") > -1)
{
this.style.minWidth = getComputedStyle(this).width;
}
else
{
this.style.minWidth = "";
}
if(val)
{
this.setAttribute("label", val);
this.setBooleanAttr("inactive", false);
}
else
{
this.setBooleanAttr("inactive", true);
}
]]></body>
</method>
<!-- -->
<!-- Helpers -->
<!-- -->
<method name="setBooleanAttr">
<parameter name="name"/>
<parameter name="val"/>
<body><![CDATA[
if(val)
{
this.setAttribute(name, "true");
}
else
{
this.removeAttribute(name);
}
]]></body>
</method>
</implementation>
</binding>
</bindings>