source: content/bindings/v_identity.xml @ f29e9b

ng_0.9
Last change on this file since f29e9b was f29e9b, checked in by rene <rene@…>, 3 years ago

changed menulist reference

  • Property mode set to 100644
File size: 32.7 KB
Line 
1<?xml version="1.0"?>
2<!-- ***** BEGIN LICENSE BLOCK *****
3   - This program is free software; you can redistribute it and/or modify
4   - it under the terms of the GNU General Public License as published by
5   - the Free Software Foundation; either version 2 of the License, or
6   - (at your option) any later version.
7
8   - This program is distributed in the hope that it will be useful,
9   - but WITHOUT ANY WARRANTY; without even the implied warranty of
10   - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11   - GNU General Public License for more details.
12
13   - You should have received a copy of the GNU General Public License
14   - along with this program; if not, write to the Free Software
15   - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
16
17   - The Original Code is the Virtual Identity Extension.
18
19   - The Initial Developer of the Original Code is Rene Ejury.
20   - Portions created by the Initial Developer are Copyright (C) 2007
21   - the Initial Developer. All Rights Reserved.
22
23   - Contributor(s):
24   - ***** END LICENSE BLOCK ***** -->
25
26<!DOCTYPE overlay [
27<!ENTITY % vIdentDTD SYSTEM "chrome://v_identity/locale/v_identity.dtd">
28%vIdentDTD;
29]>
30
31
32<bindings id="mailComposeBindings"
33          xmlns="http://www.mozilla.org/xbl"
34          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
35          xmlns:xbl="http://www.mozilla.org/xbl">
36   
37    <binding id="vI_tooltipPopupset">
38    <implementation>
39    <method name="addTooltip">
40    <parameter name="elem" />
41    <parameter name="permanent" />
42            <body><![CDATA[
43            if (elem) {
44                var randID = elem.tooltipElem.getAttribute("tooltip");
45                this.removeTooltip(randID);
46                if (!randID) {
47                    randID = "virtualIdentityExtension_tooltip_" + parseInt((new Date()).getTime());
48                    elem.tooltipElem.setAttribute("tooltip", randID);
49                }
50                var toolTip = document.createElement("tooltip");
51                toolTip.setAttribute("class", "identityDataTooltip");
52                toolTip.setAttribute("id", randID);
53                toolTip.elem = elem;
54                toolTip.permanent = permanent;
55                this.appendChild(toolTip);
56                }
57        ]]></body>
58    </method>
59    <method name="removeTooltip">
60    <parameter name="randID" />
61        <body><![CDATA[
62        if (randID) {
63            var randIDelem = document.getElementById(randID);
64            if (randIDelem) this.removeChild(randIDelem);
65        }
66        ]]></body>
67    </method>
68    </implementation>
69    </binding>
70   
71    <binding id="vI_identityDataTooltip" extends="chrome://global/content/bindings/popup.xml#tooltip">
72    <content onpopuphidden="popuphidden();" onpopupshowing="this.popupshowing();this.resize()" onpopupshown="this.resize()" >
73            <xul:browser style="overflow:hidden" anonid="tooltipBrowser" type="chrome" class="vI_htmlTextBox" cssSource="vI_TooltipBrowser.css" flex="1" disablehistory="true" onoverflow="document.getBindingParent(this).resize()"/>
74            <children />
75    </content>
76    <implementation>
77    <method name="popupshowing">
78            <body><![CDATA[
79            virtualIdentityExtension.MyLog.debug("v_identity.xml vI_tooltipPopupset popupshowing.")
80        if (!this._identityInfo) {
81            this._identityInfo =
82                "<table><tr>" +
83                    "<td class='image'><img src='chrome://v_identity/skin/vi-info.png' /></td>" +
84                    "<td class='identityTable'>" +
85                        "<div class='name'>" + this.elem.identityData.combinedNameHtml + "</div>" +
86                        "<table><tbody>" + this.elem.identityData.getMatrix() + "</tbody></table>" +
87                    "</td>" +
88                "</tr></table>"
89            virtualIdentityExtension.MyLog.debug("v_identity.xml added tooltip with id='" +  this.elem.identityData.id.key + "'")
90            this._tooltipBrowser.outputString = this._identityInfo;
91        }
92        virtualIdentityExtension.MyLog.debug("v_identity.xml vI_tooltipPopupset popupshowing done.")
93        ]]></body>
94    </method>
95    <method name ="popuphidden">
96            <body><![CDATA[
97        if (!this.permanent) this._identityInfo = null;
98        ]]></body>
99    </method>   
100    <method name="resize">
101        <body><![CDATA[
102        if (!this._identityInfo) return;
103        var width = document.getElementById("virtualIdentityExtension_msgIdentityClone").boxObject.width * 0.7;
104        var height = this._tooltipBrowser.contentDocument.lastChild.scrollHeight + 5;
105        this.sizeTo(width, height);
106        width = document.getElementById("virtualIdentityExtension_msgIdentityClone").boxObject.width * 0.75;
107        this.sizeTo(width, height);
108        ]]></body>
109    </method>
110    <field name="permanent" />
111    <field name="elem" />
112<!--    <field name="identityData">this.elem.identityData</field> -->
113    <field name="_identityInfo">false</field>
114<!--    <field name="_initialized">false</field> -->
115    <field name="_tooltipBrowser">document.getAnonymousElementByAttribute(this, "anonid", "tooltipBrowser")</field>
116    </implementation>
117    </binding> 
118   
119    <binding id="fromPopupItem_clone" extends="chrome://global/content/bindings/menu.xml#menuitem">
120    <content excludes="template,observes,menupopup">
121        <xul:image class="menupopup_clone-icon" xbl:inherits="src"/>
122        <xul:label class="menupopup_clone-text" xbl:inherits="value=label,accesskey,crop" crop="right" flex="1"/>
123        <xul:label value="&vident.accPane.prettyName.prefix;" class="menupopup_clone-vid virtIdLabel" vid="false" xbl:inherits="vid" crop="right"/>
124            <xul:label class="menupopup_clone-description" xbl:inherits="value=description" crop="right"/>
125        <xul:label class="menupopup_clone-smtp" xbl:inherits="value=smtp,style=smtpStyle" crop="right"/>
126    </content>
127    <implementation>
128    <constructor>
129        <![CDATA[
130        this._identityDataStorage = this.identityData;
131       
132        this.label = this._identityDataStorage.combinedName;
133        this.value = this._identityDataStorage.id.key;
134        // virtualIdentityExtension.MyLog.debug("v_identity.xml fromPopupItem_clone constructor id='" + this.value + "'")
135
136        this.description = this._identityDataStorage.sideDescription?this._identityDataStorage.sideDescription:"";
137        this.smtp = this._identityDataStorage.smtp.value;
138        // virtualIdentityExtension.MyLog.debug("v_identity.xml fromPopupItem_clone constructor smtp='" + this.smtp + "'")
139        this.smtpStyle = "width:" + document.getElementById("virtualIdentityExtension_SmtpServerList").clientWidth + "px;";
140        this._identityDataStorage.smtp.value;
141       
142        document.getElementById("virtualIdentityExtension_tooltipPopupset").addTooltip(this, true);
143        ]]>
144    </constructor>
145    <method name="clean">
146            <body><![CDATA[
147        document.getElementById("virtualIdentityExtension_tooltipPopupset")
148            .removeTooltip(this.tooltipElem.getAttribute("tooltip"));
149        ]]></body>
150    </method>
151    <destructor>
152        <![CDATA[
153        this.clean();
154        ]]>
155    </destructor>
156    <property name="_identityData" onget="return this._identityDataStorage;" />
157    <field name="tooltipElem">this</field>
158    <property name="vid" onget="return this.getAttribute('vid');" onset="this.setAttribute('vid', val); return val;" />
159    <property name="label" onget="return this.getAttribute('label');" onset="this.setAttribute('label', val); return val;" />
160    <property name="value" onget="return this.getAttribute('value');" onset="this.setAttribute('value', val); return val;" />
161    <property name="description" onget="return this.getAttribute('description');" onset="this.setAttribute('description', val); return val;" />
162    <property name="smtp" onget="return this.getAttribute('smtp');" onset="this.setAttribute('smtp', val); return val;" />
163    <property name="smtpStyle" onget="return this.getAttribute('smtpStyle');" onset="this.setAttribute('smtpStyle', val); return val;" />
164    </implementation>
165    </binding>
166
167    <binding id="smtpServerList">
168    <resources>
169            <stylesheet src="chrome://global/skin/menu.css"/>
170    </resources>
171    <content sizetopopup="pref">
172        <xul:hbox id="smtpServerHbox" class="smtpServerHbox">
173            <xul:menulist class="smtpServerMenuList" anonid="smtpServerMenuList" allowevents="true" id="virtualIdentityExtension_SmtpServerList">
174                <xul:menupopup anonid="virtualIdentityExtension_SmtpServerList_popup" />
175            </xul:menulist>
176            <xul:checkbox  id="virtualIdentityExtension_SaveSmtpSwitch" class="vI_plain" allowevents="true" oncommand="event.stopPropagation();virtualIdentityExtension.vIprefs.set('storage_store_SMTP', this.checked);" >
177                <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveSMTP" attribute="checked" />
178                <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveSMTP" attribute="disabled" />
179            </xul:checkbox>
180            <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveSMTP" attribute="checked" />
181            <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveSMTP" attribute="disabled" />
182        </xul:hbox>
183    </content>
184    <implementation>
185    <method name="addNoneServer">
186        <body><![CDATA[
187        var listitem = document.createElement("menuitem");
188        listitem.setAttribute("class", "menuitem-non-iconic");
189        listitem.setAttribute("type", "non-iconic-noaccel");
190        listitem.setAttribute("label", " ");
191        listitem.setAttribute("key", virtualIdentityExtension.NO_SMTP_TAG);
192        this._smtpPopup.insertBefore(listitem, this._smtpPopup.firstChild);
193        this._smtpMenu.selectedItem = listitem;
194        ]]></body>
195    </method>
196    <method name="_addDefaultServer">
197            <body><![CDATA[
198        var listitem = document.createElement("menuitem");
199        listitem.setAttribute("class", "menuitem-non-iconic");
200        listitem.setAttribute("type", "non-iconic-noaccel");
201        listitem.setAttribute("label",
202          Components.classes["@mozilla.org/intl/stringbundle;1"]
203            .getService(Components.interfaces.nsIStringBundleService)
204            .createBundle("chrome://messenger/locale/messenger.properties")
205            .GetStringFromName("defaultServerTag"));
206        this._smtpPopup.appendChild(listitem);
207        this._smtpMenu.selectedItem = listitem;
208        ]]></body>
209    </method>
210    <method name="_addServer">
211        <parameter name="server" />
212            <body><![CDATA[
213        if (server instanceof Components.interfaces.nsISmtpServer && !server.redirectorType) {
214            var listitem = document.createElement("menuitem");
215            listitem.setAttribute("class", "menuitem-non-iconic");
216            listitem.setAttribute("type", "non-iconic-noaccel");
217            listitem.setAttribute("label", (server.description?server.description:server.hostname));
218            listitem.setAttribute("key", server.key);
219            this._smtpPopup.appendChild(listitem);
220        }
221        ]]></body>
222    </method>
223    <method name="refresh">
224        <body><![CDATA[
225            this.unload();
226            this.load();
227        ]]></body>
228    </method>
229    <method name="load">
230        <body><![CDATA[
231            this._addDefaultServer();
232            this._smtpPopup.appendChild(document.createElement("menuseparator"));
233           
234            var servers, smtpService = Components.classes["@mozilla.org/messengercompose/smtp;1"]
235                .getService(Components.interfaces.nsISmtpService);
236            // check for new https://hg.mozilla.org/comm-central/rev/fab9e5145cd4 smtpService
237            if (typeof(smtpService.servers) == "object") servers = smtpService.servers;
238            else servers = smtpService.smtpServers;
239           
240            while (servers && servers.hasMoreElements())
241                this._addServer(servers.getNext());
242        ]]></body>
243    </method>
244    <method name="unload">
245        <body><![CDATA[
246            var MenuItems = this._smtpPopup.childNodes
247            while (MenuItems.length > 0) { this._smtpPopup.removeChild(MenuItems[0]) }
248            this._smtpMenu.selectedItem = null;
249        ]]></body>
250    </method>
251    <constructor>
252        <![CDATA[
253            this.load();
254        ]]>
255    </constructor>
256    <property name="smtp" onget="return this._smtpMenu.selectedItem.getAttribute('key');" >
257        <setter><![CDATA[
258        if (val == virtualIdentityExtension.NO_SMTP_TAG) return; // dont overwrite if not set
259        virtualIdentityExtension.MyLog.debug("v_identity.xml smtp set to '" + val + "'")
260        var MenuItems = this._smtpPopup.childNodes
261        for (var index = 0; index < MenuItems.length; index++) {
262            if (MenuItems[index].localName == "menuseparator") continue;
263            if (MenuItems[index].getAttribute("key") == val) {
264                this._smtpMenu.selectedItem = MenuItems[index];
265                break;
266            }
267        }
268        ]]></setter>
269    </property>
270    <field name="_smtpPopup">document.getAnonymousElementByAttribute(this, "anonid", "virtualIdentityExtension_SmtpServerList_popup")</field>
271    <field name="_smtpMenu">document.getAnonymousElementByAttribute(this, "anonid", "smtpServerMenuList")</field>
272    <field name="_smtpService"></field>
273
274    </implementation>
275    </binding>
276   
277   
278   
279   
280    <binding id="fromMenuList_clone" display="xul:menu" extends="chrome://messenger/content/mailWidgets.xml#menulist-description">
281    <resources>
282            <stylesheet src="chrome://global/skin/menu.css"/>
283        <stylesheet src="chrome://global/skin/autocomplete.css"/>
284    </resources>
285    <content sizetopopup="pref">
286        <xul:hbox class="contentHBox" anonid="contentHBox" flex="1"  >
287            <xul:hbox id="identityHbox" class="identityHbox" flex="1">
288                <xul:vbox><xul:spacer flex="1" />
289                    <xul:image class="menulist_clone-icon" id="virtualIdentityExtension_msgIdentityClone_image" xbl:inherits="src"/>
290                <xul:spacer flex="1" /></xul:vbox>
291                <xul:vbox flex="1" id="virtualIdentityExtension_msgIdentityClone_fromVbox"><xul:spacer flex="1" />
292<!--                    textbox is internally an html:input field which inherits the onblur event.
293                    Thats why we have to search the textbox before calling blurEvent() -->
294                    <xul:textbox anonid="textBox" type="search" id="virtualIdentityExtension_msgIdentityClonetextBoxElem" class="plain menulist_clone-textbox" allowevents="true" xbl:inherits="value=label,crop,accesskey,nomatch=vid" oncommand="event.stopPropagation(); document.getBindingParent(this).inputEvent();"
295                    onblur="event.stopPropagation(); var elem = this; while (elem.localName != 'textbox') elem = elem.parentNode; document.getBindingParent(elem).blurEvent();"
296                    crop="right" highlightnonmatches="true"/>
297                <xul:spacer flex="1" /></xul:vbox>
298                <xul:vbox id="virtualIdentityExtension_saveSwitch"><xul:spacer flex="1" />
299                    <xul:checkbox class="vI_plain" allowevents="true" oncommand="event.stopPropagation();virtualIdentityExtension.vIprefs.set('storage_store', this.checked);" >
300                        <xul:observes element="virtualIdentityExtension_statusMenu_storage_save" attribute="checked" />
301                    </xul:checkbox>
302                <xul:spacer flex="1" /></xul:vbox>
303                <xul:vbox><xul:spacer flex="1" />
304                    <xul:label value="&vident.accPane.prettyName.prefix;" class="menu_clone-vid virtIdLabel" xbl:inherits="vid" crop="right"/>
305                <xul:spacer flex="1" /></xul:vbox>
306                <xul:observes element="virtualIdentityExtension_statusMenu_storage_save" attribute="checked" />
307            </xul:hbox>
308            <xul:hbox id="baseIDHbox" class="baseIDHbox" >
309                <xul:vbox><xul:spacer flex="1" />
310                    <xul:hbox>
311                        <xul:label id="msgIdentity_base_id_label" class="menu_clone-description" xbl:inherits="value,hidden=base_id_key_hidden" crop="right" hidden="true"/>
312                        <xul:label id="virtualIdentityExtension_msgIdentityClone_label" class="menu_clone-description" xbl:inherits="value=description" crop="right"/>
313                    </xul:hbox>
314                <xul:spacer flex="1" /></xul:vbox>
315                <xul:vbox id="virtualIdentityExtension_saveBaseIDSwitch"><xul:spacer flex="1" />
316                    <xul:checkbox class="vI_plain" allowevents="true" oncommand="event.stopPropagation();virtualIdentityExtension.vIprefs.set('storage_store_base_id', this.checked);" >
317                        <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveBaseID" attribute="checked" />
318                        <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveBaseID" attribute="disabled" />
319                    </xul:checkbox>
320                <xul:spacer flex="1" /></xul:vbox>
321                <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveBaseID" attribute="checked" />
322                <xul:observes element="virtualIdentityExtension_statusMenu_storage_saveBaseID" attribute="disabled" />
323            </xul:hbox>
324            <xul:hbox oncommand="event.stopPropagation();document.getBindingParent(this).smtp = this.smtp" xbl:inherits="showSmtp" anonid="smtpServerListHbox" class="smtpServerListHbox" />
325        </xul:hbox>
326        <children />
327    </content>
328        <implementation>
329    <constructor>
330        <![CDATA[       
331        var inputTextbox = document.getAnonymousElementByAttribute(this, "class", "plain menulist_clone-textbox");
332       
333        // check if 'search' textboxes are not implemented change to 'timed'
334        if (!inputTextbox.timeout) inputTextbox.setAttribute("type", "timed");
335        inputTextbox.setAttribute("timeout", "300")
336       
337        // too early to access virtualIdentityExtension_tooltipPopupset, this might break the interface
338        // it will be done in v_identity.js init
339        // document.getElementById("virtualIdentityExtension_tooltipPopupset").addTooltip(this, false);
340       
341        virtualIdentityExtension.vIprefs.addObserver("show_smtp", this.observe, this);
342        this.observe(this);
343        ]]>
344    </constructor>
345    <destructor>
346        <![CDATA[
347        var tooltipPopupset = document.getElementById("virtualIdentityExtension_tooltipPopupset")
348        if (tooltipPopupset) tooltipPopupset.removeTooltip(this.tooltipElem.getAttribute("tooltip"));
349        virtualIdentityExtension.vIprefs.removeObserver("show_smtp", this.observe);
350        ]]>
351    </destructor>
352
353    <!--
354    double the Identity-Select Dropdown-Menu to be more flexible with modifying it
355    the original Identity Dropdown Menu is hidden and stores the base Identity, on which one
356    the Virtual Identity is build upon
357    -->
358    <method name="command">
359        <body><![CDATA[
360        virtualIdentityExtension.MyLog.debug("v_identity.xml msgIdentityCloneElem.doCommand()")
361        // copy selected Menu-Value from clone to orig.
362        virtualIdentityExtension.MyLog.debug("v_identity.xml copy selected Menu-Value from clone to orig. Searching for id=" + this.selectedMenuItem.identityData.id.key)
363    if (typeof getCurrentIdentityKey == 'function') {
364      // TB version after changeset 17696 35d9101cb3b1 (menuitem.value == email address)
365          var id_attribute = "identitykey"
366    } else {
367          // TB version before changeset 17696 35d9101cb3b1 (menuitem.value == id)
368          var id_attribute = "value"
369    }
370
371        if ( this.selectedMenuItem.identityData.id.key != null ) {
372            var MenuItems = this._msgIdentityPopupElem.childNodes
373            for (var index = 0; index < MenuItems.length; index++) {
374                if ( MenuItems[index].getAttribute(id_attribute) == this.selectedMenuItem.identityData.id.key ) {
375                    this._msgIdentityElem.selectedItem = MenuItems[index];
376                    this._msgIdentityElem.value = MenuItems[index].getAttribute("value");
377          this._msgIdentityElem.identitykey = MenuItems[index].getAttribute("identitykey");
378          this._msgIdentityPopupElem.doCommand();
379                    break;
380                }
381            }
382        }
383        this.identityData = this.selectedMenuItem.identityData.getDuplicate();
384        virtualIdentityExtension.MyLog.debug("v_identity.xml msgIdentityCloneElem.doCommand() this.value=" + this.value);
385        // if current SMTP is empty, take the one from current Identity
386        if (this.identityData.smtp.hasNoDefinedSMTP()) {
387            if (typeof getCurrentIdentityKey == 'function') {
388              // TB version after changeset 17696 35d9101cb3b1 (menuitem.value == email address)
389        if (!this.identitykey)
390          this.identitykey = this.identityData.id.key
391        if (this.identitykey) {
392          virtualIdentityExtension.MyLog.debug("v_identity.xml msgIdentityCloneElem.doCommand() " + this.identitykey)
393          this.identityData.smtp.key = this._AccountManager.getIdentity(this.identitykey).smtpServerKey;
394          document.getAnonymousElementByAttribute(this, "anonid", "smtpServerListHbox").smtp = this.identityData.smtp.keyNice;
395        }
396            } else {
397              // TB version before changeset 17696 35d9101cb3b1 (menuitem.value == id)
398                this.identityData.smtp.key = this._AccountManager.getIdentity(this.value).smtpServerKey;
399                document.getAnonymousElementByAttribute(this, "anonid", "smtpServerListHbox").smtp = this.identityData.smtp.keyNice;
400            }
401        }
402    this.checkForVirtualIdentity();
403    ]]></body>
404    </method>   
405    <method name="init">
406    <body><![CDATA[
407    virtualIdentityExtension.MyLog.debug("v_identity.xml msgIdentityCloneElem.init()")
408        var MenuItems = this._msgIdentityPopupElem.childNodes
409        for (var index = 0; index < MenuItems.length; index++) {
410            if (typeof getCurrentIdentityKey == 'function') {
411              // TB version after changeset 17696 35d9101cb3b1 (menuitem.value == email address)
412                var identity = this._AccountManager.getIdentity(MenuItems[index].getAttribute("identitykey"));
413            } else {
414              // TB version before changeset 17696 35d9101cb3b1 (menuitem.value == id)
415                var identity = this._AccountManager.getIdentity(MenuItems[index].getAttribute("value"));
416            }
417
418            var description;
419            if (typeof(this._AccountManager.getServersForIdentity) == 'function') { // new style
420                var server = this._AccountManager.getServersForIdentity(identity).queryElementAt(0, Components.interfaces.nsIMsgIncomingServer);
421            } else {
422                var server = this._AccountManager.GetServersForIdentity(identity).QueryElementAt(0, Components.interfaces.nsIMsgIncomingServer);
423            }
424            // if (server.type == "nntp")
425                description = server.prettyName
426            // else description = identity.description?"- "+identity.description:identity.accountname
427           
428      var newIdentity = new virtualIdentityExtension.identityData(window, identity.email, identity.fullName, identity.key,
429                        identity.smtpServerKey, null, description, true)
430            newIdentity.extras.readIdentityValues(identity);
431               
432            var menuItem = this.addIdentityToCloneMenu(newIdentity)
433
434            if (this._msgIdentity_selectedItem == MenuItems[index]) {
435                this.selectedItem = menuItem;
436                this.identityData = newIdentity.getDuplicate();
437        this._msgIdentityElem.identitykey = MenuItems[index].getAttribute("identitykey");
438            }
439        }
440        this._popupMenu_separator = true;
441    virtualIdentityExtension.MyLog.debug("v_identity.xml msgIdentityCloneElem.init() done.")
442        ]]></body>
443    </method>
444    <method name="clean">
445        <body><![CDATA[
446        var MenuItems = this._popupElem.childNodes;
447        while (MenuItems.length > 0) {
448            try {MenuItems[0].clean();} catch (e) { };
449            this._popupElem.removeChild(MenuItems[0])
450        }
451        this.selectedItem = null;
452        this.identityData = null;
453       
454        this._menu_separator = null;
455        ]]></body>
456    </method>   
457    <method name="addIdentityToCloneMenu">
458        <parameter name="localIdentityData" />
459        <body><![CDATA[
460        var existingItem = this._isExistingCloneMenuItem(localIdentityData);
461        if (!existingItem) {
462            var MenuItem = document.createElement("menuitem");
463                MenuItem.identityData = localIdentityData;
464            MenuItem.setAttribute("class", "identity_clone-popup-item");
465            MenuItem.setAttribute("type", "vIdentity"); // to prevent overriding with menuitem:not([type])
466            if (typeof getCurrentIdentityKey == 'function') {
467              // TB version after changeset 17696 35d9101cb3b1 (menuitem.value == email address)
468                MenuItem.identitykey = localIdentityData.id.key; // might be accessed before item is constructed
469            } else {
470              // TB version before changeset 17696 35d9101cb3b1 (menuitem.value == id)
471                MenuItem.value = localIdentityData.id.key; // might be accessed before item is constructed
472            }
473
474            // set vid explicitely
475            if (this._popupMenu_separator) MenuItem.setAttribute("vid", "true");
476            else    MenuItem.setAttribute("vid", "false");
477                       
478            this._popupElem.appendChild(MenuItem);
479            return MenuItem;
480        }
481        else return existingItem;
482        ]]></body>
483    </method>
484    <method name="addIdentitiesToCloneMenu">
485        <parameter name="identityCollection" />
486        <body><![CDATA[
487        for (var index = 0; index < identityCollection.number; index++)
488            identityCollection.menuItems[index] =
489                this.addIdentityToCloneMenu(identityCollection.identityDataCollection[index])
490        ]]></body>
491    </method>
492    <method name="_getMenuItemForIdentity">
493        <parameter name="identitykey" />
494        <body><![CDATA[
495        var MenuItems = this._popupElem.childNodes;
496        for (var index = 0; index < MenuItems.length; index++) {
497            if (typeof getCurrentIdentityKey == 'function') {
498              // TB version after changeset 17696 35d9101cb3b1 (menuitem.value == email address)
499                if (MenuItems[index].identitykey == identitykey)
500                    return MenuItems[index]
501            } else {
502              // TB version before changeset 17696 35d9101cb3b1 (menuitem.value == id)
503                if (MenuItems[index].value == identitykey)
504                    return MenuItems[index]
505            }
506        }
507        return null;
508        ]]></body>
509    </method>
510    <property name="_popupMenu_separator" >
511        <getter><![CDATA[
512            if (this._menu_separator) {
513              this._menu_separator.removeAttribute("hidden");
514              return this._menu_separator;
515            }
516            else return null;
517        ]]></getter>
518        <setter><![CDATA[
519            if (!val) return;
520            // add hidden separator as indicator that now only virtual identities are added
521            this._menu_separator = document.createElement("menuseparator");
522            this._menu_separator.setAttribute("hidden", "true");
523            this._popupElem.appendChild(this._menu_separator)
524        ]]></setter>   
525    </property>
526    <property name="selectedMenuItem" >
527        <getter><![CDATA[
528            return this.selectedItem;
529        ]]></getter>
530        <setter><![CDATA[
531            if (typeof(val) == "object") this.selectedItem = val
532            else if (val == "default")
533                this.selectedItem = this._getMenuItemForIdentity(this._AccountManager.defaultAccount.defaultIdentity.key)
534            else this.selectedItem = this._getMenuItemForIdentity(val)
535            this.doCommand();
536        ]]></setter>   
537    </property>
538    <method name="_isExistingCloneMenuItem">
539        <parameter name="localIdentityData" />
540        <body><![CDATA[
541        var MenuItems = this._popupElem.childNodes
542        for (var j = 0; j < MenuItems.length; j++) {
543            if (MenuItems[j].localName == "menuseparator") continue;
544            if (MenuItems[j].identityData.equals(localIdentityData)) return MenuItems[j];
545        }
546        return null;
547        ]]></body>
548    </method>
549    <field name="_msgIdentityElem">document.getElementById("msgIdentity")</field>
550    <field name="_msgIdentityPopupElem">document.getElementById("msgIdentityPopup")</field>
551    <property name="_msgIdentity_selectedItem" >
552        <getter><![CDATA[
553            if (!this._msgIdentityElem.selectedItem) {
554                virtualIdentityExtension.MyLog.debug("v_identity.xml: msgIdentityElem.selectedItem not set, using first Menuitem");
555                this._msgIdentityElem.selectedItem = this._msgIdentityPopupElem.firstChild
556                virtualIdentityExtension.MyLog.debug("v_identity.xml: msgIdentityElem.doCommand()");
557                this._msgIdentityElem.doCommand();
558            }
559            return this._msgIdentityElem.selectedItem;
560        ]]></getter>
561    </property>
562    <property name="_AccountManager" >
563        <getter><![CDATA[
564            return Components.classes["@mozilla.org/messenger/account-manager;1"]
565              .getService(Components.interfaces.nsIMsgAccountManager);
566        ]]></getter>
567    </property>
568    <method name="blurEvent">
569            <body><![CDATA[
570        virtualIdentityExtension.MyLog.debug("v_identity.xml blurEvent")
571        this.inputEvent(); // timeout might prevent inputEvent to fire before blurEvent
572       
573        this.label = this.identityData.combinedName; // add "<" and ">" to email if required
574        this.setAttribute("label", this.label);
575        ]]></body>
576    </method>
577    <method name="inputEvent">
578            <body><![CDATA[     
579        virtualIdentityExtension.MyLog.debug("v_identity.xml inputEvent")
580       
581        this.identityData.combinedName = this.label;
582       
583        var existingIdentity = this.checkForVirtualIdentity();
584    if (typeof getCurrentIdentityKey == 'function') {
585      // TB version after changeset 17696 35d9101cb3b1 (menuitem.value == email address)
586      if (existingIdentity && this.selectedMenuItem.identitykey != existingIdentity) this.selectedMenuItem = existingIdentity;          } else {
587      // TB version before changeset 17696 35d9101cb3b1 (menuitem.value == id)
588      if (existingIdentity && this.selectedMenuItem.value != existingIdentity) this.selectedMenuItem = existingIdentity;
589    }
590
591        ]]></body>
592    </method>
593    <method name="checkForVirtualIdentity">
594        <body><![CDATA[
595        virtualIdentityExtension.MyLog.debug("v_identity.xml checkForVirtualIdentity: " + this.identityData.id.key + " '" + this.identityData.id.value + "'")
596        var existingIdentity = this.identityData.isExistingIdentity(false);
597       
598        this.vid = (!existingIdentity);
599       
600        virtualIdentityExtension.signatureSwitch(existingIdentity);
601       
602        return existingIdentity;
603        ]]></body>
604    </method>
605    <property name="smtp" onget="return this.identityData.smtp.key;" > // used to detect changes from SMTP-Menu
606        <setter><![CDATA[
607        this.identityData.smtp.key = val;
608       
609        document.getElementById("virtualIdentityExtension_tooltipPopupset").addTooltip(this);
610
611        var existingIdentity = this.checkForVirtualIdentity();
612        if (existingIdentity) this.selectedMenuItem = existingIdentity;
613        ]]></setter>
614    </property>
615    <property name="identityData">
616        <getter><![CDATA[
617    virtualIdentityExtension.MyLog.debug("v_identity.xml identityData getter")
618    if (this._identityDataStorage) {
619      this._identityDataStorage.extras.getValuesFromEnvironment(); // update with current data
620    }
621    else {
622      virtualIdentityExtension.MyLog.debug("v_identity.xml identityData getter - _identityDataStorage not set")
623    }
624    return this._identityDataStorage;
625        ]]></getter>
626        <setter><![CDATA[
627        virtualIdentityExtension.MyLog.debug("v_identity.xml identityData setter")
628        if (!val) this._identityDataStorage = null
629        else {
630            var oldIdentityData = this._identityDataStorage;
631            this._identityDataStorage = val;
632            if (oldIdentityData) { // indicates that it's not first time after clean
633                virtualIdentityExtension.MyLog.debug("v_identity.xml previousID: fullName='" + oldIdentityData.fullName + "' email='" + oldIdentityData.email + "' smtp='" + oldIdentityData.smtp.key + "' id='" + oldIdentityData.id.key + "' existingID='" + oldIdentityData.existingID + "'");
634                virtualIdentityExtension.MyLog.debug("v_identity.xml newID: fullName='" + this._identityDataStorage.fullName + "' email='" + this._identityDataStorage.email + "' smtp='" + this._identityDataStorage.smtp.key + "' id='" + this._identityDataStorage.id.key + "' existingID='" + this._identityDataStorage.existingID + "'");
635                if (!this._identityDataStorage.existingID && !this._identityDataStorage.combinedName)
636                    this._identityDataStorage.fullName = oldIdentityData.fullName;
637                if (!this._identityDataStorage.existingID && !this._identityDataStorage.email)
638                    this._identityDataStorage.email = oldIdentityData.email;
639                if (!this._identityDataStorage.smtp.key) this._identityDataStorage.smtp.key = oldIdentityData.smtp.key;
640                if (!this._identityDataStorage.id.key) {
641                    this._identityDataStorage.id.key = oldIdentityData.id.key;
642                    this._identityDataStorage.sideDescription = oldIdentityData.sideDescription;
643                }
644                this._identityDataStorage.extras.setValuesToEnvironment();
645                if (this._identityDataStorage.existingID) this.vid = false;
646                else this.checkForVirtualIdentity();
647            }
648            else    this.vid = false;       // first time after clean it's always a real identity
649           
650            this.label = this._identityDataStorage.combinedName;
651            this.value = this._identityDataStorage.id.key;
652            this.description = this._identityDataStorage.sideDescription;
653            document.getAnonymousElementByAttribute(this, "anonid", "smtpServerListHbox").smtp = this._identityDataStorage.smtp.keyNice;
654            virtualIdentityExtension.MyLog.debug("v_identity.xml resultingID: fullName='" + this._identityDataStorage.fullName + "' email='" + this._identityDataStorage.email + "' smtp='" + this._identityDataStorage.smtp.key + "' id='" + this._identityDataStorage.id.key + "' existingID='" + this._identityDataStorage.existingID + "'");
655        }
656        virtualIdentityExtension.MyLog.debug("v_identity.xml identityData setter done.")
657        ]]></setter>
658    </property>
659    <field name="_popupElem">document.getElementById("virtualIdentityExtension_msgIdentityPopupClone")</field>
660    <field name="tooltipElem">document.getAnonymousElementByAttribute(this, "anonid", "contentHBox")</field>
661    <field name="textBoxElem">document.getAnonymousElementByAttribute(this, "anonid", "textBox");</field>
662    <method name="observe">
663      <parameter name="self" />
664      <parameter name="aSubject" />
665      <parameter name="aTopic" />
666      <parameter name="aPrefName" />
667      <body><![CDATA[
668        self.showSmtp =
669          virtualIdentityExtension.vIprefs.get("show_smtp");
670        var MenuItems = self._popupElem.childNodes;
671        for (var j = 0; j < MenuItems.length; j++) {
672            if (MenuItems[j].localName == "menuseparator") continue;
673            MenuItems[j].smtpStyle = "width:" + document.getElementById("virtualIdentityExtension_SmtpServerList").clientWidth + "px;";
674        }
675        ]]></body>
676    </method>
677    <property name="email" onset="this.identityData.email = val; this.label = this.identityData.combinedName; this.inputEvent()" />
678    <property name="vid" onget="return (this.getAttribute('vid') == 'true');" onset="this.setAttribute('vid',val?'true':'false'); return val;" />
679    <property name="label" onget="return this.textBoxElem.value;" onset="this.textBoxElem.value = val; return val;" />
680    <property name="value" onget="return this.getAttribute('value');" onset="this.setAttribute('value', val); return val;" />
681    <property name="identitykey" onget="return this.getAttribute('identitykey');" onset="this.setAttribute('identitykey', val); return val;" />
682    <property name="extras" onget="return this.identityData.extras;" />
683    <property name="description" onget="return this.getAttribute('description');" onset="this.setAttribute('description', val); return val;" />
684    <property name="showSmtp" onget="return (this.getAttribute('showSmtp') == 'true');" onset="this.setAttribute('showSmtp',val?'true':'false'); return val;" />
685    </implementation>
686    </binding>
687</bindings>
Note: See TracBrowser for help on using the repository browser.