From c0689b6fe6880ff7e4f05c68b93a4256873a4ecd Mon Sep 17 00:00:00 2001 From: "sford3%swbell.net" Date: Tue, 21 Mar 2000 00:00:02 +0000 Subject: [PATCH] Prepatory work on wallet reorg --- .../resources/content/SignonViewer.js | 424 ++++++++++++++++++ .../resources/content/SignonViewer.xul | 165 +++++++ .../resources/locale/en-US/SignonViewer.dtd | 16 + .../locale/en-US/SignonViewer.properties | 12 + .../resources/skin/SignonViewer.css | 91 ++++ 5 files changed, 708 insertions(+) create mode 100644 extensions/wallet/signonviewer/resources/content/SignonViewer.js create mode 100644 extensions/wallet/signonviewer/resources/content/SignonViewer.xul create mode 100644 extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.dtd create mode 100644 extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.properties create mode 100644 extensions/wallet/signonviewer/resources/skin/SignonViewer.css diff --git a/extensions/wallet/signonviewer/resources/content/SignonViewer.js b/extensions/wallet/signonviewer/resources/content/SignonViewer.js new file mode 100644 index 000000000000..ac6d8922c49c --- /dev/null +++ b/extensions/wallet/signonviewer/resources/content/SignonViewer.js @@ -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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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 : ::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: ::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, '') +} diff --git a/extensions/wallet/signonviewer/resources/content/SignonViewer.xul b/extensions/wallet/signonviewer/resources/content/SignonViewer.xul new file mode 100644 index 000000000000..e86d46c4401b --- /dev/null +++ b/extensions/wallet/signonviewer/resources/content/SignonViewer.xul @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + &spiel.signonsstored.label; + + + + + + + + + + + + + + + + + + + + + + &spiel.signonsnotstored.label; + + + + + + + + + + + + + + + + + + + + &spiel.nopreview.label; + + + + + + + + + + + + + + + + + + + + &spiel.nocapture.label; + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.dtd b/extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.dtd new file mode 100644 index 000000000000..adb1964c7b5e --- /dev/null +++ b/extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.dtd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.properties b/extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.properties new file mode 100644 index 000000000000..ec85c8c0b81b --- /dev/null +++ b/extensions/wallet/signonviewer/resources/locale/en-US/SignonViewer.properties @@ -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 diff --git a/extensions/wallet/signonviewer/resources/skin/SignonViewer.css b/extensions/wallet/signonviewer/resources/skin/SignonViewer.css new file mode 100644 index 000000000000..c910baf4df0c --- /dev/null +++ b/extensions/wallet/signonviewer/resources/skin/SignonViewer.css @@ -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; +} \ No newline at end of file