зеркало из https://github.com/mozilla/gecko-dev.git
Prepatory work on wallet reorg
This commit is contained in:
Родитель
fa26301684
Коммит
c0689b6fe6
|
@ -0,0 +1,424 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is Mozilla Communicator client code, released March
|
||||
* 31, 1998.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape Communications
|
||||
* Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben "Count XULula" Goodger
|
||||
*/
|
||||
|
||||
/*** =================== INITIALISATION CODE =================== ***/
|
||||
|
||||
// globals
|
||||
var signonviewer = null;
|
||||
var signonList = [];
|
||||
var rejectList = [];
|
||||
var nopreviewList = [];
|
||||
var nocaptureList = [];
|
||||
var goneSS = ""; // signon
|
||||
var goneIS = ""; // ignored site
|
||||
var goneNP = ""; // nopreview
|
||||
var goneNC = ""; // nocapture
|
||||
var deleted_signons_count = 1;
|
||||
var deleted_rejects_count = 1;
|
||||
var deleted_nopreviews_count = 1;
|
||||
var deleted_nocaptures_count = 1;
|
||||
|
||||
// function : <SignonViewer.js>::Startup();
|
||||
// purpose : initialises interface, calls init functions for each page
|
||||
function Startup()
|
||||
{
|
||||
signonviewer = Components.classes["component://netscape/signonviewer/signonviewer-world"].createInstance();
|
||||
signonviewer = signonviewer.QueryInterface(Components.interfaces.nsISignonViewer);
|
||||
|
||||
doSetOKCancel(onOK, null); // init ok event handler
|
||||
|
||||
// remove wallet functions (unless overruled by the "wallet.enabled" pref)
|
||||
try {
|
||||
pref = Components.classes['component://netscape/preferences'];
|
||||
pref = pref.getService();
|
||||
pref = pref.QueryInterface(Components.interfaces.nsIPref);
|
||||
try {
|
||||
if (!pref.GetBoolPref("wallet.enabled")) {
|
||||
var element;
|
||||
element = document.getElementById("nopreview");
|
||||
element.setAttribute("style","display: none;" );
|
||||
element = document.getElementById("nocapture");
|
||||
element.setAttribute("style","display: none;" );
|
||||
}
|
||||
} catch(e) {
|
||||
dump("wallet.enabled pref is missing from all.js");
|
||||
}
|
||||
} catch (ex) {
|
||||
dump("failed to get prefs service!\n");
|
||||
pref = null;
|
||||
}
|
||||
|
||||
if (!LoadSignons()) {
|
||||
return; /* user failed to unlock the database */
|
||||
}
|
||||
LoadReject();
|
||||
LoadNopreview();
|
||||
LoadNocapture();
|
||||
}
|
||||
|
||||
/*** =================== SAVED SIGNONS CODE =================== ***/
|
||||
|
||||
// function : <SignonViewer.js>::LoadSignons();
|
||||
// purpose : reads signons from interface and loads into tree
|
||||
function LoadSignons()
|
||||
{
|
||||
signonList = signonviewer.GetSignonValue();
|
||||
if (signonList.length == 1) {
|
||||
/* user supplied invalid database key */
|
||||
window.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
var delim = signonList[0];
|
||||
signonList = signonList.split(delim);
|
||||
for(var i = 1; i < signonList.length; i++)
|
||||
{
|
||||
var currSignon = TrimString(signonList[i]);
|
||||
// TEMP HACK until morse fixes signon viewer functions
|
||||
currSignon = RemoveHTMLFormatting(currSignon);
|
||||
var site = currSignon.substring(0,currSignon.lastIndexOf(":"));
|
||||
var user = currSignon.substring(currSignon.lastIndexOf(":")+1,currSignon.length);
|
||||
AddItem("savesignonlist",[site,user],"signon_",i-1);
|
||||
}
|
||||
if (deleted_signons_count >= signonList.length) {
|
||||
document.getElementById("removeAllSignons").setAttribute("disabled","true");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteSignon();
|
||||
// purpose : deletes a particular signon
|
||||
function DeleteSignon()
|
||||
{
|
||||
deleted_signons_count += document.getElementById("signonstree").selectedItems.length;
|
||||
goneSS += DeleteItemSelected('signonstree','signon_','savesignonlist');
|
||||
DoButtonEnabling("signonstree");
|
||||
if (deleted_signons_count >= signonList.length) {
|
||||
document.getElementById("removeAllSignons").setAttribute("disabled","true");
|
||||
}
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteAllSignons();
|
||||
// purpose : deletes all the signons
|
||||
function DeleteAllSignons() {
|
||||
// delete selected item
|
||||
goneSS += DeleteAllItems(signonList.length, "signon_", "savesignonlist");
|
||||
if( !document.getElementById("removeSignon").disabled ) {
|
||||
document.getElementById("removeSignon").setAttribute("disabled", "true")
|
||||
}
|
||||
document.getElementById("removeAllSignons").setAttribute("disabled","true");
|
||||
}
|
||||
|
||||
/*** =================== IGNORED SIGNONS CODE =================== ***/
|
||||
|
||||
// function : <SignonViewer.js>::LoadReject();
|
||||
// purpose : reads rejected sites from interface and loads into tree
|
||||
function LoadReject()
|
||||
{
|
||||
rejectList = signonviewer.GetRejectValue();
|
||||
var delim = rejectList[0];
|
||||
rejectList = rejectList.split(delim);
|
||||
for(var i = 1; i < rejectList.length; i++)
|
||||
{
|
||||
var currSignon = TrimString(rejectList[i]);
|
||||
// TEMP HACK until morse fixes signon viewer functions
|
||||
currSignon = RemoveHTMLFormatting(currSignon);
|
||||
var site = currSignon.substring(0,currSignon.lastIndexOf(":"));
|
||||
var user = currSignon.substring(currSignon.lastIndexOf(":")+1,currSignon.length);
|
||||
AddItem("ignoredlist",[site],"reject_",i-1);
|
||||
}
|
||||
if (deleted_rejects_count >= rejectList.length) {
|
||||
document.getElementById("removeAllSites").setAttribute("disabled","true");
|
||||
}
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteIgnoredSite();
|
||||
// purpose : deletes ignored site(s)
|
||||
function DeleteIgnoredSite()
|
||||
{
|
||||
deleted_rejects_count += document.getElementById("ignoretree").selectedItems.length;
|
||||
goneIS += DeleteItemSelected('ignoretree','reject_','ignoredlist');
|
||||
DoButtonEnabling("ignoretree");
|
||||
if (deleted_rejects_count >= rejectList.length) {
|
||||
document.getElementById("removeAllSites").setAttribute("disabled","true");
|
||||
}
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteAllSites();
|
||||
// purpose : deletes all the ignored sites
|
||||
function DeleteAllSites() {
|
||||
// delete selected item
|
||||
goneIS += DeleteAllItems(rejectList.length, "reject_", "ignoredlist");
|
||||
if( !document.getElementById("removeIgnoredSite").disabled ) {
|
||||
document.getElementById("removeIgnoredSite").setAttribute("disabled", "true")
|
||||
}
|
||||
document.getElementById("removeAllSites").setAttribute("disabled","true");
|
||||
}
|
||||
|
||||
/*** =================== NO PREVIEW FORMS CODE =================== ***/
|
||||
|
||||
// function : <SignonViewer.js>::LoadNopreview();
|
||||
// purpose : reads non-previewed forms from interface and loads into tree
|
||||
function LoadNopreview()
|
||||
{
|
||||
nopreviewList = signonviewer.GetNopreviewValue();
|
||||
var delim = nopreviewList[0];
|
||||
nopreviewList = nopreviewList.split(delim);
|
||||
for(var i = 1; i < nopreviewList.length; i++)
|
||||
{
|
||||
var currSignon = TrimString(nopreviewList[i]);
|
||||
// TEMP HACK until morse fixes signon viewer functions
|
||||
currSignon = RemoveHTMLFormatting(currSignon);
|
||||
var form = currSignon.substring(currSignon.lastIndexOf(":")+1,currSignon.length);
|
||||
AddItem("nopreviewlist",[form],"nopreview_",i-1);
|
||||
}
|
||||
if (deleted_nopreviews_count >= nopreviewList.length) {
|
||||
document.getElementById("removeAllNopreviews").setAttribute("disabled","true");
|
||||
}
|
||||
}
|
||||
|
||||
// function : <SignonViewer>::DeleteNoPreviewForm()
|
||||
// purpose : deletes no-preview entry(s)
|
||||
function DeleteNoPreviewForm()
|
||||
{
|
||||
deleted_nopreviews_count += document.getElementById("nopreviewtree").selectedItems.length;
|
||||
goneNP += DeleteItemSelected('nopreviewtree','nopreview_','nopreviewlist');
|
||||
DoButtonEnabling("nopreviewtree");
|
||||
if (deleted_nopreviews_count >= nopreviewList.length) {
|
||||
document.getElementById("removeAllNopreviews").setAttribute("disabled","true");
|
||||
}
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteAllNopreviews();
|
||||
// purpose : deletes all the nopreview sites
|
||||
function DeleteAllNopreviews() {
|
||||
// delete selected item
|
||||
goneNP += DeleteAllItems(nopreviewList.length, "nopreview_", "nopreviewlist");
|
||||
if( !document.getElementById("removeNoPreview").disabled ) {
|
||||
document.getElementById("removeNoPreview").setAttribute("disabled", "true")
|
||||
}
|
||||
document.getElementById("removeAllNopreviews").setAttribute("disabled","true");
|
||||
}
|
||||
|
||||
/*** =================== NO CAPTURE FORMS CODE =================== ***/
|
||||
|
||||
// function : <SignonViewer.js>::LoadNocapture();
|
||||
// purpose : reads non-captured forms from interface and loads into tree
|
||||
function LoadNocapture()
|
||||
{
|
||||
nocaptureList = signonviewer.GetNocaptureValue();
|
||||
var delim = nocaptureList[0];
|
||||
nocaptureList = nocaptureList.split(delim);
|
||||
for(var i = 1; i < nocaptureList.length; i++)
|
||||
{
|
||||
var currSignon = TrimString(nocaptureList[i]);
|
||||
// TEMP HACK until morse fixes signon viewer functions
|
||||
currSignon = RemoveHTMLFormatting(currSignon);
|
||||
var form = currSignon.substring(currSignon.lastIndexOf(":")+1,currSignon.length);
|
||||
AddItem("nocapturelist",[form],"nocapture_",i-1);
|
||||
}
|
||||
if (deleted_nocaptures_count >= nocaptureList.length) {
|
||||
document.getElementById("removeAllNocaptures").setAttribute("disabled","true");
|
||||
}
|
||||
}
|
||||
|
||||
// function : <SignonViewer>::DeleteNoCaptureForm()
|
||||
// purpose : deletes no-capture entry(s)
|
||||
function DeleteNoCaptureForm()
|
||||
{
|
||||
deleted_nocaptures_count += document.getElementById("nocapturetree").selectedItems.length;
|
||||
goneNC += DeleteItemSelected('nocapturetree','nocapture_','nocapturelist');
|
||||
DoButtonEnabling("nocapturetree");
|
||||
if (deleted_nocaptures_count >= nocaptureList.length) {
|
||||
document.getElementById("removeAllNocaptures").setAttribute("disabled","true");
|
||||
}
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteAllNocaptures();
|
||||
// purpose : deletes all the nocapture sites
|
||||
function DeleteAllNocaptures() {
|
||||
// delete selected item
|
||||
goneNC += DeleteAllItems(nocaptureList.length, "nocapture_", "nocapturelist");
|
||||
if( !document.getElementById("removeNoCapture").disabled ) {
|
||||
document.getElementById("removeNoCapture").setAttribute("disabled", "true")
|
||||
}
|
||||
document.getElementById("removeAllNocaptures").setAttribute("disabled","true");
|
||||
}
|
||||
|
||||
/*** =================== GENERAL CODE =================== ***/
|
||||
|
||||
// function : <SignonViewer>::onOK()
|
||||
// purpose : dialog confirm & tidy up.
|
||||
function onOK()
|
||||
{
|
||||
var result = "|goneS|"+goneSS+"|goneR|"+goneIS;
|
||||
result += "|goneC|"+goneNC+"|goneP|"+goneNP+"|";
|
||||
signonviewer.SetValue(result, window);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*** =================== UTILITY FUNCTIONS =================== ***/
|
||||
|
||||
// function : <SignonViewer.js>::RemoveHTMLFormatting();
|
||||
// purpose : removes HTML formatting from input stream
|
||||
function RemoveHTMLFormatting(which)
|
||||
{
|
||||
var ignoreon = false;
|
||||
var rv = "";
|
||||
for(var i = 0; i < which.length; i++)
|
||||
{
|
||||
if(which.charAt(i) == "<")
|
||||
ignoreon = true;
|
||||
if(which.charAt(i) == ">") {
|
||||
ignoreon = false;
|
||||
continue;
|
||||
}
|
||||
if(ignoreon)
|
||||
continue;
|
||||
rv += which.charAt(i);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*** =================== TREE MANAGEMENT CODE =================== ***/
|
||||
|
||||
// function : <SignonViewer.js>::AddItem();
|
||||
// purpose : utility function for adding items to a tree.
|
||||
function AddItem(children,cells,prefix,idfier)
|
||||
{
|
||||
var kids = document.getElementById(children);
|
||||
var item = document.createElement("treeitem");
|
||||
var row = document.createElement("treerow");
|
||||
for(var i = 0; i < cells.length; i++)
|
||||
{
|
||||
var cell = document.createElement("treecell");
|
||||
cell.setAttribute("class", "propertylist");
|
||||
cell.setAttribute("value", cells[i])
|
||||
row.appendChild(cell);
|
||||
}
|
||||
item.appendChild(row);
|
||||
item.setAttribute("id",prefix + idfier);
|
||||
kids.appendChild(item);
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteItemSelected();
|
||||
// purpose : deletes all the signons that are selected
|
||||
function DeleteItemSelected(tree, prefix, kids) {
|
||||
var delnarray = [];
|
||||
var rv = "";
|
||||
var cookietree = document.getElementById(tree);
|
||||
selitems = cookietree.selectedItems;
|
||||
for(var i = 0; i < selitems.length; i++)
|
||||
{
|
||||
delnarray[i] = document.getElementById(selitems[i].getAttribute("id"));
|
||||
var itemid = parseInt(selitems[i].getAttribute("id").substring(prefix.length,selitems[i].getAttribute("id").length));
|
||||
rv += (itemid + ",");
|
||||
}
|
||||
for(var i = 0; i < delnarray.length; i++)
|
||||
{
|
||||
document.getElementById(kids).removeChild(delnarray[i]);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
// function : <SignonViewer.js>::DeleteAllItems();
|
||||
// purpose : deletes all the items
|
||||
function DeleteAllItems(length, prefix, kids) {
|
||||
var delnarray = [];
|
||||
var rv = "";
|
||||
for(var i = 0; i < length; i++)
|
||||
{
|
||||
if (document.getElementById(prefix+i) != null) {
|
||||
document.getElementById(kids).removeChild(document.getElementById(prefix+i));
|
||||
rv += (i + ",");
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
// function: <SignonViewer.js>::HandleKeyPress();
|
||||
// purpose : handles keypress events
|
||||
function HandleEvent( event, page )
|
||||
{
|
||||
// click event
|
||||
if( event.type == "click" ) {
|
||||
var node = event.target;
|
||||
while ( node.nodeName != "tree" )
|
||||
node = node.parentNode;
|
||||
var tree = node;
|
||||
DoButtonEnabling( node.id );
|
||||
}
|
||||
|
||||
// keypress event
|
||||
if( event.type == "keypress" && event.which == 46 ) {
|
||||
switch( page ) {
|
||||
case 0:
|
||||
DeleteSignon();
|
||||
break;
|
||||
case 1:
|
||||
DeleteIgnoredSite();
|
||||
break;
|
||||
case 2:
|
||||
DeleteNoPreviewForm();
|
||||
break;
|
||||
case 2:
|
||||
DeleteNoCaptureForm();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function DoButtonEnabling( treeid )
|
||||
{
|
||||
var tree = document.getElementById( treeid );
|
||||
switch( treeid ) {
|
||||
case "signonstree":
|
||||
var button = document.getElementById("removeSignon");
|
||||
break;
|
||||
case "ignoretree":
|
||||
var button = document.getElementById("removeIgnoredSite");
|
||||
break;
|
||||
case "nopreviewtree":
|
||||
var button = document.getElementById("removeNoPreview");
|
||||
break;
|
||||
case "nocapturetree":
|
||||
var button = document.getElementById("removeNoCapture");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if( button.getAttribute("disabled") && tree.selectedItems.length )
|
||||
button.removeAttribute("disabled", "true");
|
||||
else if( !button.getAttribute("disabled") && !tree.selectedItems.length )
|
||||
button.setAttribute("disabled","true");
|
||||
}
|
||||
|
||||
// Remove whitespace from both ends of a string
|
||||
function TrimString(string)
|
||||
{
|
||||
if (!string) return "";
|
||||
return string.replace(/(^\s+)|(\s+$)/g, '')
|
||||
}
|
|
@ -0,0 +1,165 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is Mozilla Communicator client code, released
|
||||
March 31, 1998.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Ben Goodger
|
||||
-->
|
||||
|
||||
<!-- CHANGE THIS WHEN MOVING FILES -->
|
||||
<?xml-stylesheet href="chrome://wallet/skin/" type="text/css"?>
|
||||
<?xul-overlay href="chrome://global/content/dialogOverlay.xul"?>
|
||||
|
||||
<!-- CHANGE THIS WHEN MOVING FILES -->
|
||||
<!DOCTYPE window SYSTEM "chrome://wallet/locale/SignonViewer.dtd" >
|
||||
|
||||
<window id="signonviewer"
|
||||
width="470" height="440"
|
||||
title="&windowtitle.label;"
|
||||
xmlns:html="http://www.w3.org/TR/REC-html40"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
align="vertical"
|
||||
class="dialog"
|
||||
onload="Startup()">
|
||||
|
||||
<html:script src="chrome://wallet/content/SignonViewer.js"/>
|
||||
<html:script src="chrome://global/content/strres.js" />
|
||||
|
||||
<tabcontrol flex="100%" align="vertical">
|
||||
<tabbox>
|
||||
<tab selected="true" value="&tab.signonsstored.label;"/>
|
||||
<tab value="&tab.signonsnotstored.label;"/>
|
||||
<tab id="nopreview" value="&tab.nopreview.label;"/>
|
||||
<tab id="nocapture" value="&tab.nocapture.label;"/>
|
||||
<spring flex="1"/>
|
||||
</tabbox>
|
||||
<tabpanel align="horizontal" style="width: 460px;">
|
||||
<!-- saved signons -->
|
||||
<box class="tabpanel" id="savedsignons" flex="100%" align="vertical">
|
||||
<box><html:div>&spiel.signonsstored.label;</html:div></box>
|
||||
<spring style="height: 10px;"/>
|
||||
<tree id="signonstree" class="inset" style="height: 280px; width: 440px;" align="vertical"
|
||||
onclick="HandleEvent(event);"
|
||||
onkeypress="HandleEvent(event,0)">
|
||||
<treecol width="45%"/>
|
||||
<treecol width="55%"/>
|
||||
<treehead>
|
||||
<treerow>
|
||||
<treecell value="&treehead.site.label;"/>
|
||||
<treecell value="&treehead.username.label;"/>
|
||||
</treerow>
|
||||
</treehead>
|
||||
<treechildren id="savesignonlist"/>
|
||||
</tree>
|
||||
<spring style="height: 5px;"/>
|
||||
<box align="horizontal">
|
||||
<titledbutton id="removeSignon" disabled="true" class="dialog push"
|
||||
value="&remove.label;" onclick="DeleteSignon();"/>
|
||||
<titledbutton id="removeAllSignons" class="dialog push"
|
||||
value="&removeall.label;"
|
||||
onclick="DeleteAllSignons();"/>
|
||||
</box>
|
||||
<spring style="height: 5px;"/>
|
||||
</box>
|
||||
<!-- ignored signon sites -->
|
||||
<box class="tabpanel" id="ignoredsites" flex="100%" align="vertical">
|
||||
<html:div>&spiel.signonsnotstored.label;</html:div>
|
||||
<spring style="height: 10px;"/>
|
||||
<tree id="ignoretree" class="inset" style="height: 280px; width: 440px;" align="vertical"
|
||||
onclick="HandleEvent(event);"
|
||||
onkeypress="HandleEvent(event,1)">
|
||||
<treecol width="100%"/>
|
||||
<treehead>
|
||||
<treerow>
|
||||
<treecell value="&treehead.site.label;"/>
|
||||
</treerow>
|
||||
</treehead>
|
||||
<treechildren id="ignoredlist"/>
|
||||
</tree>
|
||||
<spring style="height: 5px;"/>
|
||||
<box align="horizontal">
|
||||
<titledbutton id="removeIgnoredSite" disabled="true" class="dialog push"
|
||||
value="&remove.label;" onclick="DeleteIgnoredSite();"/>
|
||||
<titledbutton id="removeAllSites" class="dialog push"
|
||||
value="&removeall.label;"
|
||||
onclick="DeleteAllSites();"/>
|
||||
</box>
|
||||
<spring style="height: 5px;"/>
|
||||
</box>
|
||||
<!-- do not preview panel -->
|
||||
<box class="tabpanel" id="nopreviewforms" flex="100%" align="vertical">
|
||||
<html:div>&spiel.nopreview.label;</html:div>
|
||||
<spring style="height: 10px;"/>
|
||||
<tree id="nopreviewtree" class="inset" style="height: 280px; width: 440px;" align="vertical"
|
||||
onclick="HandleEvent(event);"
|
||||
onkeypress="HandleEvent(event,2)">
|
||||
<treecol width="100%"/>
|
||||
<treehead>
|
||||
<treerow>
|
||||
<treecell value="&treehead.site.label;"/>
|
||||
</treerow>
|
||||
</treehead>
|
||||
<treechildren id="nopreviewlist"/>
|
||||
</tree>
|
||||
<spring style="height: 5px;"/>
|
||||
<box align="horizontal">
|
||||
<titledbutton id="removeNoPreview" disabled="true" class="dialog push"
|
||||
value="&remove.label;" onclick="DeleteNoPreviewForm();"/>
|
||||
<titledbutton id="removeAllNopreviews" class="dialog push"
|
||||
value="&removeall.label;"
|
||||
onclick="DeleteAllNopreviews();"/>
|
||||
</box>
|
||||
<spring style="height: 5px;"/>
|
||||
</box>
|
||||
<!-- do not capture panel -->
|
||||
<box class="tabpanel" id="nocaptureforms" flex="100%" align="vertical">
|
||||
<html:div>&spiel.nocapture.label;</html:div>
|
||||
<spring style="height: 10px;"/>
|
||||
<tree id="nocapturetree" class="inset" style="height: 280px; width: 440px;" align="vertical"
|
||||
onclick="HandleEvent(event);"
|
||||
onkeypress="HandleEvent(event,3)">
|
||||
<treecol width="100%"/>
|
||||
<treehead>
|
||||
<treerow>
|
||||
<treecell value="&treehead.site.label;"/>
|
||||
</treerow>
|
||||
</treehead>
|
||||
<treechildren id="nocapturelist"/>
|
||||
</tree>
|
||||
<spring style="height: 5px;"/>
|
||||
<box align="horizontal">
|
||||
<titledbutton id="removeNoCapture" disabled="true" class="dialog push"
|
||||
value="&remove.label;" onclick="DeleteNoCaptureForm();"/>
|
||||
<titledbutton id="removeAllNocaptures" class="dialog push"
|
||||
value="&removeall.label;"
|
||||
onclick="DeleteAllNocaptures();"/>
|
||||
</box>
|
||||
<spring style="height: 5px;"/>
|
||||
</box>
|
||||
</tabpanel>
|
||||
</tabcontrol>
|
||||
|
||||
<!-- from dialogOverlay.xul -->
|
||||
<box align="horizontal">
|
||||
<spring flex="100%"/>
|
||||
<box id="okCancelButtons"/>
|
||||
</box>
|
||||
|
||||
</window>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
|
||||
<!ENTITY windowtitle.label "Signon Viewer">
|
||||
<!ENTITY tab.signonsstored.label "Signons Saved">
|
||||
<!ENTITY tab.signonsnotstored.label "Signons Never Saved">
|
||||
<!ENTITY tab.nopreview.label "Forms never Previewed">
|
||||
<!ENTITY tab.nocapture.label "Forms never Saved">
|
||||
|
||||
<!ENTITY spiel.signonsstored.label "Browser has saved login information for the following sites:">
|
||||
<!ENTITY spiel.signonsnotstored.label "Browser will never save login information for the following sites:">
|
||||
<!ENTITY spiel.nopreview.label "Browser will never preview forms from the following sites before pre-filling them for you:">
|
||||
<!ENTITY spiel.nocapture.label "Browser will never ask to save forms from the following sites:">
|
||||
|
||||
<!ENTITY treehead.site.label "Site">
|
||||
<!ENTITY treehead.username.label "Username">
|
||||
<!ENTITY remove.label "Remove">
|
||||
<!ENTITY removeall.label "Remove All">
|
|
@ -0,0 +1,12 @@
|
|||
okCmdLabel = OK
|
||||
cancelCmdLabel = Cancel
|
||||
removeCmdLabel = Remove
|
||||
logonsSavedTab = Logons saved
|
||||
logonsNotSavedTab = Logons not saved
|
||||
formsNotPreviewedTab = Forms not previewed
|
||||
formsNotSavedTab = Forms not saved
|
||||
logonsSaved = Logon information that has been saved
|
||||
logonsNotSaved = Sites for which logon information won't be saved
|
||||
formsNotPreviewed = Forms that won't be previewed before being pre-filled
|
||||
formsNotSaved = Forms that won't be saved
|
||||
siteUsername = site:username
|
|
@ -0,0 +1,91 @@
|
|||
window {
|
||||
background-color: #CCCCCC;
|
||||
}
|
||||
|
||||
box.tabpanel {
|
||||
border: 1px outset #CCCCCC;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
tab {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
treehead > treerow > treecell {
|
||||
border: 1px outset #CCCCCC;
|
||||
padding-top: 1px;
|
||||
padding-bottom: 1px;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
background-color: #CCCCCC;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
treechildren > treeitem > treerow > treecell {
|
||||
border-right: 1px solid #CCCCCC;
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
color: inherit;
|
||||
padding-left: 10px;
|
||||
padding-top: 1px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
|
||||
treechildren > treeitem > treerow > treecell.fieldcell {
|
||||
border-right: 1px solid #CCCCCC;
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
color: inherit;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
|
||||
treechildren > treeitem > treerow [selectedrow ~= false] {
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
treechildren > treeitem > treerow [selectedrow ~= true] {
|
||||
background-color: #336699;
|
||||
color: white;
|
||||
}
|
||||
|
||||
tree#infotree treechildren > treeitem > treerow [selectedrow ~= false] {
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
tree#infotree treechildren > treeitem > treerow [selectedrow ~= true] {
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
tree {
|
||||
border: 1px inset #CCCCCC;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0000FF;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #FF0000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
tree treechildren > treeitem > treerow[selectedrow=true] > treecell > a:link {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
tree treechildren > treeitem > treerow[selectedrow ~= true] > treecell > a:hover {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
input.dispcell {
|
||||
border: none;
|
||||
background-color: #CCCCCC;
|
||||
height: 12px;
|
||||
font-family: tahoma;
|
||||
font-size: 10px;
|
||||
}
|
Загрузка…
Ссылка в новой задаче