зеркало из 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;
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче