Changeset 2694fe
- Timestamp:
- Jul 25, 2007, 2:16:05 PM (15 years ago)
- Branches:
- master
- Children:
- e8f60f
- Parents:
- 9e9bab
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
chrome/content/v_identity/_version.dtd
r9e9bab r2694fe 1 <!ENTITY vident.version "0.4. 0">1 <!ENTITY vident.version "0.4.1"> -
chrome/content/v_identity/vI_account.js
r9e9bab r2694fe 161 161 case "2" : 162 162 dump ("## vI_account: preparing Fcc --- use Settings of Default Account\n"); 163 vI_account.account.defaultIdentity.doFcc = gAccountManager.default Identity.doFcc;163 vI_account.account.defaultIdentity.doFcc = gAccountManager.defaultAccount.defaultIdentity.doFcc; 164 164 vI_account.account.defaultIdentity.fccFolder = gAccountManager.defaultAccount.defaultIdentity.fccFolder; 165 165 vI_account.account.defaultIdentity.fccFolderPickerMode = gAccountManager.defaultAccount.defaultIdentity.fccFolderPickerMode; -
chrome/content/v_identity/vI_context.xul
r9e9bab r2694fe 30 30 31 31 <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 32 <script type="application/x-javascript"> 33 var vI_context = { 34 prefroot : Components.classes["@mozilla.org/preferences-service;1"] 35 .getService(Components.interfaces.nsIPrefService) 36 .getBranch(null), 37 38 observe: function(subject, topic, data) { 39 document.getElementById("vI_settingsMenu").setAttribute("hidden", 40 !vI_context.prefroot.getBoolPref("extensions.virtualIdentity.menu_entry")); 41 } 42 43 } 44 window.addEventListener("load", function(e) { 45 vI_context.prefroot.QueryInterface(Components.interfaces.nsIPrefBranch2); 46 vI_context.prefroot.addObserver("extensions.virtualIdentity.menu_entry", vI_context, false); 47 vI_context.observe(); 48 }, false); 49 window.addEventListener("unload", function(e) { 50 vI_context.prefroot.removeObserver("extensions.virtualIdentity.menu_entry", vI_context, false); 51 }, false); 52 </script> 53 32 54 <menupopup id="taskPopup"> 33 <menuitem label="&vident.prefs.dlgTitle.label;" oncommand="openDialog('chrome://v_identity/content/vI_prefDialog.xul', '', 'chrome,modal');" />55 <menuitem id="vI_settingsMenu" hidden="true" label="&vident.prefs.dlgTitle.label;" oncommand="openDialog('chrome://v_identity/content/vI_prefDialog.xul', '', 'chrome,modal');" /> 34 56 </menupopup> 35 57 </overlay> -
chrome/content/v_identity/vI_getHeader.js
r9e9bab r2694fe 21 21 22 22 Contributor(s): Christian Weiske 23 Contributor(s): Patrick Brunschwig 23 24 * ***** END LICENSE BLOCK ***** */ 24 25 … … 26 27 * some code copied and adapted from 'display Mail User Agent (MUA)' 27 28 * thanks to Christian Weiske <cweiske@cweiske.de> 29 */ 30 /** 31 * some code copied and adapted from 'enigmail' 32 * thanks to Patrick Brunschwig <patrick.brunschwig@gmx.net> 28 33 */ 29 34 … … 33 38 .getService(Components.interfaces.nsIPrefService) 34 39 .getBranch("extensions.virtualIdentity."), 35 label: null, 36 note_list : new Array(), 37 40 38 41 strings : document.getElementById("vIdentBundle"), 39 40 noop: function() { return; }, 42 43 headerToSearch : null, 44 45 prepareHeaderToSearchArray : function() { 46 var headerList = vI_getHeader.preferences.getCharPref("smart_reply_headers").split(/\n/) 47 48 vI_getHeader.headerToSearch = []; 49 50 // prepare headerToSearch for speedup. 51 var index 52 for (index = 0; index < headerList.length; index++) { 53 var headerToSearch_splitted = headerList[index].split(/:/) 54 // use first part (all before ':') as the header name 55 var headerNameToSearch = headerToSearch_splitted[0].toLowerCase() 56 // check second or third part for any number 57 var headerNumberToSearch = parseInt(headerToSearch_splitted[1]) 58 if (isNaN(headerNumberToSearch)) headerNumberToSearch = parseInt(headerToSearch_splitted[2]) 59 60 // create header name to store the value 61 var headerNameToStore = "vI_" + headerNameToSearch 62 if (!isNaN(headerNumberToSearch)) headerNameToStore += ":" + headerNumberToSearch 63 64 vI_getHeader.headerToSearch.push({ headerNameToSearch : headerNameToSearch, headerNumberToSearch : headerNumberToSearch, 65 headerNameToStore : headerNameToStore }); 66 } 67 }, 68 69 adaptPreferences : function() { 70 // this is only for transition from 0.4.0 to 0.4.1, will be removed after a while 71 try { if (vI_getHeader.preferences.getBoolPref("smart_reply_prefer_headers")) { 72 vI_notificationBar.dump("## vI_getHeader: preference-format changed\n## vI_getHeader: appending 'to' and 'cc' to header-list\n") 73 vI_getHeader.preferences.setCharPref("smart_reply_headers", 74 vI_getHeader.preferences.getCharPref("smart_reply_headers") + "\nto\ncc") 75 } 76 else { 77 vI_notificationBar.dump("## vI_getHeader: preference-format changed\n## vI_getHeader: inserting 'to' and 'cc' to header-list\n") 78 vI_getHeader.preferences.setCharPref("smart_reply_headers", 79 "to\ncc\n" + vI_getHeader.preferences.getCharPref("smart_reply_headers")) 80 } 81 vI_getHeader.preferences.clearUserPref("smart_reply_prefer_headers") 82 vI_notificationBar.dump("## vI_getHeader: 'smart_reply_prefer_headers' preference-entry removed\n") 83 } 84 catch(vErr) { } 85 }, 41 86 42 87 getHeader: function() { 43 dump("## vI_getHeader: onEndHeaders\n") 88 vI_notificationBar.clear_dump() 89 vI_notificationBar.dump("## vI_getHeader: onEndHeaders\n") 90 var index; 91 92 vI_getHeader.adaptPreferences(); 44 93 45 94 var srcMsgURI = GetLoadedMessage(); 46 95 if (srcMsgURI == null) return; 47 48 var header_list = vI_getHeader.preferences.getCharPref("smart_reply_headers").split(/\n/) 49 var hdr = vI_getHeader.messenger.messageServiceFromURI(srcMsgURI).messageURIToMsgHdr(srcMsgURI); 50 //loop through the headers 96 97 if (/type=application\/x-message-display/.test(srcMsgURI)) { 98 vI_notificationBar.dump("## vI_getHeader: opening stored Message, can't get Message Header\n"); 99 return; 100 } 101 102 try { var hdr = vI_getHeader.messenger.messageServiceFromURI(srcMsgURI).messageURIToMsgHdr(srcMsgURI); } 103 catch(vErr) { 104 vI_notificationBar.dump("## vI_getHeader: can't get Message Header.\n"); 105 return; 106 }; 107 108 if (!vI_getHeader.headerToSearch) vI_getHeader.prepareHeaderToSearchArray() 109 51 110 var found = false; 52 111 var label = vI_getHeader.strings.getString("vident.getHeader.noHeader"); 53 for (headerName in currentHeaderData) { 54 for (index = 0; index < header_list.length; index++) { 55 header_to_search=header_list[index] 56 if (headerName.toLowerCase() == header_to_search.toLowerCase()) { 57 hdr.setStringProperty(headerName.toLowerCase(), 58 currentHeaderData[headerName].headerValue); 59 if (!found) label = vI_getHeader.strings.getString("vident.getHeader.headerFound"); 60 label += " " + headerName.toLowerCase() 61 + ":" + currentHeaderData[headerName].headerValue 62 found = true; 112 // create array to count the header 113 var currentHeadersCounter = [] 114 // loop through the headers 115 for (header in currentHeaderData) { 116 headerName = currentHeaderData[header].headerName.toLowerCase() 117 if (currentHeadersCounter[headerName]) currentHeadersCounter[headerName]++ 118 else currentHeadersCounter[headerName] = 1 119 vI_notificationBar.dump("## vI_getHeader: found header: " + headerName + 120 "[:" + currentHeadersCounter[headerName] + "]"); 121 122 for (index = 0; index < vI_getHeader.headerToSearch.length; index++) { 123 if (headerName == vI_getHeader.headerToSearch[index].headerNameToSearch && 124 (isNaN(vI_getHeader.headerToSearch[index].headerNumberToSearch) || 125 vI_getHeader.headerToSearch[index].headerNumberToSearch == currentHeadersCounter[headerName])) { 126 127 var value = currentHeaderData[header].headerValue; 128 if (currentHeadersCounter[headerName] != 1) 129 value = hdr.getStringProperty(vI_getHeader.headerToSearch[index].headerNameToStore) + 130 ", " + value; 131 hdr.setStringProperty(vI_getHeader.headerToSearch[index].headerNameToStore,value); 132 vI_notificationBar.dump(" ...stored"); 133 134 if (!found) { 135 label = vI_getHeader.strings.getString("vident.getHeader.headerFound"); 136 found = true; 137 } 138 label += " " + currentHeaderData[header].headerName + 139 "[:" + currentHeadersCounter[headerName] + "]:" + currentHeaderData[header].headerValue 140 break; 63 141 } 64 142 } 143 vI_notificationBar.dump("\n"); 65 144 } 66 145 vI_notificationBar.setNote(label, "get_header_notification"); 146 }, 147 148 hideExtraHeader: function() { 149 var index; 150 var header_list = vI_prepareHeader.addedHeaders 151 for (index = 0; index < header_list.length; index++) { 152 var header_to_search_splitted=header_list[index].split(/:/) 153 var header_to_search=header_to_search_splitted[0].toLowerCase() 154 if (typeof(gExpandedHeaderView[header_to_search]) == "object") { 155 if (! gViewAllHeaders) { 156 gExpandedHeaderView[header_to_search].enclosingBox.setAttribute("hidden", true); 157 } 158 else { 159 gExpandedHeaderView[header_to_search].enclosingBox.removeAttribute("hidden"); 160 } 161 } 162 } 67 163 }, 68 164 69 165 setupEventListener: function() { 70 166 var listener = {}; 71 listener.onStartHeaders = vI_getHeader. noop;167 listener.onStartHeaders = vI_getHeader.hideExtraHeader; 72 168 listener.onEndHeaders = vI_getHeader.getHeader; 73 169 gMessageListeners.push(listener); … … 76 172 vI_getHeader.messenger = vI_getHeader.messenger.QueryInterface(Components.interfaces.nsIMessenger); 77 173 vI_getHeader.strings = document.getElementById("vIdentBundle"); 78 } ,174 } 79 175 } 80 176 177 178 var vI_prepareHeader = { 179 prefroot : Components.classes["@mozilla.org/preferences-service;1"] 180 .getService(Components.interfaces.nsIPrefService) 181 .getBranch(null), 182 183 addedHeaders : [], 184 185 observer_added : false, 186 187 init : function() { 188 vI_notificationBar.dump("## vI_prepareHeader: init\n"); 189 if (vI_prepareHeader.addExtraHeader()) vI_prepareHeader.addObserver(); 190 }, 191 192 cleanup : function() { 193 vI_notificationBar.dump("## vI_prepareHeader: cleanup\n"); 194 vI_prepareHeader.removeObserver(); 195 vI_prepareHeader.removeExtraHeader(); 196 }, 197 198 addObserver : function() { 199 if (vI_prepareHeader.observer_added) return; 200 vI_prepareHeader.prefroot.QueryInterface(Components.interfaces.nsIPrefBranch2); 201 vI_prepareHeader.prefroot.addObserver("extensions.virtualIdentity.smart_reply_headers", this, false); 202 vI_prepareHeader.observer_added = true; 203 vI_notificationBar.dump("## vI_prepareHeader: prefs observer added\n"); 204 }, 205 206 removeObserver : function() { 207 if (!vI_prepareHeader.observer_added) return; 208 vI_prepareHeader.prefroot.removeObserver("extensions.virtualIdentity.smart_reply_headers", this); 209 vI_notificationBar.dump("## vI_prepareHeader: prefs observer removed\n"); 210 vI_prepareHeader.observer_added = false; 211 }, 212 213 // this is a adapted copy of enigEnsureExtraHeaders() from enigmail, thanks 214 addExtraHeader : function() { 215 vI_notificationBar.dump("## vI_prepareHeader: addExtraHeader\n"); 216 var header_list = vI_prepareHeader.prefroot.getCharPref("extensions.virtualIdentity.smart_reply_headers").split(/\n/) 217 try { 218 var extraHdrs = " " + 219 vI_prepareHeader.prefroot.getCharPref("mailnews.headers.extraExpandedHeaders").toLowerCase() 220 + " "; 221 222 for (index = 0; index < header_list.length; index++) { 223 var headerToSearch_splitted = header_list[index].split(/:/) 224 var headerToSearch = headerToSearch_splitted[0].toLowerCase() 225 226 var j; var found = false; 227 // check if Header is included in collapsed HeaderView 228 for (j = 0; j < gCollapsedHeaderList.length; j++) { 229 if (gCollapsedHeaderList[j].name == headerToSearch) { 230 vI_notificationBar.dump("## vI_prepareHeader: Header '" + headerToSearch + "' in gCollapsedHeaderList\n"); 231 found = true; break; 232 } 233 } 234 if (found) continue; 235 // check if Header is included in expanded HeaderView 236 for (j = 0; j < gExpandedHeaderList.length; j++) { 237 if (gExpandedHeaderList[j].name == headerToSearch) { 238 vI_notificationBar.dump("## vI_prepareHeader: Header '" + headerToSearch + "' in gExpandedHeaderList\n"); 239 found = true; break; 240 } 241 } 242 if (found) continue; 243 244 var addedHeadersString = " " + vI_prepareHeader.addedHeaders.join(" ") + " " 245 if ((extraHdrs.indexOf(" " + headerToSearch + " ") < 0) && 246 (addedHeadersString.indexOf(" " + headerToSearch + " ") < 0)) 247 vI_prepareHeader.addedHeaders.push(headerToSearch); 248 else vI_notificationBar.dump("## vI_prepareHeader: Header '" + headerToSearch + "' already in extraExpandedHeaders\n"); 249 } 250 251 if (vI_prepareHeader.addedHeaders.length > 0) { 252 extraHdrs += vI_prepareHeader.addedHeaders.join(" "); 253 extraHdrs = extraHdrs.replace(/^ */, "").replace(/ *$/, ""); 254 vI_prepareHeader.prefroot.setCharPref("mailnews.headers.extraExpandedHeaders", extraHdrs) 255 } 256 vI_notificationBar.dump("## vI_prepareHeader: extraExpandedHeaders '" + vI_prepareHeader.addedHeaders.join(" ") + "' added\n"); 257 258 259 vI_notificationBar.dump("## vI_prepareHeader: done\n"); 260 return true; 261 } 262 catch (e) { 263 vI_notificationBar.dump("## vI_prepareHeader: your application is too old, please update. Otherwise try to install mnenhy or enigmail to use additional headers.") 264 return false; 265 } 266 }, 267 268 removeExtraHeader: function() { 269 vI_notificationBar.dump("## vI_prepareHeader: cleanupExtraHeader\n"); 270 271 if (vI_prepareHeader.addedHeaders.length > 0) { 272 var extraHdrs = vI_prepareHeader.prefroot.getCharPref("mailnews.headers.extraExpandedHeaders").toLowerCase().split(/ /); 273 274 for (i = 0; i < vI_prepareHeader.addedHeaders.length; i++) { 275 for (j = 0; j < extraHdrs.length; j++) { 276 if (extraHdrs[j] == vI_prepareHeader.addedHeaders[i]) { 277 extraHdrs.splice(j,1); 278 break; 279 } 280 } 281 } 282 vI_prepareHeader.prefroot.setCharPref("mailnews.headers.extraExpandedHeaders", extraHdrs.join(" ")) 283 vI_notificationBar.dump("## vI_prepareHeader: extraExpandedHeaders '" + vI_prepareHeader.addedHeaders.join(" ") + "' removed\n"); 284 vI_prepareHeader.addedHeaders = []; 285 } 286 }, 287 288 observe: function(subject, topic, data) { 289 if (topic == "nsPref:changed") { 290 vI_prepareHeader.removeExtraHeader(); 291 vI_prepareHeader.addExtraHeader(); 292 vI_notificationBar.dump("## vI_prepareHeader: changed preference '" + data + "'\n"); 293 294 // remove (old) prepared headerArray 295 vI_getHeader.headerToSearch = null; 296 297 vI_notificationBar.dump("## vI_prepareHeader: reload Message\n"); 298 MsgReload(); 299 } 300 } 301 } 302 81 303 addEventListener('messagepane-loaded', vI_getHeader.setupEventListener, true); 304 window.addEventListener("load", function(e) { vI_prepareHeader.init(); }, false); 305 window.addEventListener("unload", function(e) { vI_prepareHeader.cleanup(); }, false); -
chrome/content/v_identity/vI_getHeader.xul
r9e9bab r2694fe 42 42 </stringbundleset> 43 43 44 <vbox id="messagepanebox" > 45 <splitter id="vIDebugBoxSplitter" hidden="true"/> 46 <textbox id="vIDebugBox" hidden="true" multiline="true" readonly="true" 47 DOMAttrModified="if(event.attrName == 'value') this.value = event.newValue; return true;"/> 48 </vbox> 49 44 50 <vbox id="messagepanebox"> 45 51 <notificationbox id="vINotification" position="1" insertbefore="msgheaderstoolbar-box"/> -
chrome/content/v_identity/vI_msgIdentityClone.js
r9e9bab r2694fe 43 43 vI_msgIdentityClone.elements.Obj_MsgIdentityPopup_clone = document.getElementById("msgIdentityPopup_clone"); 44 44 vI_msgIdentityClone.clone_Obj_MsgIdentity(); 45 vI_msgIdentityClone.elements.Obj_MsgIdentity.setAttribute("hidden", "true"); 46 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("hidden", "false"); 47 vI_msgIdentityClone.elements.Obj_MsgIdentity.previousSibling.setAttribute("control", "msgIdentity_clone"); 45 48 }, 46 49 … … 61 64 newMenuItem.setAttribute("accountname", vI.helper.getAccountname(newMenuItem)) 62 65 } 66 if (!vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem) { 67 vI_notificationBar.dump("## vI_msgIdentityClone: Obj_MsgIdentity.selectedItem not set, using first Menuitem\n"); 68 vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem = 69 vI_msgIdentityClone.elements.Obj_MsgIdentityPopup.firstChild 70 vI_notificationBar.dump("## vI_msgIdentityClone: MsgIdentityPopup.doCommand()\n"); 71 vI_msgIdentityClone.elements.Obj_MsgIdentityPopup.doCommand(); 72 } 63 73 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone 64 74 .setAttribute("value", vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem.getAttribute("value")); … … 66 76 .setAttribute("label", vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem.getAttribute("label")); 67 77 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone 68 .setAttribute("accountkey", vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem.getAttribute("accountkey"));69 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone70 78 .setAttribute("accountname", vI.helper.getAccountname(vI_msgIdentityClone.elements.Obj_MsgIdentity.selectedItem)); 71 79 }, 72 80 73 81 resetMenuToDefault : function () { 74 vI_msgIdentityClone.setMenuToIdentity(gAccountManager.defaultAccount.defaultIdentity.key , false);75 }, 76 77 setMenuToIdentity : function (identitykey , startup) {82 vI_msgIdentityClone.setMenuToIdentity(gAccountManager.defaultAccount.defaultIdentity.key); 83 }, 84 85 setMenuToIdentity : function (identitykey) { 78 86 MenuItems = vI_msgIdentityClone.elements.Obj_MsgIdentityPopup_clone.childNodes 79 87 for (index = 0; index < MenuItems.length; index++) { … … 85 93 } 86 94 } 87 vI_msgIdentityClone. LoadIdentity(startup);95 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.doCommand(); 88 96 }, 89 97 … … 99 107 } 100 108 } 109 vI_notificationBar.dump("## vI_msgIdentityClone: MsgIdentityPopup.doCommand()\n"); 110 vI_msgIdentityClone.elements.Obj_MsgIdentityPopup.doCommand(); 101 111 }, 102 112 … … 110 120 // if VIdentity Extension is closed after the extension area was opened at least once, 111 121 // remove the Virtual Account if a different (usual) Account is choosen in the cloned dropdown-menu 112 LoadIdentity : function( startup)122 LoadIdentity : function() 113 123 { 114 124 if (vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.selectedItem.value != "vid") { … … 116 126 vI_smtpSelector.resetMenuToMsgIdentity( 117 127 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.selectedItem.value); 118 vI_notificationBar.dump("## vI_msgIdentityClone: calling LoadIdentity(" + startup +") from MsgCompose\n")119 LoadIdentity(startup);120 128 } 121 129 vI_msgIdentityClone.initMsgIdentityTextbox_clone(); … … 211 219 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("label", address.name + " <" + address.email + ">"); 212 220 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("accountname", " - " + accounts[i].incomingServer.prettyName); 213 vI_msgIdentityClone.elements.Obj_MsgIdentity_clone.setAttribute("accountkey", "");214 221 return false; 215 222 } -
chrome/content/v_identity/vI_notificationBar.js
r9e9bab r2694fe 32 32 33 33 Obj_vINotification : null, 34 Obj_DebugBox : null, 34 35 36 versionOk : false, 37 38 checkVersion : function() { 39 // the notification-bar only works from 1.5.0.7 on, else thunderbird segfaults 40 const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}"; 41 if (("@mozilla.org/xre/app-info;1" in Components.classes) && 42 ("@mozilla.org/xpcom/version-comparator;1" in Components.classes)) { 43 var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] 44 .getService(Components.interfaces.nsIXULAppInfo); 45 var appID = appInfo.ID 46 var appVersion = appInfo.version 47 var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"] 48 .getService(Components.interfaces.nsIVersionComparator); 49 if (appID != THUNDERBIRD_ID || versionChecker.compare(appVersion, "1.5.0.7") >= 0) 50 vI_notificationBar.versionOk = true 51 } 52 }, 53 35 54 init : function() { 36 55 vI_notificationBar.Obj_vINotification = document.getElementById("vINotification"); 56 vI_notificationBar.checkVersion(); 57 if (!vI_notificationBar.preferences.getBoolPref("debug_notification")) return; 58 vI_notificationBar.Obj_DebugBox = document.getElementById("vIDebugBox"); 59 vI_notificationBar.Obj_DebugBox.setAttribute("hidden","false"); 60 document.getElementById("vIDebugBoxSplitter").setAttribute("hidden","false"); 61 vI_notificationBar.dump_app_version(); 37 62 }, 38 63 … … 43 68 }, 44 69 70 clear_dump : function() { 71 if (!vI_notificationBar.Obj_DebugBox) return; 72 new_DebugBox = vI_notificationBar.Obj_DebugBox.cloneNode(false); 73 vI_notificationBar.Obj_DebugBox.parentNode.replaceChild( 74 new_DebugBox, vI_notificationBar.Obj_DebugBox); 75 vI_notificationBar.Obj_DebugBox = new_DebugBox; 76 vI_notificationBar.dump_app_version(); 77 }, 78 79 dump_app_version : function(note) { 80 // add some information about the mail-client and the extensions installed 81 if ("@mozilla.org/xre/app-info;1" in Components.classes) { 82 var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] 83 .getService(Components.interfaces.nsIXULAppInfo); 84 var protohandler = Components.classes["@mozilla.org/network/protocol;1?name=http"] 85 .getService(Components.interfaces.nsIHttpProtocolHandler); 86 vI_notificationBar.dump(appInfo.name + " " + appInfo.version + " (" + appInfo.appBuildID + "; " + protohandler.oscpu + ")\n") 87 } 88 else vI_notificationBar.dump("mail-client seems not supported by Virtual Identity Extension") 89 90 // copied and adapted from nightly tester tools from Dave Townsend (http://www.oxymoronical.com/web/firefox/nightly) 91 try { var em = Components.classes["@mozilla.org/extensions/manager;1"] 92 .getService(Components.interfaces.nsIExtensionManager); 93 var items = em.getItemList(Components.interfaces.nsIUpdateItem.TYPE_EXTENSION, {}); 94 var rdfS = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); 95 var ds = em.datasource; 96 var disabledResource = rdfS.GetResource("http://www.mozilla.org/2004/em-rdf#disabled"); 97 var isDisabledResource = rdfS.GetResource("http://www.mozilla.org/2004/em-rdf#isDisabled"); 98 var text = []; 99 for (var i=0; i<items.length; i++) 100 { 101 var output = " - " + items[i].name + " " + items[i].version; 102 var source = rdfS.GetResource("urn:mozilla:item:"+items[i].id); 103 var disabled = ds.GetTarget(source, disabledResource, true); 104 if (!disabled) disabled = ds.GetTarget(source, isDisabledResource, true); 105 try { 106 disabled=disabled.QueryInterface(Components.interfaces.nsIRDFLiteral); 107 if (disabled.Value=="true") output += " [DISABLED]"; 108 } 109 catch (e) { } 110 vI_notificationBar.dump(output + "\n") 111 } 112 } 113 catch (e) {}; 114 vI_notificationBar.dump("--------------------------------------------------------------------------------\n") 115 }, 116 45 117 dump : function(note) { 46 dump(note); // maybe this will be changed later, not by now ;) 118 if (!vI_notificationBar.preferences.getBoolPref("debug_notification")) { 119 if (!vI_notificationBar.Obj_DebugBox) return; 120 vI_notificationBar.Obj_DebugBox.setAttribute("hidden","true"); 121 document.getElementById("vIDebugBoxSplitter").setAttribute("hidden","true"); 122 vI_notificationBar.Obj_DebugBox = null; 123 return 124 } 125 dump(note); 126 if (!vI_notificationBar.Obj_DebugBox) vI_notificationBar.init(); 127 if (!vI_notificationBar.Obj_DebugBox) return; 128 var new_text = document.createTextNode(note); 129 var new_br = document.createElementNS("http://www.w3.org/1999/xhtml", 'br'); 130 vI_notificationBar.Obj_DebugBox.inputField.appendChild(new_text); 131 vI_notificationBar.Obj_DebugBox.inputField.appendChild(new_br); 132 vI_notificationBar.Obj_DebugBox.inputField.scrollTop = 133 vI_notificationBar.Obj_DebugBox.inputField.scrollHeight - vI_notificationBar.Obj_DebugBox.inputField.clientHeight 47 134 }, 48 135 … … 58 145 59 146 addNote: function(note, prefstring) { 147 vI_notificationBar.dump("** " + note + "\n"); 60 148 if (!vI_notificationBar.preferences.getBoolPref(prefstring)) return; 61 149 if (!vI_notificationBar.Obj_vINotification) vI_notificationBar.init(); 150 if (!vI_notificationBar.versionOk) return; 62 151 if (vI_notificationBar.timer) window.clearTimeout(vI_notificationBar.timer); 63 152 var oldNotification = vI_notificationBar.Obj_vINotification.currentNotification -
chrome/content/v_identity/vI_prefDialog.js
r9e9bab r2694fe 45 45 "VIdent_identity.smart_reply_ask_always", 46 46 "VIdent_identity.show_smtp", 47 "VIdent_identity.menu_entry", 47 48 "VIdent_identity.smart_reply_headers", 48 49 "VIdent_identity.smart_reply_filter", 49 50 "VIdent_identity.smart_draft", 50 "VIdent_identity.smart_reply_prefer_headers",51 51 "VIdent_identity.smart_reply_notification", 52 52 "VIdent_identity.get_header_notification", 53 "VIdent_identity.smart_reply_defaultFullName", 53 54 "VIdent_identity.smart_reply_ignoreFullName", 54 55 "VIdent_identity.smart_reply_autocreate", 55 "VIdent_identity.notification_timeout"], 56 "VIdent_identity.notification_timeout", 57 "VIdent_identity.debug_notification"], 56 58 57 59 init : function() { … … 107 109 "VIdent_identity.smart_reply_headers", 108 110 "VIdent_identity.smart_reply_filter", 109 "VIdent_identity.smart_reply_prefer_headers",110 111 "VIdent_identity.smart_reply_ignoreFullName", 111 112 "VIdent_identity.smart_reply_autocreate", … … 128 129 ask_always.setAttribute("disabled", (autocreate.checked || !ask.checked)) 129 130 autocreate.setAttribute("disabled", ask_always.checked) 131 }, 132 133 smartReplyHeaderReset : function() { 134 var textfield = document.getElementById("VIdent_identity.smart_reply_headers") 135 textfield.value = "x-original-to\nto\ncc" 130 136 } 131 137 }, … … 139 145 SetSpecialFolderNamesWithDelims(); 140 146 141 var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 142 var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator); 147 var appID = null; 148 var appVersion = null; 149 var versionChecker; 150 if("@mozilla.org/xre/app-info;1" in Components.classes) { 151 var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] 152 .getService(Components.interfaces.nsIXULAppInfo); 153 appID = appInfo.ID 154 appVersion = appInfo.version 155 } 156 if("@mozilla.org/xpcom/version-comparator;1" in Components.classes) 157 versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"] 158 .getService(Components.interfaces.nsIVersionComparator); 159 else appID = null; 143 160 const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}"; 144 //const MOZILLA_ID = "{86c18b42-e466-45a9-ae7a-9b95ba6f5640}";145 161 const SEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}"; 146 if (( appInfo.ID == THUNDERBIRD_ID && versionChecker.compare(appInfo.version, "2.0b") < 0) ||147 (appI nfo.ID == SEAMONKEY_ID && versionChecker.compare(appInfo.version, "1.5a") < 0)) {162 if ((!appID) || (appID == THUNDERBIRD_ID && versionChecker.compare(appVersion, "2.0b") < 0) || 163 (appID == SEAMONKEY_ID && versionChecker.compare(appVersion, "1.5a") < 0)) { 148 164 document.getElementById("version-warning").setAttribute("hidden", "false"); 149 165 document.getElementById("VIdent_identity.smart_draft").setAttribute("disabled", "true"); 150 166 } 151 167 if ((!appID) || (appID == THUNDERBIRD_ID && versionChecker.compare(appVersion, "1.5.0.7") < 0)) { 168 document.getElementById("notificationGroupBox").setAttribute("hidden", "true"); 169 } 170 if ((!appID) || (appID != THUNDERBIRD_ID)) { 171 document.getElementById("VIdent_identity.menu_entry").setAttribute("hidden", "true"); 172 } 152 173 153 174 vI_prefDialog.base.smartReplyConstraint(document.getElementById("VIdent_identity.smart_reply")); -
chrome/content/v_identity/vI_prefDialog.xul
r9e9bab r2694fe 86 86 <checkbox id="VIdent_identity.show_smtp" label="&vident.prefs.SMTP.label;" 87 87 prefstring="show_smtp" /> 88 <checkbox id="VIdent_identity.menu_entry" label="&vident.prefs.menuEntry.label;" 89 prefstring="menu_entry" /> 88 90 </groupbox> 89 91 </tabpanel> … … 175 177 <description width="500px">&vident.prefs.smartReplyTab.Tab1.desc;</description> 176 178 <hbox> 177 <vbox><description width="300px">&vident.prefs.smartReply.headers.desc;</description><spacer flex="1"/></vbox> 179 <vbox><description width="300px">&vident.prefs.smartReply.headers.desc;</description> 180 <spacer flex="1"/> 181 <button label="&vident.prefs.smartReply.headers.reset;" oncommand="vI_prefDialog.base.smartReplyHeaderReset();"/> 182 </vbox> 178 183 <textbox id="VIdent_identity.smart_reply_headers" multiline="true" 179 184 rows="4" size="20" wrap="false" flex="1" 180 185 prefstring="smart_reply_headers" /> 181 186 </hbox> 182 <checkbox id="VIdent_identity.smart_reply_prefer_headers" label="&vident.prefs.smartReply.preferHeader.label;"183 prefstring="smart_reply_prefer_headers"/>184 187 </vbox> 185 188 </groupbox> … … 198 201 <checkbox id="VIdent_identity.smart_reply_ignoreFullName" label="&vident.prefs.smartReply.ignoreFullname.label;" 199 202 prefstring="smart_reply_ignoreFullName" wrap="true" width="500px"/> 203 <hbox> 204 <description width="300px">&vident.prefs.smartReply.defaultFullname.label;</description> 205 <vbox><spacer flex="1"/><textbox id="VIdent_identity.smart_reply_defaultFullName" flex="1" 206 prefstring="smart_reply_defaultFullName" size="20" /><spacer flex="1"/></vbox> 207 </hbox> 200 208 </vbox> 201 209 </groupbox> … … 225 233 <tabpanel orient="vertical" label="&vident.prefs.notificationTab.header;"> 226 234 <dialogheader title="&vident.prefs.notificationTab.header;"/> 227 <groupbox >235 <groupbox id="notificationGroupBox"> 228 236 <caption label="&vident.prefs.notificationTab.caption;"/> 229 237 <vbox align="left"> … … 240 248 </vbox> 241 249 </groupbox> 250 <groupbox> 251 <caption label="&vident.prefs.notificationTab.Debug.caption;"/> 252 <vbox align="left"> 253 <description width="500px">&vident.prefs.notifyDebug.desc;</description> 254 <checkbox id="VIdent_identity.debug_notification" label="&vident.prefs.notifyDebug.label;" 255 prefstring="debug_notification"/> 256 </vbox> 257 </groupbox> 242 258 </tabpanel> 243 259 </tabpanels> -
chrome/content/v_identity/vI_smartIdentity.js
r9e9bab r2694fe 33 33 init : function() { 34 34 // if there is no ID of the original Message (Why?) leave the function 35 var uri = vI.params.originalMsgURI;35 var uri = gMsgCompose.originalMsgURI; 36 36 if (!uri) { 37 37 vI_notificationBar.dump("## vI_smartIdentity: cant get URI of former Message\n"); 38 38 return; 39 39 } 40 var hdr = vI_smartIdentity.messenger.msgHdrFromURI(uri); 41 42 var type = vI.params.type; 40 try { var hdr = vI_smartIdentity.messenger.messageServiceFromURI(uri).messageURIToMsgHdr(uri); } 41 catch(vErr) { 42 vI_notificationBar.dump("## vI_smartIdentity: can't get Message Header.\n"); 43 vI_notificationBar.dump("## vI_smartIdentity: (maybe you're opening a message stored as a file)\n"); 44 return; 45 }; 46 47 var type = gMsgCompose.type; 43 48 var msgComposeType = Components.interfaces.nsIMsgCompType; 49 vI_notificationBar.dump("## vI_smartIdentity: msgComposeType = " + type + "\n"); 44 50 switch (type) { 51 case msgComposeType.ForwardAsAttachment: 52 case msgComposeType.ForwardInline: 45 53 case msgComposeType.Reply: 46 54 case msgComposeType.ReplyAll: 47 case msgComposeType.ReplyToGroup: 55 case msgComposeType.ReplyToGroup: // reply to a newsgroup, would possibly be stopped later 48 56 case msgComposeType.ReplyToSender: 49 case msgComposeType.ReplyToSenderAndGroup: 57 case msgComposeType.ReplyToSenderAndGroup: // reply to a newsgroup, would possibly be stopped later 58 case msgComposeType.ReplyWithTemplate: 50 59 if (vI.preferences.getBoolPref("smart_reply")) 51 60 vI_smartIdentity.SmartReply(hdr); … … 63 72 vI_notificationBar.dump("## vI_smartIdentity: SmartDraft()\n"); 64 73 65 vI_notificationBar.dump("## vI_smartIdentity: sender " + hdr.author + "\n"); 74 var all_addresses = { number : 1, emails : {}, fullNames : {}, combinedNames : {} }; 75 vI.headerParser.parseHeadersWithArray(hdr.author, all_addresses.emails, 76 all_addresses.fullNames, all_addresses.combinedNames); 77 all_addresses.emails[0] = all_addresses.emails.value[0] 78 all_addresses.fullNames[0] = all_addresses.fullNames.value[0] 79 all_addresses.combinedNames[0] = all_addresses.combinedNames.value[0] 80 81 vI_notificationBar.dump("## vI_smartIdentity: sender '" + all_addresses.combinedNames[0] + "'\n"); 82 83 if (vI_smartIdentity.matchSelectedIdentity(all_addresses)) return; 84 85 if (vI_smartIdentity.smartIdentity_BaseIdentity = vI_smartIdentity.matchAnyIdentity(all_addresses)) { 86 vI_notificationBar.addNote( 87 vI.elements.strings.getString("vident.smartIdentity.matchExisting"), 88 "smart_reply_notification"); 89 window.setTimeout(vI_smartIdentity.updateMsgComposeDialog, 0); 90 return; 91 } 92 93 vI_smartIdentity.addSmartIdentitiesToCloneMenu(all_addresses); 94 66 95 vI_notificationBar.setNote(vI.elements.strings.getString("vident.smartIdentity.vIUsage") + ".", 67 96 "smart_reply_notification"); 68 vI_msgIdentityClone.setIdentity(hdr.author) 69 70 vI.helper.addSeparatorToCloneMenu(); 71 var object = vI_msgIdentityClone.elements.Obj_MsgIdentityPopup_clone 72 var accountname = document.getElementById("prettyName-Prefix").getAttribute("label") 73 + " - " + vI.helper.getBaseIdentity().email 74 vI.helper.addIdentityMenuItem(object, hdr.author, accountname, "", "vid") 75 }, 76 77 // check if recent email-address (pre-choosen identity) is found in at least one email-address 97 vI_msgIdentityClone.setIdentity(all_addresses.combinedNames[0]); 98 }, 99 100 // check if recent email-address (pre-choosen identity) is found in at least one address 78 101 matchSelectedIdentity : function(all_addresses) { 79 for (index = 0; index < all_addresses.number; index++) { 80 if (vI.params.identity.email.toLowerCase() == all_addresses.emails.value[index].toLowerCase() 102 vI_notificationBar.dump("## vI_smartIdentity: search for preselected Identity\n"); 103 current_email = getCurrentIdentity().email.toLowerCase(); 104 current_name = getCurrentIdentity().fullName.toLowerCase(); 105 for (index = 0; index < all_addresses.number; index++) { 106 if (current_email == all_addresses.emails[index].toLowerCase() 81 107 && (vI.preferences.getBoolPref("smart_reply_ignoreFullName") || 82 vI.params.identity.fullName == all_addresses.fullNames.value[index])) {83 vI_notificationBar.dump("## vI_smartIdentity: found preselected Identity in address sets, aborting\n");108 current_name == all_addresses.fullNames[index].toLowerCase())) { 109 vI_notificationBar.dump("## vI_smartIdentity: found preselected Identity in address sets, aborting\n"); 84 110 return true; // direct hit 85 111 } 86 112 } 113 vI_notificationBar.dump("## vI_smartIdentity: collected address(es) doesn't contain preselected Identity, continuing\n"); 87 114 return false; 88 115 }, 89 116 90 // checks if the Identity currently described by the extension-area fieldsi still available as117 // checks if any Identity in the collected address-set i still available as 91 118 // a stored identity. If so, use the stored one. 92 119 matchAnyIdentity : function(all_addresses) { 120 vI_notificationBar.dump("## vI_smartIdentity: check if any collected address is stored as a (usual) Identity\n"); 93 121 var accounts = queryISupportsArray(gAccountManager.accounts, Components.interfaces.nsIMsgAccount); 94 122 for (var i in accounts) { … … 101 129 for (index = 0; index < all_addresses.number; index++) { 102 130 if (identities[j].getUnicharAttribute("useremail").toLowerCase() == 103 all_addresses.emails .value[index].toLowerCase() &&131 all_addresses.emails[index].toLowerCase() && 104 132 (vI.preferences.getBoolPref("smart_reply_ignoreFullName") || 105 133 identities[j].getUnicharAttribute("fullName").toLowerCase() == 106 all_addresses.fullNames .value[index].toLowerCase())) {107 vI_notificationBar.dump("## vI_smartIdentity: found existing Identity in address sets, aborting\n");134 all_addresses.fullNames[index].toLowerCase())) { 135 vI_notificationBar.dump("## vI_smartIdentity: found existing Identity in address sets, aborting\n"); 108 136 return identities[j]; 109 137 } … … 111 139 } 112 140 } 141 vI_notificationBar.dump("## vI_smartIdentity: no collected address found stored, continuing\n"); 113 142 return null; 114 143 }, … … 116 145 117 146 filterAddresses : function(all_addresses) { 118 var return_addresses = { number : 0, emails : { value : new Array() }, 119 fullNames : { value : new Array() }, 120 combinedNames : { value : new Array() } }; 147 var return_addresses = { number : 0, emails : { }, fullNames : { }, combinedNames : { } }; 121 148 122 149 var filter_list = vI.preferences.getCharPref("smart_reply_filter").split(/\n/) … … 142 169 if (skipRegExp) break; 143 170 try { /^\/(.*)\/$/.exec(filter_list[i]); 144 add_addr = (all_addresses.emails .value[j].match(new RegExp(RegExp.$1,"i")))171 add_addr = (all_addresses.emails[j].match(new RegExp(RegExp.$1,"i"))) 145 172 } 146 173 catch(vErr) { … … 152 179 break; 153 180 case filterType.StrCmp: 154 add_addr = (filter_list[i] == all_addresses.emails .value[j])181 add_addr = (filter_list[i] == all_addresses.emails[j]) 155 182 break; 156 183 } 157 184 if (add_addr) return_addresses = vI_smartIdentity.addWithoutDuplicates(return_addresses, 158 all_addresses.emails .value[j],159 all_addresses.fullNames .value[j],160 all_addresses.combinedNames .value[j])185 all_addresses.emails[j], 186 all_addresses.fullNames[j], 187 all_addresses.combinedNames[j]) 161 188 } 162 189 } … … 166 193 addWithoutDuplicates : function(all_addresses, email, fullName, combinedName) { 167 194 for (index = 0; index < all_addresses.number; index++) { 168 if (all_addresses.emails .value[index] == email) {195 if (all_addresses.emails[index] == email) { 169 196 // found, so check if we can use the Name of the new field 170 if (all_addresses.fullNames .value[index] == "" && fullName != "") {171 all_addresses.fullNames .value[index] = fullName172 all_addresses.combinedNames .value[index] = combinedName173 vI_notificationBar.dump("## vI_smartIdentity: added fullName '" + fullName197 if (all_addresses.fullNames[index] == "" && fullName != "") { 198 all_addresses.fullNames[index] = fullName 199 all_addresses.combinedNames[index] = combinedName 200 vI_notificationBar.dump("## vI_smartIdentity: added fullName '" + fullName 174 201 + "' to stored email '" + email +"'\n") 175 202 } … … 177 204 } 178 205 } 179 vI_notificationBar.dump("## vI_smartIdentity: add new address to result:" + email+ "\n")180 all_addresses.emails .value[index] = email;181 all_addresses.fullNames .value[index] = fullName;182 all_addresses.combinedNames .value[index] = combinedName;206 vI_notificationBar.dump("## vI_smartIdentity: add new address to result:" + combinedName + "\n") 207 all_addresses.emails[index] = email; 208 all_addresses.fullNames[index] = fullName; 209 all_addresses.combinedNames[index] = combinedName; 183 210 all_addresses.number = index + 1; 184 211 return all_addresses; 212 }, 213 214 collectAddresses : function(all_addresses, hdr) { 215 // add emails from selected headers (stored by vI_getHeader.xul/js) 216 var reply_headers = vI.preferences.getCharPref("smart_reply_headers").split(/\n/) 217 for (index = 0; index < reply_headers.length; index++) { 218 // ------------- prepare fields to read the stored header ---------------- 219 var replyHeader_splitted = reply_headers[index].split(/:/) 220 // use first part (all before ':') as the header name 221 var replyHeaderName = replyHeader_splitted[0].toLowerCase() 222 // check second or third part for any number 223 var replyHeaderNumber = parseInt(replyHeader_splitted[1]) 224 if (isNaN(replyHeaderNumber)) replyHeaderNumber = parseInt(replyHeader_splitted[2]) 225 // check if Fullnames should be erased 226 var replyHeaderEmptyFullNames = ((replyHeader_splitted[1] && replyHeader_splitted[1].match(/@/)) || 227 (replyHeader_splitted[2] && replyHeader_splitted[2].match(/@/))) 228 229 // create header name to find the value 230 var replyHeaderNameToRead = replyHeaderName 231 if (!isNaN(replyHeaderNumber)) replyHeaderNameToRead += ":" + replyHeaderNumber 232 233 // ------------- read the stored header ------------------------------- 234 var value = hdr.getStringProperty("vI_" + replyHeaderNameToRead) 235 vI_notificationBar.dump("## vI_smartIdentity: reading header '" + 236 replyHeaderNameToRead + "'\n"); 237 238 // ------------- parse address-string to get a field of single email-addresses 239 var splitted = { number : 0, emails : {}, fullNames : {}, combinedNames : {} }; 240 splitted.number = vI.headerParser.parseHeadersWithArray(value, splitted.emails, 241 splitted.fullNames, splitted.combinedNames); 242 243 // move found addresses step by step to all_addresses, and change values if requested 244 for (i = 0; i < splitted.number; i++) { 245 all_addresses.emails[all_addresses.number] = splitted.emails.value[i] 246 247 // empty FullName if requested 248 if (replyHeaderEmptyFullNames) splitted.fullNames.value[i] = "" 249 all_addresses.fullNames[all_addresses.number] = splitted.fullNames.value[i] 250 251 // set CombinedName related to new values 252 if (all_addresses.fullNames[all_addresses.number] != "") 253 all_addresses.combinedNames[all_addresses.number] = 254 all_addresses.fullNames[all_addresses.number] + " <" + 255 all_addresses.emails[all_addresses.number] + ">" 256 else all_addresses.combinedNames[all_addresses.number] = 257 all_addresses.emails[all_addresses.number] 258 259 vI_notificationBar.dump("## vI_smartIdentity: found '" + 260 all_addresses.combinedNames[all_addresses.number++] + "'\n") 261 } 262 } 185 263 }, 186 264 … … 194 272 } 195 273 274 var all_addresses = { number : 0, emails : {}, fullNames : {}, combinedNames : {} }; 275 196 276 /* first step: collect addresses */ 197 198 // add additional emails from selected headers (stored by vI_getHeader.xul/js) 199 var addresses = "" 200 var reply_headers = vI.preferences.getCharPref("smart_reply_headers").split(/\n/) 201 for (index = 0; index < reply_headers.length; index++) { 202 var value = hdr.getStringProperty(reply_headers[index]) 203 if (value != "") { 204 vI_notificationBar.dump("## vI_smartIdentity: found '" + value + "' in stored headers\n") 205 addresses += ", " + value 206 } 207 } 208 209 if (vI.preferences.getBoolPref("smart_reply_prefer_headers")) 210 addresses = addresses + ", " + hdr.recipients + ", " + hdr.ccList 211 else addresses = hdr.recipients + ", " + hdr.ccList + addresses 212 // replace trailing commata 213 addresses = addresses.replace(/^((, )+)?/, ""); 214 vI_notificationBar.dump("## vI_smartIdentity: address-string: '" + addresses + "'\n") 215 216 var all_addresses = { number : 0, emails : {}, fullNames : {}, combinedNames : {} }; 217 all_addresses.number = vI.headerParser 218 .parseHeadersWithArray(addresses, all_addresses.emails, 219 all_addresses.fullNames, all_addresses.combinedNames); 220 221 vI_notificationBar.dump("## vI_smartIdentity: " + all_addresses.number + " addresses after parsing, before filtering\n") 222 277 vI_smartIdentity.collectAddresses(all_addresses, hdr); 278 279 vI_notificationBar.dump("## vI_smartIdentity: " + all_addresses.number + " address(es) after parsing, before filtering\n") 223 280 224 281 /* second step: filter (and sort) addresses */ … … 236 293 all_addresses = vI_smartIdentity.filterAddresses(all_addresses); 237 294 238 vI_notificationBar.dump("## vI_smartIdentity: filtering done, " + all_addresses.number + " address esleft\n")295 vI_notificationBar.dump("## vI_smartIdentity: filtering done, " + all_addresses.number + " address(es) left\n") 239 296 if (all_addresses.number == 0) return; 240 297 241 /* second step: select address */ 298 var smart_reply_defaultFullName = vI.preferences.getCharPref("smart_reply_defaultFullName") 299 if (smart_reply_defaultFullName != "") { 300 for (index = 0; index < all_addresses.number; index++) { 301 if (all_addresses.fullNames[index] == "") { 302 all_addresses.fullNames[index] = smart_reply_defaultFullName 303 all_addresses.combinedNames[index] = 304 smart_reply_defaultFullName + " <" + all_addresses.emails[index] + ">" 305 vI_notificationBar.dump("## vI_smartIdentity: added default FullName '" + 306 smart_reply_defaultFullName + "' to '" + all_addresses.emails[index] + "'\n") 307 } 308 } 309 } 310 311 /* third step: select address */ 242 312 243 313 vI_smartIdentity.addSmartIdentitiesToCloneMenu(all_addresses); … … 255 325 + vI.elements.strings.getString("vident.smartIdentity.moreThanOne"); 256 326 vI_notificationBar.addNote(label + ".", "smart_reply_notification"); 257 327 vI_smartIdentity.changeIdentityToSmartIdentity(all_addresses, 0); 258 328 } 259 329 }, 260 330 261 331 changeIdentityToSmartIdentity : function(all_addresses, selectedValue) { 262 vI_msgIdentityClone.setIdentity(all_addresses.combinedNames .value[selectedValue]);332 vI_msgIdentityClone.setIdentity(all_addresses.combinedNames[selectedValue]); 263 333 vI_smartIdentity.removeSmartIdentityFromRecipients(all_addresses, selectedValue); 264 334 }, … … 267 337 for (var row = 1; row <= top.MAX_RECIPIENTS; row ++) { 268 338 var input = awGetInputElement(row); 269 if (input.value == all_addresses.emails.value[index] || 270 input.value == all_addresses.combinedNames.value[index]) { 271 awDeleteRow(row); 339 if (input.value == all_addresses.emails[index] || 340 input.value == all_addresses.combinedNames[index]) { 341 awGetInputElement(row).value = "" 342 awCleanupRows() 272 343 vI_notificationBar.addNote(" " + 273 344 vI.elements.strings.getString("vident.smartIdentity.remRecipient"), … … 279 350 280 351 updateMsgComposeDialog : function() { 281 vI_msgIdentityClone.setMenuToIdentity(vI_smartIdentity.smartIdentity_BaseIdentity.key , false);352 vI_msgIdentityClone.setMenuToIdentity(vI_smartIdentity.smartIdentity_BaseIdentity.key); 282 353 // after inserting a new signature (as part of the new identity) the cursor is not at the right place. 283 354 // there is no easy way to est the cursor at the end, before the signature, so set it at the beginning. … … 295 366 .getAttribute("accountname") 296 367 for (index = 0; index < all_addresses.number; index++) 297 vI.helper.addIdentityMenuItem(object, all_addresses.combinedNames .value[index],368 vI.helper.addIdentityMenuItem(object, all_addresses.combinedNames[index], 298 369 accountname, "", "vid") 299 370 }, -
chrome/content/v_identity/v_identity.js
r9e9bab r2694fe 48 48 }, 49 49 50 selectIdentityMenuItem: function(object, MenuItem) {51 object.selectedItem = MenuItem;52 // set the account name on the menu list value.53 object.setAttribute("label", MenuItem.getAttribute("label"));54 object.setAttribute("accountname", MenuItem.getAttribute("accountname"));55 object.setAttribute("accountkey", MenuItem.getAttribute("accountkey"));56 object.setAttribute("value", MenuItem.getAttribute("value"));57 },58 59 50 addSeparatorToCloneMenu: function() { 60 51 var object = vI_msgIdentityClone.elements.Obj_msgIdentityClone; … … 72 63 var address = vI_msgIdentityClone.elements.Obj_MsgIdentityTextbox_clone.value; 73 64 var splitted = { number : 0, emails : {}, fullNames : {}, combinedNames : {} }; 74 vI.headerParser 65 vI.headerParser.parseHeadersWithArray(address, splitted.emails, 75 66 splitted.fullNames, splitted.combinedNames); 76 67 return { name: splitted.fullNames.value[0], email: splitted.emails.value[0], … … 86 77 .getService(Components.interfaces.nsIMsgHeaderParser), 87 78 88 params : window.arguments[0],89 90 79 // Those variables keep pointers to original functions which might get replaced later 91 80 original_functions : { … … 136 125 GenericSendMessage: function (msgType) { 137 126 vI_notificationBar.dump("## v_identity: VIdentity_GenericSendMessage\n"); 138 139 127 // dont allow user to fake identity if Message is not sended NOW and thunderbird-version is below 2.0 !!!! 140 var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); 141 var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator); 128 var appID = null; 129 var appVersion = null; 130 var versionChecker; 131 if("@mozilla.org/xre/app-info;1" in Components.classes) { 132 var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] 133 .getService(Components.interfaces.nsIXULAppInfo); 134 appID = appInfo.ID 135 appVersion = appInfo.version 136 } 137 if("@mozilla.org/xpcom/version-comparator;1" in Components.classes) 138 versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"] 139 .getService(Components.interfaces.nsIVersionComparator); 140 else appID = null; 142 141 const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}"; 143 //const MOZILLA_ID = "{86c18b42-e466-45a9-ae7a-9b95ba6f5640}";144 142 const SEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}"; 145 143 if (msgType != nsIMsgCompDeliverMode.Now && 146 (( appInfo.ID == THUNDERBIRD_ID && versionChecker.compare(appInfo.version, "2.0b") < 0) ||147 (appI nfo.ID == SEAMONKEY_ID && versionChecker.compare(appInfo.version, "1.5a") < 0))) {144 ((!appID) || (appID == THUNDERBIRD_ID && versionChecker.compare(appVersion, "2.0b") < 0) || 145 (appID == SEAMONKEY_ID && versionChecker.compare(appVersion, "1.5a") < 0))) { 148 146 var server = gAccountManager.defaultAccount.incomingServer.prettyName 149 147 var name = gAccountManager.defaultAccount.defaultIdentity.fullName … … 179 177 if (vI.original_functions.GenericSendMessage) return true; 180 178 if (typeof(GenericSendMessage)=="function") { 181 vI_notificationBar.dump("## v_identity: replace GenericSendMessage \n");179 vI_notificationBar.dump("## v_identity: replace GenericSendMessage (Virtual Identity activated)\n"); 182 180 vI.original_functions.GenericSendMessage = GenericSendMessage; 183 181 GenericSendMessage = function (msgType) { … … 199 197 // initialization // 200 198 init: function() { 199 // clear the DebugArea (not needed cause window is new) 200 //~ vI_notificationBar.clear_dump() 201 201 202 // initialize the pointers to extension elements 202 203 vI.elements.init_base() … … 208 209 storage_box.removeChild(vI.elements.Area_MsgIdentityHbox) 209 210 parent_hbox.appendChild(vI.elements.Area_MsgIdentityHbox); 210 211 vI.elements.Obj_MsgIdentity.setAttribute("hidden", "true");212 211 213 212 // initialize the pointers to extension elements (initialize those earlier might brake the interface) … … 230 229 addVirtualIdentityToMsgIdentityMenu : function() 231 230 { 232 vI.storeBaseIdentity = { 233 label : vI.elements.Obj_MsgIdentity.getAttribute("label"), 234 accountname : vI.elements.Obj_MsgIdentity.getAttribute("accountname"), 235 accountkey : vI.elements.Obj_MsgIdentity.getAttribute("accountkey"), 236 value : vI.elements.Obj_MsgIdentity.getAttribute("value") 237 } 231 vI.storeBaseIdentity = vI.elements.Obj_MsgIdentity.selectedItem 238 232 var newMenuItem = vI.helper.addIdentityMenuItem(vI.elements.Obj_MsgIdentityPopup, 239 233 vI_account.account.defaultIdentity.identityName, … … 241 235 vI_account.account.key, 242 236 vI_account.account.defaultIdentity.key) 243 vI.helper.selectIdentityMenuItem(vI.elements.Obj_MsgIdentity, newMenuItem) 237 vI.elements.Obj_MsgIdentity.selectedItem = newMenuItem; 238 vI.elements.Obj_MsgIdentity.setAttribute("label", newMenuItem.getAttribute("label")); 239 vI.elements.Obj_MsgIdentity.setAttribute("accountname", newMenuItem.getAttribute("accountname")); 240 vI.elements.Obj_MsgIdentity.setAttribute("value", newMenuItem.getAttribute("value")); 244 241 }, 245 242 … … 248 245 { 249 246 MenuItems = vI_msgIdentityClone.elements.Obj_MsgIdentity.firstChild.childNodes 250 for (index = 0; index < MenuItems.length; index++) { 251 if ( MenuItems[index].getAttribute("value") == vI_account.account.defaultIdentity.key ) 252 vI_msgIdentityClone.elements.Obj_MsgIdentity.firstChild.removeChild(MenuItems[index]) 253 } 254 vI.elements.Obj_MsgIdentity.setAttribute("label", vI.storeBaseIdentity.label); 255 vI.elements.Obj_MsgIdentity.setAttribute("accountname", vI.storeBaseIdentity.accountname); 256 vI.elements.Obj_MsgIdentity.setAttribute("accountkey", vI.storeBaseIdentity.accountkey); 257 vI.elements.Obj_MsgIdentity.setAttribute("value", vI.storeBaseIdentity.value); 247 for (index = 1; index <= MenuItems.length; index++) { 248 if ( MenuItems[MenuItems.length - index].getAttribute("value") == vI_account.account.defaultIdentity.key ) 249 vI_msgIdentityClone.elements.Obj_MsgIdentity.firstChild.removeChild(MenuItems[MenuItems.length - index]) 250 } 251 vI.elements.Obj_MsgIdentity.selectedItem = vI.storeBaseIdentity; 252 vI.elements.Obj_MsgIdentity.setAttribute("label", vI.storeBaseIdentity.getAttribute("label")); 253 vI.elements.Obj_MsgIdentity.setAttribute("accountname", vI.storeBaseIdentity.getAttribute("accountname")); 254 vI.elements.Obj_MsgIdentity.setAttribute("value", vI.storeBaseIdentity.getAttribute("value")); 255 vI.storeBaseIdentity = null; 258 256 }, 259 257 … … 268 266 GenericSendMessage = vI.original_functions.GenericSendMessage; 269 267 vI.original_functions.GenericSendMessage = null; 268 vI_notificationBar.dump("## v_identity: restored GenericSendMessage (Virtual Identity deactivated)\n"); 270 269 } 271 270 }, -
chrome/content/v_identity/v_identity.xul
r9e9bab r2694fe 50 50 </stringbundleset> 51 51 52 <vbox id="appcontent" > 53 <splitter id="vIDebugBoxSplitter" hidden="true"/> 54 <textbox id="vIDebugBox" hidden="true" multiline="true" readonly="true" 55 DOMAttrModified="if(event.attrName == 'value') this.value = event.newValue; return true;"/> 56 </vbox> 57 52 58 <toolbox id="headers-box"> 53 59 <notificationbox id="vINotification" position="1" insertbefore="MsgHeadersToolbar" /> … … 58 64 <hbox id="msgIdentityHbox" flex="1"> 59 65 <menulist id="msgIdentity_clone" class="identity_clone-menulist person-icon" 60 label="..." flex="1" oncommand="vI_msgIdentityClone.LoadIdentity( false);">66 label="..." flex="1" oncommand="vI_msgIdentityClone.LoadIdentity();" hidden="true"> 61 67 <menupopup id="msgIdentityPopup_clone"/> 62 68 </menulist> -
chrome/locale/cs-CZ/v_identity/contents.rdf
r9e9bab r2694fe 20 20 21 21 </RDF:RDF> 22 </RDF:RDF> -
chrome/locale/cs-CZ/v_identity/v_identity.dtd
r9e9bab r2694fe 12 12 <!ENTITY vident.prefs.smartReplyNewsgroups.label "pouÅŸÃt Smart Reply i pÅi odpovÄdi do diskusnà skupiny"> 13 13 <!ENTITY vident.prefs.SMTP.label "zobrazit nabÃdku SMTP"> 14 <!ENTITY vident.prefs.menuEntry.label "pÅidat poloÅŸku do dialogu MoÅŸnosti v nabÃdce Nástroje"> 14 15 <!ENTITY vident.prefs.vIdentityTab.header "Nastavenà virtuálnÃch identit"> 15 16 <!ENTITY vident.prefs.vIdentityTab.valueTab.label "vlastnosti ke zkopÃrovánÃ"> … … 28 29 <!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. pouÅŸÃt adresy"> 29 30 <!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Smart Reply"> 30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Pro nalezenà identity pro odpovÄÄ musà Smart Reply zÃskat seznam moÅŸnÃœch identit odesilatele. Analyzuje proto hlaviÄky 'To' a 'Cc'. Má-li Smart Reply analyzovat dodateÄné hlaviÄky , zadejte je zde (moÅŸná si pro jejich rozeznánà budete muset nainstalovat dalÅ¡Ã rozÅ¡ÃÅenÃ, jako napÅÃklad enigmail nebo mnenhy).">31 <!ENTITY vident.prefs.smartReply.headers.desc "nové hlaviÄky - jedna na Åádku, bez ':', napÅÃklad 'x-original-to' ">32 <!ENTITY vident.prefs.smartReply. preferHeader.label "upÅednostnit adresy tÄchto hlaviÄek pÅed 'To' a 'Cc'">31 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Pro nalezenà identity pro odpovÄÄ musà Smart Reply zÃskat seznam moÅŸnÃœch identit odesilatele. Analyzuje proto hlaviÄky 'To' a 'Cc'. Má-li Smart Reply analyzovat dodateÄné hlaviÄky. Zde můşete zadat tyto a/nebo jiné hlaviÄky. (DodateÄné moÅŸnosti: Pro vÃœbÄr n-té hlaviÄky z nÄkolika hlaviÄek stejného jména pÅidejte ':n'. Pokud k nÄkterému záznamu pÅidáte ':@', pouÅŸije se pouze e-mailová adresa a jméno bude ignorováno.)"> 32 <!ENTITY vident.prefs.smartReply.headers.desc "nové hlaviÄky - jedna na Åádku, bez ':', napÅÃklad 'x-original-to' nebo 'x-original-to:@' nebo 'x-original-to:2:@'"> 33 <!ENTITY vident.prefs.smartReply.headers.reset "nastavit vÃœchozà hodnoty"> 33 34 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Adresy se musà po zÃskánà filtrovat. Filtry jsou aplikovány postupnÄ, můşete je tedy pouÅŸÃt pro seÅazenà vÃœsledku. Prvnà nalezená adresa můşe bÃœt ihned pouÅŸita jako odesilatelova identita. Pokud nepouÅŸijete filtr, budou pÅeneseny vÅ¡echny adresy."> 34 35 <!ENTITY vident.prefs.smartReply.filter.desc "Filtr Smart Reply - jeden filtr na Åádku, je moÅŸné pouÅŸÃt regulárnà vÃœrazy (napÅÃklad '/@mozilla.org$/' platà pro vÅ¡echny e-maily z domény mozilla.org"> 35 36 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "pÅi porovnánà e-mailu s existujÃcÃmi identitami ignorovat celé jméno"> 37 <!ENTITY vident.prefs.smartReply.defaultFullname.label "pokud k şádné nalezené e-mailové adrese nenà uvedeno jméno, pouÅŸÃt následujÃcÃ:"> 36 38 <!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Vyfiltrované adresy jsou nakonec pÅidány do rozbalovacÃho seznamu identit. Můşete si také zvolit, jak by mÄly bÃœt pouÅŸity jako nové identity odesilatelů."> 37 39 <!ENTITY vident.prefs.smartReply.ask.label "otevÅÃt dialog pro vÃœbÄr identity"> … … 44 46 <!ENTITY vident.prefs.notifyTime.prefix.label "doba zobrazenà zpráv o stavu (0 = nekoneÄno)"> 45 47 <!ENTITY vident.prefs.notifyTime.postfix.label "vteÅin"> 48 <!ENTITY vident.prefs.notificationTab.Debug.caption "LadÄnÃ"> 49 <!ENTITY vident.prefs.notifyDebug.desc "Chcete-li hledat chyby, vyÅeÅ¡it problémy s konfiguracà a porozumÄt tomu, co Virtual Identity dÄlá (pÅedevÅ¡Ãm s filtry SmartReply), můşete si zobrazovat dalÅ¡Ã informace. PouÅŸità této volby vÅ¡ak zpomalà váš e-mailovÃœ klient, proto by nemÄla bÃœt zapnuta stále."> 50 <!ENTITY vident.prefs.notifyDebug.label "zobrazit pole s ladÃcÃmi informacemi"> 46 51 <!ENTITY vident.accPane.prettyName.prefix "virtual Id"> 47 52 <!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Smart Reply"> -
chrome/locale/de-DE/v_identity/v_identity.dtd
r9e9bab r2694fe 12 12 <!ENTITY vident.prefs.smartReplyNewsgroups.label "verwende Smart Reply auch bei Antworten an Newsgruppen"> 13 13 <!ENTITY vident.prefs.SMTP.label "zeige SMTP Auswahlmenu"> 14 <!ENTITY vident.prefs.menuEntry.label "fÃŒge Einstellungs-Dialog zu Menu Extras hinzu"> 14 15 <!ENTITY vident.prefs.vIdentityTab.header "Eigenschaften der Virtuellen IdentitÀt"> 15 16 <!ENTITY vident.prefs.vIdentityTab.valueTab.label "zu kopierende Einstellungen"> … … 28 29 <!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. Adressen ÃŒbernehmen"> 29 30 <!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Smart Reply"> 30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "In einem ersten Schritt muss 'Smart Reply' eine Liste der möglichen Sendeadressen ihrer Antwort erstellen. DafÃŒr werden die EmpfÀngerfelder 'To' und 'Cc' der email ausgewertet. Wenn weitere Kopfzeilen der Mail ausgewertet werden sollen, kann dies hier angegeben werden (dafÃŒr mÃŒssen möglicherweise andere Erweiterungen, bspw. enigmail oder mnenhy, installiert sein).">31 <!ENTITY vident.prefs.smartReply.headers.desc "zusÀtzliche Kopfzeilen - je eine pro Zeile , Angabe ohne ':', bspw. 'x-original-to'">32 <!ENTITY vident.prefs.smartReply. preferHeader.label "bevorzuge Adressen dieser Kopfzeilen vor 'To' und 'Cc'">33 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Im zweiten Schritt werden die möglichen Sendeadressen gefiltert. Alle Filter werden der Reihe nach angewandt, so werden die Adressen gleichzeitig sortiert. Die zuerst gefundene Adresse kann dann direkt als Sender ÃŒbernommen werden. Wird kein Filter angegeben, werden alle Adres en ÃŒbernommen.">31 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "In einem ersten Schritt muss 'Smart Reply' eine Liste der möglichen Sendeadressen ihrer Antwort erstellen. DafÃŒr werden ÃŒblicherweise die EmpfÀngerfelder 'To' und 'Cc' der Email ausgewertet. Hier können diese und weitere Kopfzeilen angegeben werden. (ergÀnzende Optionen: Auswahl der Kopfzeile Nummer n aus mehreren Kopfzeilen mit gleicher Bezeichnung durch ':n'. Email-Adressen ÃŒbernehmen, Namen ignorieren durch ':@'.)"> 32 <!ENTITY vident.prefs.smartReply.headers.desc "zusÀtzliche Kopfzeilen - je eine pro Zeile bspw. 'x-original-to' oder 'x-original-to:@' oder 'x-original-to:2:@'"> 33 <!ENTITY vident.prefs.smartReply.headers.reset "setze Vorgabe-Werte"> 34 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Im zweiten Schritt werden die möglichen Sendeadressen gefiltert. Alle Filter werden der Reihe nach angewandt, so werden die Adressen gleichzeitig sortiert. Die zuerst gefundene Adresse kann dann direkt als Sender ÃŒbernommen werden. Wird kein Filter angegeben, werden alle Adressen ÃŒbernommen."> 34 35 <!ENTITY vident.prefs.smartReply.filter.desc "Smart Reply Filter - eine Zeile je Filter, regulÀre AusdrÃŒcke sind möglich, bspw. filtert '/@mozilla.org$/' nach allen Emailadressen der domain mozilla.org"> 35 36 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignoriere Namensangaben beim Vergleich der Email-Adressen mit vorhandenen IdentitÀten"> 37 <!ENTITY vident.prefs.smartReply.defaultFullname.label "falls kein Name zu einer Email-Adresse gefunden wurde, benutze folgenden Namen:"> 36 38 <!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Die gefilterten Adressen werden abschliessend dem Sender-Auswahlmenu hinzugefÃŒgt. Hier kann entschieden werden, ob und wie die gefundenen IdentitÀten als Sender ÃŒbernommen werden."> 37 39 <!ENTITY vident.prefs.smartReply.ask.label "öffne ein Dialogfenster zur Auswahl der IdentitÀt"> … … 44 46 <!ENTITY vident.prefs.notifyTime.prefix.label "Zeit, bis Nachrichten ausgeblendet werden (0 fÃŒr immer an)"> 45 47 <!ENTITY vident.prefs.notifyTime.postfix.label "Sekunden"> 48 <!ENTITY vident.prefs.notificationTab.Debug.caption "Fehlersuche"> 49 <!ENTITY vident.prefs.notifyDebug.desc "Zur Fehlersuche und zum besseren VerstÀndnis der Funktionsweise von Virtual Identity, besonders auch der Filter von SmartReply, können weitere Informationen in einem eigenen Bereich angezeigt werden. Diese Debug-Informationen stehen nur in englischer Sprache zur VerfÃŒgung. Die Ausgabe verlangsamt die Arbeit des Email-Programms und sollte darum nicht dauerhaft aktiviert bleiben."> 50 <!ENTITY vident.prefs.notifyDebug.label "zeige Bereich mit Informationen zur Fehlersuche"> 46 51 <!ENTITY vident.accPane.prettyName.prefix "virtuelle Id"> 47 52 <!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Smart Reply"> -
chrome/locale/en-US/v_identity/v_identity.dtd
r9e9bab r2694fe 12 12 <!ENTITY vident.prefs.smartReplyNewsgroups.label "use Smart Reply also if answering to a newsgroup"> 13 13 <!ENTITY vident.prefs.SMTP.label "show SMTP Menu"> 14 <!ENTITY vident.prefs.menuEntry.label "add entry for Settings-Dialog to Tools menu"> 14 15 <!ENTITY vident.prefs.vIdentityTab.header "Properties of Virtual Identities"> 15 16 <!ENTITY vident.prefs.vIdentityTab.valueTab.label "attributes to copy"> … … 28 29 <!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. use addresses"> 29 30 <!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Smart Reply"> 30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore the header-fields 'To' and 'Cc' are analyzed. If Smart Reply should analyze additional header-fields, you can enter them here (maybe you need to install another extension to recognize them, as for instance enigmail or mnenhy).">31 <!ENTITY vident.prefs.smartReply.headers.desc "additional headers - one per line, without ':', for instance 'x-original-to'">32 <!ENTITY vident.prefs.smartReply. preferHeader.label "prefer addresses of those headers against 'To' und 'Cc'">31 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields 'To' and 'Cc' are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add ':n'. If you add ':@' to any entry, only email-addresses are used, names are ignored.)"> 32 <!ENTITY vident.prefs.smartReply.headers.desc "additional headers - one per line, for instance 'x-original-to' or 'x-original-to:@' or 'x-original-to:2:@'"> 33 <!ENTITY vident.prefs.smartReply.headers.reset "set default values"> 33 34 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "After getting the addresses they have to be filtered. All filters are used after each other, so you can use them to sort the result too. At the end the first-found address might get used instantly as a senders identity. If you don't use a filter, all addresses are transferred."> 34 35 <!ENTITY vident.prefs.smartReply.filter.desc "Smart Reply filter - one filter per line, usage of regular Expressions possible (for instance '/@mozilla.org$/' is matching every email from domain mozilla.org"> 35 36 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignore full name while comparing email addresses with existing identities"> 37 <!ENTITY vident.prefs.smartReply.defaultFullname.label "if there is no name to any found email-address, use the following one:"> 36 38 <!ENTITY vident.prefs.smartReplyTab.Tab3.desc "At the end the filtered addresses are added to the message-identity dropdown menu. You can also select, how they are might be used as the new senders identity."> 37 39 <!ENTITY vident.prefs.smartReply.ask.label "open a dialog to choose Identity"> … … 44 46 <!ENTITY vident.prefs.notifyTime.prefix.label "time to show status messages (0 = infinite)"> 45 47 <!ENTITY vident.prefs.notifyTime.postfix.label "seconds"> 48 <!ENTITY vident.prefs.notificationTab.Debug.caption "Debugging"> 49 <!ENTITY vident.prefs.notifyDebug.desc "To find bugs, solve configuration problems and understand what Virtual Identity is doing, especially with the SmartReply-filters, you can enable some additional informations. Using this option slows down your mail-client, therefore it shouldn't be activated permanently."> 50 <!ENTITY vident.prefs.notifyDebug.label "show area with debug-informations"> 46 51 <!ENTITY vident.accPane.prettyName.prefix "virtual Id"> 47 52 <!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Smart Reply"> -
chrome/locale/es-ES/v_identity/v_identity.dtd
r9e9bab r2694fe 12 12 <!ENTITY vident.prefs.smartReplyNewsgroups.label "usar la respuesta rápida también para responder a los grupos de noticias"> 13 13 <!ENTITY vident.prefs.SMTP.label "mostrar menú SMTP"> 14 <!ENTITY vident.prefs.menuEntry.label "añadir entrada para el cuadro de opciones al menú Herramientas"> 14 15 <!ENTITY vident.prefs.vIdentityTab.header "Propiedades de las identidades virtuales"> 15 16 <!ENTITY vident.prefs.vIdentityTab.valueTab.label "atributos a copiar"> … … 28 29 <!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. usar direcciones"> 29 30 <!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity - Respuesta rápida"> 30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Para encontrar la identidad con la que responder, la respuesta rápida tiene que obtener la lista de los posibles remitentes. Para ello, las cabeceras 'Para' y 'Cc' son analizadas. Si Smart Reply tiene que analizar cabeceras adicionales, puede incluirlas aquà ( es posible que tenga que instalar alguna otra extensión para poder reconocerlas, como por ejemplo enigmail o mnenhy).">31 <!ENTITY vident.prefs.smartReply.headers.desc "cabeceras adicionales - una por lÃnea, sin ':', or ejemplo 'x-original-to'">32 <!ENTITY vident.prefs.smartReply. preferHeader.label "usar las direcciones de estas cabeceras en lugar de 'Para' o 'Cc'">31 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "Para encontrar la identidad con la que responder, la respuesta rápida tiene que obtener la lista de los posibles remitentes. Para ello, las cabeceras 'Para' y 'Cc' son analizadas. Si Smart Reply tiene que analizar cabeceras adicionales, puede incluirlas aquà (Opciones adicionales: para seleccionar la cabecera número n de varias con el mismo nombre añada ':,'. Si añade ':@' en alguna entrada, sólo se usarán las direcciones de correo, los nombres serán ignorados.)"> 32 <!ENTITY vident.prefs.smartReply.headers.desc "cabeceras adicionales - una por por ejemplo 'x-original-to' o 'x-original-to:@' o 'x-original-to:2:@'"> 33 <!ENTITY vident.prefs.smartReply.headers.reset "establecer los valores por defecto"> 33 34 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Una vez obtenidas las direcciones, éstas son filtradas. Todos los filtros se usan después de los anteriores, por lo que puede usarlos también para ordenar los resultados. Al terminar, la primera dirección encontrada se usará como la identidad del remitente. Si no usa filtros, todas las direcciones serán transferidas."> 34 35 <!ENTITY vident.prefs.smartReply.filter.desc "Filtros de respuesta rápida - un filtro por lÃnea, con posibilidad de usar expresiones regulares (por ejemplo, '/@mozilla.org$/' coincide con cualquier correo del dominio mozilla.org"> 35 36 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignorar los nombres completos al comparar las direcciones de correo con las identidades existentes"> 37 <!ENTITY vident.prefs.smartReply.defaultFullname.label "si no hay nombres en las direcciones encontradas, usar el siguiente:"> 36 38 <!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Una vez terminado, las direcciones filtradas se añadirán al menú desplegable de identidades. Puede también seleccionar cómo se usarán como las nuevas identidades del remitente."> 37 39 <!ENTITY vident.prefs.smartReply.ask.label "abrir una ventana para preguntar la identidad"> … … 44 46 <!ENTITY vident.prefs.notifyTime.prefix.label "tiempo para mostrar el estado de los mensajes (0 = infinito)"> 45 47 <!ENTITY vident.prefs.notifyTime.postfix.label "segundos"> 48 <!ENTITY vident.prefs.notificationTab.Debug.caption "Depuración"> 49 <!ENTITY vident.prefs.notifyDebug.desc "Para encontrar fallos, resolver problemas y entender lo que está haciendo Virtual Identity, especialmente con los filtros de respuesta rápida, puede habilitar alguna información adicional. Esta información aparecerá mayoritariamente en inglés. Si usa esta opción, el cliente de correo será más lento, por lo que no debe estar activa permanentemente."> 50 <!ENTITY vident.prefs.notifyDebug.label "mostrar el área con la información de depuración"> 46 51 <!ENTITY vident.accPane.prettyName.prefix "Identidad virtual"> 47 52 <!ENTITY vident.replySelector.dialogheader.title "Virtual Identity - Respuesta rápida"> -
chrome/locale/fr-FR/v_identity/v_identity.dtd
r9e9bab r2694fe 12 12 <!ENTITY vident.prefs.smartReplyNewsgroups.label "utiliser également une réponse intelligente lors d'une réponse à un forum"> 13 13 <!ENTITY vident.prefs.SMTP.label "montrer le menu SMTP"> 14 <!ENTITY vident.prefs.menuEntry.label "add entry for Settings-Dialog to Tools menu"> 14 15 <!ENTITY vident.prefs.vIdentityTab.header "Propriétés des identités virtuelles"> 15 16 <!ENTITY vident.prefs.vIdentityTab.valueTab.label "Attributs à copier"> … … 28 29 <!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. Utiliser les adresses"> 29 30 <!ENTITY vident.prefs.smartReplyTab.caption "Réponse intelligente de Virtual Identity"> 30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc " Pour trouver une identité de réponse, la réponse intelligente doit obtenir une liste des identités d'expéditeur possibles. C'est pourquoi les champs d'en-têtes 'Ã' et 'Cc' sont analysés. Si vous voulez que la réponse intelligente analyse d'autres champs d'en-têtes, vous pouvez les entrer ici (il vous faut peut-être une autre extension pour les reconnaître, par exemple enigmail ou mnenhy).">31 <!ENTITY vident.prefs.smartReply.headers.desc "en-têtes supplémentaires - un par ligne sans ':', par exemple 'x-original-to'">32 <!ENTITY vident.prefs.smartReply. preferHeader.label "préférer les adresses des ces en-têtes à celles de 'Ã' et 'Cc'">31 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields 'To' and 'Cc' are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add ':n'. If you add ':@' to any entry, only email-addresses are used, names are ignored.)"> 32 <!ENTITY vident.prefs.smartReply.headers.desc "en-têtes supplémentaires - un par ligne, par exemple 'x-original-to' ou 'x-original-to:@' ou 'x-original-to:2:@'"> 33 <!ENTITY vident.prefs.smartReply.headers.reset "Restaurer les valeurs par défaut"> 33 34 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "AprÚs avoir obtenu les adresses il faut les filtrer. Les filtres sont utilisés l'un aprÚs l'autre, donc vous pouvez aussi les utiliser pour classer les résultats. A la fin, la premiÚre adresse trouvée peut être utilisée instantanément comme identité d'expéditeur. Si vous n'utilisez aucun filtre, toutes les adresses sont transférées."> 34 <!ENTITY vident.prefs.smartReply.filter.desc " filtrede la réponse intelligente - un filtre par ligne, vous pouvez utiliser des expressions réguliÚres (par exemple '/@mozilla.org$/' correspond à toutes les adresses du domaine mozilla.org)">35 <!ENTITY vident.prefs.smartReply.filter.desc "Filtre(s) de la réponse intelligente - un filtre par ligne, vous pouvez utiliser des expressions réguliÚres (par exemple '/@mozilla.org$/' correspond à toutes les adresses du domaine mozilla.org)"> 35 36 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignorer le nom complet lors de la comparaison des adresses E-mails avec les identités existantes"> 37 <!ENTITY vident.prefs.smartReply.defaultFullname.label "Si aucune adresse E-mail trouvée ne contient un nom, utiliser le nom suivant :"> 36 38 <!ENTITY vident.prefs.smartReplyTab.Tab3.desc "à la fin, les adresses filtrées sont ajoutées au menu déroulant d'identité du message. Vous pouvez également choisir la maniÚre dont elles sont utilisées comme que nouvelle identité d'expéditeur."> 37 39 <!ENTITY vident.prefs.smartReply.ask.label "ouvrir une boîte de dialogue pour choisir l'identité"> … … 44 46 <!ENTITY vident.prefs.notifyTime.prefix.label "durée d'affichage des messages d'état (0 = infini)"> 45 47 <!ENTITY vident.prefs.notifyTime.postfix.label "secondes"> 48 <!ENTITY vident.prefs.notificationTab.Debug.caption "Débogage"> 49 <!ENTITY vident.prefs.notifyDebug.desc "Pour détecter les bugs, résoudre les problÚmes de configuration et comprendre ce que Virtual Identity fait, en particulier avec les filtres de réponse intelligente, vous pouvez activer la production d'informations complémentaires. Cette option ralentit votre client E-mail, par conséquent vous ne devriez pas l'activer en l'absence de nécessité."> 50 <!ENTITY vident.prefs.notifyDebug.label "afficher les informations de débogage"> 46 51 <!ENTITY vident.accPane.prettyName.prefix "Id virtuelle"> 47 52 <!ENTITY vident.replySelector.dialogheader.title "Réponse intelligente de Virtual Identity"> -
chrome/locale/it-IT/v_identity/v_identity.dtd
r9e9bab r2694fe 12 12 <!ENTITY vident.prefs.smartReplyNewsgroups.label "Utilizza Smart Reply anche per le risposte ai newsgroup"> 13 13 <!ENTITY vident.prefs.SMTP.label "Visualizza il menu SMTP"> 14 <!ENTITY vident.prefs.menuEntry.label "add entry for Settings-Dialog to Tools menu"> 14 15 <!ENTITY vident.prefs.vIdentityTab.header "Proprietà delle identità virtuali"> 15 16 <!ENTITY vident.prefs.vIdentityTab.valueTab.label "Attributi da copiare"> … … 28 29 <!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. utilizza indirizzi"> 29 30 <!ENTITY vident.prefs.smartReplyTab.caption "Smart Reply di Virtual Identity"> 30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc " Per trovare un'identità da usare per le risposte, Smart Reply dovrà costruire una lista delle possibili identità da utilizzare per l'invio. Perciò, verranno analizzate le intestazioni 'A' e 'Cc'. Se si vuole che Smart Reply analizzi altre intestazioni, si possono inserire in questo campo (probabilmente Ú necessario installare un'altra estensione in grado di riconoscerle, come ad esempio EnigMail o MNENHY).">31 <!ENTITY vident.prefs.smartReply.headers.desc " intestazioni aggiuntive - da inserire in righe separate senza il segno ':'; ad esempio 'x-original-to'">32 <!ENTITY vident.prefs.smartReply. preferHeader.label "considera gli indirizzi di queste intestazioni prioritari rispetto ad 'A' e 'Cc'">31 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields 'To' and 'Cc' are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add ':n'. If you add ':@' to any entry, only email-addresses are used, names are ignored.)"> 32 <!ENTITY vident.prefs.smartReply.headers.desc "additional headers - one per line, for instance 'x-original-to' or 'x-original-to:@' or 'x-original-to:2:@'"> 33 <!ENTITY vident.prefs.smartReply.headers.reset "Imposta valori predefiniti"> 33 34 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Dopo aver raccolto gli indirizzi, Ú necessario filtrarli. Tutti i filtri vengono usati in sequenza, in questo modo Ú possibile filtrare anche i risultati. Alla fine della procedura il primo indirizzo trovato può essere immediatamente utilizzato come identità per la spedizione. Se si decide di non utilizzare i filtri, vengono trasferiti tutti gli indirizzi."> 34 35 <!ENTITY vident.prefs.smartReply.filter.desc "Filtro per Smart Reply - da inserire in righe separate. à possibile utilizzare espressioni regolari (ad esempio '/@mozilla.org$/' da far corrispondere ad ogni e-mail inviata dal dominio mozilla.org"> 35 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "ignora i nomi completi durante il confronto tra indirizzi e-mail e identità esistenti"> 36 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "Ignora i nomi completi durante il confronto tra indirizzi e-mail e identità esistenti"> 37 <!ENTITY vident.prefs.smartReply.defaultFullname.label "Se non Ú presente alcun nome negli indirizzi email individuati, utilizza il seguente:"> 36 38 <!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Alla fine dell'operazione, gli indirizzi filtrati verranno aggiunti al menu di scelta dell'identità da utilizzare per il messaggio. à possibile scegliere uno di essi come nuova identità per l'invio."> 37 <!ENTITY vident.prefs.smartReply.ask.label " visualizza una finestra di dialogo per la scelta dell'identità ">38 <!ENTITY vident.prefs.smartReply.ask_always.label " chiedi anche se esiste un solo indirizzo possibile">39 <!ENTITY vident.prefs.smartReply.autocreate.label " utilizza la prima identità individuata senza interazione con l'utente">39 <!ENTITY vident.prefs.smartReply.ask.label "Visualizza una finestra di dialogo per la scelta dell'identità "> 40 <!ENTITY vident.prefs.smartReply.ask_always.label "Chiedi anche se esiste un solo indirizzo possibile"> 41 <!ENTITY vident.prefs.smartReply.autocreate.label "Utilizza la prima identità individuata senza interazione con l'utente"> 40 42 <!ENTITY vident.prefs.notificationTab.header "Messaggi di stato"> 41 43 <!ENTITY vident.prefs.notificationTab.caption "Notifiche"> 42 44 <!ENTITY vident.prefs.notifyHeaders.label "Mostra informazioni sulle intestazioni riconosciute"> 43 45 <!ENTITY vident.prefs.notifySmartIdentity.label "Attiva i messaggi di stato per Smart Reply / Smart Draft"> 44 <!ENTITY vident.prefs.notifyTime.prefix.label " durata della visualizzazione per i messaggi di stato (0 = infinita)">46 <!ENTITY vident.prefs.notifyTime.prefix.label "Durata della visualizzazione per i messaggi di stato (0 = infinita)"> 45 47 <!ENTITY vident.prefs.notifyTime.postfix.label "secondi"> 48 <!ENTITY vident.prefs.notificationTab.Debug.caption "Risoluzione dei problemi"> 49 <!ENTITY vident.prefs.notifyDebug.desc "Al fine di identificare i bug, risolvere problemi di configurazione e comprendere le operazioni compiute da Virtual Identity, Ú possibile ottenere alcune informazioni aggiuntive. L'utilizzo di questa opzione causerà rallentamenti al client di posta, e per questo motivo si consiglia di attivarla soltanto per brevi periodi."> 50 <!ENTITY vident.prefs.notifyDebug.label "Visualizza area con le informazioni relative al debug"> 46 51 <!ENTITY vident.accPane.prettyName.prefix "Id virtuale"> 47 52 <!ENTITY vident.replySelector.dialogheader.title "Smart Reply di Virtual Identity"> -
chrome/locale/nl-NL/v_identity/v_identity.dtd
r9e9bab r2694fe 12 12 <!ENTITY vident.prefs.smartReplyNewsgroups.label "Slim Antwoorden ook gebruiken als aan een nieuwsgroep wordt geantwoord"> 13 13 <!ENTITY vident.prefs.SMTP.label "SMTP menu weergeven"> 14 <!ENTITY vident.prefs.menuEntry.label "Onderdeel voor Instellingen-dialoogvenster aan Extra menu toevoegen"> 14 15 <!ENTITY vident.prefs.vIdentityTab.header "Eigenschappen van virtuele identiteiten"> 15 16 <!ENTITY vident.prefs.vIdentityTab.valueTab.label "Te kopiëren eigenschappen"> … … 28 29 <!ENTITY vident.prefs.smartReplyTab.Tab3.label "3. adressen gebruiken"> 29 30 <!ENTITY vident.prefs.smartReplyTab.caption "Virtual Identity Slim Antwoorden"> 30 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc " Om een Antwoord-identiteit te vinden moet Slim Antwoorden een lijst van mogelijke verzender-identiteiten ophalen. Daarom worden de koptekstvelden 'Aan' en 'Cc' geanalyseerd. Als Slim Antwoorden nog meer koptekstvelden moet analyseren kunt u ze hier ingeven (wellicht dient u een andere extensie te installeren om ze te herkennen, zoals bijvoorbeeld enigmail or mnenhy).">31 <!ENTITY vident.prefs.smartReply.headers.desc "Aanvullende kopteksten - één per regel, zonder ':', bijvoorbeeld 'x-original-to'">32 <!ENTITY vident.prefs.smartReply. preferHeader.label "Adressen van deze kopteksten prevaleren boven 'Aan' en 'Cc'">31 <!ENTITY vident.prefs.smartReplyTab.Tab1.desc "To find a Reply-Identity, Smart Reply has to get a list of possible sender identities. Therefore usually the header-fields 'To' and 'Cc' are analyzed. Here you can enter those and/or other header-fields. (additional options: to select header number n out of any headers with the same name add ':n'. If you add ':@' to any entry, only email-addresses are used, names are ignored.)"> 32 <!ENTITY vident.prefs.smartReply.headers.desc "Aanvullende kopteksten - één per regel, bijvoorbeeld 'x-original-to' of 'x-original-to:@' of 'x-original-to:2:@'"> 33 <!ENTITY vident.prefs.smartReply.headers.reset "Standaardwaarden instellen"> 33 34 <!ENTITY vident.prefs.smartReplyTab.Tab2.desc "Na het ophalen van de adressen dienen ze te worden gefilterd. Alle filters worden na elkaar toegepast, dus u kunt ze ook gebruiken om het resultaat te sorteren. Op het einde kan het eerst aangetroffen adres worden gebruikt als de identiteit van de afzender. Als u geen filter gebruikt worden alle adressen overgebracht."> 34 35 <!ENTITY vident.prefs.smartReply.filter.desc "Slim Antwoorden filter - één filter per regel, gebruik van reguliere expressies is mogelijk (bijvoorbeeld: '/@mozilla.org$/' komt overeen met elk bericht van domein mozilla.org)"> 35 36 <!ENTITY vident.prefs.smartReply.ignoreFullname.label "Volledige naam bij vergelijken van e-mail adressen met bestaande identiteiten negeren"> 37 <!ENTITY vident.prefs.smartReply.defaultFullname.label "Als er geen naam bij een gevonden e-mail adres staat de volgende gebruiken:"> 36 38 <!ENTITY vident.prefs.smartReplyTab.Tab3.desc "Op het einde worden de gefilterde adressen toegevoegd aan het bericht-identiteit dropdown menu. U kunt ook selecteren hoe ze worden gebruikt als de nieuwe afzender-identiteit."> 37 39 <!ENTITY vident.prefs.smartReply.ask.label "Dialoogvenster openen om identiteit te kiezen"> … … 44 46 <!ENTITY vident.prefs.notifyTime.prefix.label "Weergaveduur statusberichten (0=oneindig)"> 45 47 <!ENTITY vident.prefs.notifyTime.postfix.label "seconden"> 48 <!ENTITY vident.prefs.notificationTab.Debug.caption "Foutopsporing"> 49 <!ENTITY vident.prefs.notifyDebug.desc "Om fouten te vinden, configuratieproblemen op te lossen en te begrijpen wat Virtual Identity doet, in het bijzonder met de SlimAntwoorden-filters, kunt u wat aanvullende informatie activeren. Het gebruik van deze optie vertraagt uw mailprogramma en dient derhalve niet permanent ingeschakeld te zijn."> 50 <!ENTITY vident.prefs.notifyDebug.label "Veld met foutopsporings-informatie weergeven"> 46 51 <!ENTITY vident.accPane.prettyName.prefix "virtuele ID"> 47 52 <!ENTITY vident.replySelector.dialogheader.title "Virtual Identity Slim Antwoorden"> -
chrome/skin/classic/v_identity/v_identity.css
r9e9bab r2694fe 15 15 margin: 0; 16 16 padding: 0; 17 } 18 19 #vIDebugBox { 20 overflow: auto; 21 font-size: x-small; 22 height: 10em; 17 23 } 18 24 -
defaults/preferences/preferences.js
r9e9bab r2694fe 8 8 pref("extensions.virtualIdentity.smart_draft", true); 9 9 pref("extensions.virtualIdentity.smart_reply", true); 10 pref("extensions.virtualIdentity.menu_entry", true); 10 11 pref("extensions.virtualIdentity.smart_reply_ask", false); 11 12 pref("extensions.virtualIdentity.smart_reply_ask_always", false); 12 pref("extensions.virtualIdentity.smart_reply_headers", "x-original-to ");13 pref("extensions.virtualIdentity.smart_reply_headers", "x-original-to\nto\ncc"); 13 14 pref("extensions.virtualIdentity.smart_reply_filter", ""); 14 pref("extensions.virtualIdentity.smart_reply_prefer_headers", true);15 15 pref("extensions.virtualIdentity.smart_reply_notification", true); 16 pref("extensions.virtualIdentity.smart_reply_defaultFullName", ""); 16 17 pref("extensions.virtualIdentity.smart_reply_ignoreFullName", false); 17 18 pref("extensions.virtualIdentity.smart_reply_autocreate", true); … … 21 22 pref("extensions.virtualIdentity.notification_timeout", 5); 22 23 24 23 25 pref("extensions.{dddd428e-5ac8-4a81-9f78-276c734f75b8}.description", "chrome://v_identity/locale/v_identity.properties"); -
install.js
r9e9bab r2694fe 7 7 // Editable Items Begin 8 8 var displayName = "Virtual Identity"; // The name displayed to the user (don't include the version) 9 var version = "0.4. 0";9 var version = "0.4.1"; 10 10 var name = "v_identity"; // The leafname of the JAR file (without the .jar part) 11 11 -
install.rdf
r9e9bab r2694fe 11 11 <!-- Thunderbird --> 12 12 <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id> 13 <em:minVersion>0.7</em:minVersion> 14 <em:maxVersion>3.0</em:maxVersion> 15 </Description> 16 <Description> 17 <!-- Mozilla Suite --> 18 <em:id>{86c18b42-e466-45a9-ae7a-9b95ba6f5640}</em:id> 19 <em:minVersion>1.7</em:minVersion> 20 <em:maxVersion>1.8</em:maxVersion> 13 <em:minVersion>1.5</em:minVersion> 14 <em:maxVersion>3.0a1</em:maxVersion> 21 15 </Description> 22 16 <Description> 23 17 <!-- Seamonkey --> 24 18 <em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id> 25 <em:minVersion>1. 0</em:minVersion>26 <em:maxVersion>1.5 </em:maxVersion>19 <em:minVersion>1.1.1</em:minVersion> 20 <em:maxVersion>1.5a</em:maxVersion> 27 21 </Description> 28 22 </em:targetApplication> … … 33 27 <em:id>{dddd428e-5ac8-4a81-9f78-276c734f75b8}</em:id> 34 28 <em:name>Virtual Identity</em:name> 35 <em:version>0.4. 0</em:version>29 <em:version>0.4.1</em:version> 36 30 <em:description>Allows you to modify your Identity settings for a single Mail on the fly.</em:description> 37 31 <em:creator>Rene Ejury</em:creator> 32 <em:contributor>Translations: www.babelzilla.org</em:contributor> 38 33 <em:contributor>markh</em:contributor> <!-- dutch localization --> 39 34 <em:contributor>patheticcockroach</em:contributor> <!-- french localization -->
Note: See TracChangeset
for help on using the changeset viewer.