source: chrome/content/v_identity/v_identity.xml @ cb14c8

lite_0.1multiEditng_0.6ng_0.6_helpng_0.8ng_0.9
Last change on this file since cb14c8 was cb14c8, checked in by rene <rene@…>, 12 years ago

modified to create non-virtual identities on reopenings

  • Property mode set to 100644
File size: 22.4 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="tooltipPopupset">
38    <implementation>
39    <method name="addTooltip">
40    <parameter name="elem" />
41    <parameter name="permanent" />
42            <body><![CDATA[
43        var randID = elem.tooltipElem.getAttribute("tooltip");
44        this.removeTooltip(randID);
45        if (!randID) {
46            randID = "tooltip_" + parseInt((new Date()).getTime());
47            elem.tooltipElem.setAttribute("tooltip", randID);
48        }
49        var toolTip = document.createElement("tooltip");
50        toolTip.setAttribute("class", "identityDataTooltip");
51        toolTip.setAttribute("id", randID);
52        toolTip.elem = elem;
53        toolTip.permanent = permanent;
54        this.appendChild(toolTip);
55        ]]></body>
56    </method>
57    <method name="removeTooltip">
58    <parameter name="randID" />
59            <body><![CDATA[
60        if (randID) this.removeChild(document.getElementById(randID))
61        ]]></body>
62    </method>
63    </implementation>
64    </binding>
65   
66    <binding id="vI_identityDataTooltip" extends="chrome://global/content/bindings/popup.xml#tooltip">
67    <content onpopuphidden="popuphidden();" onpopupshowing="this.popupshowing();this.resize()" onpopupshown="this.resize()" >
68            <xul:browser style="overflow:hidden" anonid="tooltipBrowser" class="vI_htmlTextBox" cssSource="vI_TooltipBrowser.css" flex="1" disablehistory="true" onoverflow="document.getBindingParent(this).resize()"/>
69            <children />
70    </content>
71    <implementation>
72    <method name="popupshowing">
73            <body><![CDATA[
74        if (!this._identityInfo) {
75            this._identityInfo =
76                "<table><tr>" +
77                    "<td class='image'><img src='chrome://v_identity/skin/vi-info.png' /></td>" +
78                    "<td class='identityTable'>" +
79                        "<div class='name'>" + this.elem.identityData.combinedNameHtml + "</div>" +
80                        "<table><tbody>" + this.elem.identityData.getMatrix() + "</tbody></table>" +
81                    "</td>" +
82                "</tr></table>"
83//          vI_notificationBar.dump("** v_identity.xml added tooltip with id='" +  this.elem.identityData.id.key + "'\n")
84            this._tooltipBrowser.outputString = this._identityInfo;
85        }
86        ]]></body>
87    </method>
88    <method name ="popuphidden">
89            <body><![CDATA[
90        if (!this.permanent) this._identityInfo = null;
91        ]]></body>
92    </method>   
93    <method name="resize">
94        <body><![CDATA[
95        if (!this._identityInfo) return;
96        var width = document.getElementById("msgIdentity_clone").boxObject.width * 0.7;
97        var height = this._tooltipBrowser.contentDocument.lastChild.scrollHeight + 5;
98        this.sizeTo(width, height);
99        width = document.getElementById("msgIdentity_clone").boxObject.width * 0.75;
100        this.sizeTo(width, height);
101        ]]></body>
102    </method>
103    <field name="permanent" />
104    <field name="elem" />
105<!--    <field name="identityData">this.elem.identityData</field> -->
106    <field name="_identityInfo">false</field>
107<!--    <field name="_initialized">false</field> -->
108    <field name="_tooltipBrowser">document.getAnonymousElementByAttribute(this, "anonid", "tooltipBrowser")</field>
109    </implementation>
110    </binding> 
111   
112    <binding id="fromPopupItem_clone" extends="chrome://global/content/bindings/menu.xml#menuitem">
113    <content excludes="template,observes,menupopup">
114        <xul:image class="menupopup_clone-icon" xbl:inherits="src"/>
115        <xul:label class="menupopup_clone-text" xbl:inherits="value=label,accesskey,crop" crop="right" flex="1"/>
116        <xul:label value="&vident.accPane.prettyName.prefix;" class="menupopup_clone-vid virtIdLabel" vid="false" xbl:inherits="vid" crop="right"/>
117            <xul:label class="menupopup_clone-description" xbl:inherits="value=description" crop="right"/>
118        <xul:label class="menupopup_clone-smtp" xbl:inherits="value=smtp,style=smtpStyle" crop="right"/>
119    </content>
120    <implementation>
121    <constructor>
122        <![CDATA[
123        this._identityDataStorage = this.identityData;
124       
125        this.label = this._identityDataStorage.combinedName;
126        this.value = this._identityDataStorage.id.key;
127        vI_notificationBar.dump("** v_identity.xml fromPopupItem_clone constructor id='" + this.value + "'.\n")
128
129        this.description = this._identityDataStorage.sideDescription;
130        this.smtp = this._identityDataStorage.smtp.value;
131        this.smtpStyle = "width:" + document.getElementById("smtp_server_list").clientWidth + "px;";
132        this._identityDataStorage.smtp.value;
133       
134        document.getElementById("vI_tooltipPopupset").addTooltip(this, true);
135        ]]>
136    </constructor>
137    <method name="clean">
138            <body><![CDATA[
139        document.getElementById("vI_tooltipPopupset")
140            .removeTooltip(this.tooltipElem.getAttribute("tooltip"));
141        ]]></body>
142    </method>
143    <destructor>
144        <![CDATA[
145        this.clean();
146        ]]>
147    </destructor>
148    <property name="_identityData" onget="return this._identityDataStorage;" />
149    <field name="tooltipElem">this</field>
150    <property name="vid" onget="return this.getAttribute('vid');" onset="this.setAttribute('vid', val); return val;" />
151    <property name="label" onget="return this.getAttribute('label');" onset="this.setAttribute('label', val); return val;" />
152    <property name="value" onget="return this.getAttribute('value');" onset="this.setAttribute('value', val); return val;" />
153    <property name="description" onget="return this.getAttribute('description');" onset="this.setAttribute('description', val); return val;" />
154    <property name="smtp" onget="return this.getAttribute('smtp');" onset="this.setAttribute('smtp', val); return val;" />
155    <property name="smtpStyle" onget="return this.getAttribute('smtpStyle');" onset="this.setAttribute('smtpStyle', val); return val;" />
156    </implementation>
157    </binding>
158
159    <binding id="smtpServerList" >
160    <resources>
161            <stylesheet src="chrome://global/skin/menu.css"/>
162    </resources>
163    <content sizetopopup="pref">
164        <xul:spacer flex="1" />
165            <xul:menulist class="smtpServerMenuList" anonid="smtpServerMenuList" allowevents="true" id="smtp_server_list">
166                <xul:menupopup anonid="smtp_server_list_popup" />
167            </xul:menulist>
168    </content>
169    <implementation>
170    <method name="_addDefaultServer">
171            <body><![CDATA[
172        var listitem = document.createElement("menuitem");
173        listitem.setAttribute("class", "menuitem-non-iconic");
174        listitem.setAttribute("type", "non-iconic-noaccel");
175        listitem.setAttribute("label", document.getElementById("bundle_messenger").getString("defaultServerTag"));
176        this._smtpPopup.appendChild(listitem);
177        this._smtpMenu.selectedItem = listitem;
178        ]]></body>
179    </method>
180    <method name="_addServer">
181        <parameter name="server" />
182            <body><![CDATA[
183        if (server instanceof Components.interfaces.nsISmtpServer && !server.redirectorType) {
184            var listitem = document.createElement("menuitem");
185            listitem.setAttribute("class", "menuitem-non-iconic");
186            listitem.setAttribute("type", "non-iconic-noaccel");
187            listitem.setAttribute("label", (server.description?server.description:server.hostname));
188            listitem.setAttribute("key", server.key);
189            this._smtpPopup.appendChild(listitem);
190        }
191        ]]></body>
192    </method>   
193    <constructor>
194        <![CDATA[       
195        this._addDefaultServer();
196        this._smtpPopup.appendChild(document.createElement("menuseparator"));
197
198        var servers = Components.classes["@mozilla.org/messengercompose/smtp;1"]
199            .getService(Components.interfaces.nsISmtpService).smtpServers;
200       
201        if (typeof(servers.Count) == "undefined")       // TB 3.x
202            while (servers && servers.hasMoreElements())
203                this._addServer(servers.getNext());
204        else                            // TB 2.x
205            for (var i=0 ; i<servers.Count(); i++)
206                this._addServer(servers.QueryElementAt(i, Components.interfaces.nsISmtpServer));
207       
208        ]]>
209    </constructor>
210    <property name="smtp" onget="return this._smtpMenu.selectedItem.getAttribute('key');" >
211        <setter><![CDATA[
212        if (val == null) return; // dont overwrite if not set
213//      vI_notificationBar.dump("** v_identity.xml smtp set to '" + val + "'\n")
214        var MenuItems = this._smtpPopup.childNodes
215        for (var index = 0; index < MenuItems.length; index++) {
216            if (MenuItems[index].localName == "menuseparator") continue;
217            if (MenuItems[index].getAttribute("key") == val) {
218                this._smtpMenu.selectedItem = MenuItems[index];
219                break;
220            }
221        }
222        ]]></setter>
223    </property>
224    <field name="_smtpPopup">document.getAnonymousElementByAttribute(this, "anonid", "smtp_server_list_popup")</field>
225    <field name="_smtpMenu">document.getAnonymousElementByAttribute(this, "anonid", "smtpServerMenuList")</field>
226    <field name="_smtpService"></field>
227
228    </implementation>
229    </binding>
230   
231   
232   
233   
234    <binding id="fromMenuList_clone" display="xul:menu" extends="chrome://global/content/bindings/menulist.xml#menulist-description">
235    <resources>
236            <stylesheet src="chrome://global/skin/menu.css"/>
237        <stylesheet src="chrome://global/skin/autocomplete.css"/>
238    </resources>
239    <content sizetopopup="pref">
240        <xul:hbox anonid="contentHBox" flex="1"  >
241                <xul:vbox><xul:spacer flex="1" />
242                    <xul:image class="menulist_clone-icon" id="msgIdentity_clone_image" xbl:inherits="src"/>
243                <xul:spacer flex="1" /></xul:vbox>
244                <xul:vbox flex="1"><xul:spacer flex="1" />
245<!--                textbox is internally an html:input field which inherits the onblur event.
246                Thats why we have to search the textbox before calling blurEvent() -->
247                    <xul:textbox anonid="textBox" type="search" id="msgIdentity_clonetextBoxElem" class="plain menulist_clone-textbox" allowevents="true" xbl:inherits="value=label,crop,accesskey,nomatch=vid" oncommand="event.stopPropagation(); document.getBindingParent(this).inputEvent();"
248                onblur="event.stopPropagation(); var elem = this; while (elem.localName != 'textbox') elem = elem.parentNode; document.getBindingParent(elem).blurEvent();"
249                 crop="right" highlightnonmatches="true"/>
250                <xul:spacer flex="1" /></xul:vbox>
251            <xul:vbox><xul:spacer flex="1" />
252                <xul:hbox>
253                    <xul:label id="msgIdentity_base_id_label" class="menu_clone-description" xbl:inherits="value,hidden=base_id_key_hidden" crop="right" hidden="true"/>
254                    <xul:label value="&vident.accPane.prettyName.prefix;" class="menu_clone-vid virtIdLabel" xbl:inherits="vid" crop="right"/>
255                    <xul:label id="msgIdentity_clone_label" class="menu_clone-description" xbl:inherits="value=description" crop="right"/>
256                </xul:hbox>
257            <xul:spacer flex="1" /></xul:vbox>
258        </xul:hbox>
259        <xul:hbox oncommand="event.stopPropagation();document.getBindingParent(this).smtp = this.smtp" anonid="smtpServerListHbox" class="smtpServerListHbox" />
260        <children />
261    </content>
262        <implementation>
263    <constructor>
264        <![CDATA[       
265        var inputTextbox = document.getAnonymousElementByAttribute(this, "class", "plain menulist_clone-textbox");
266       
267        // check if 'search' textboxes are not implemented change to 'timed'
268        if (!inputTextbox.timeout) inputTextbox.setAttribute("type", "timed");
269        inputTextbox.setAttribute("timeout", "300")
270       
271        // to ealy to access vI_tooltipPopupset, this might break the interface
272        // it will be done in v_identity.js init
273        // document.getElementById("vI_tooltipPopupset").addTooltip(this, false);
274       
275        this._prefroot.addObserver("extensions.virtualIdentity.show_smtp", this._observer, false);
276        this._observer.observe();
277        ]]>
278    </constructor>
279    <destructor>
280        <![CDATA[
281        document.getElementById("vI_tooltipPopupset")
282            .removeTooltip(this.tooltipElem.getAttribute("tooltip"));
283        this._prefroot.removeObserver("extensions.virtualIdentity.show_smtp", this._observer);
284        ]]>
285    </destructor>
286
287    <!--
288    double the Identity-Select Dropdown-Menu to be more flexible with modifying it
289    the original Identity Dropdown Menu is hidden and stores the base Identity, on which one
290    the Virtual Identity is build upon
291    -->
292    <method name="command">
293        <body><![CDATA[
294        vI_notificationBar.dump("\n** v_identity.xml msgIdentityCloneElem.doCommand() \n")
295        this.identityData = this.selectedMenuItem.identityData.getDuplicate();
296        // clean reply-to fields before reinit
297        vI_msgIdentityCloneTools.cleanupReplyTo();
298        // set orignal Identity-Menu to the selected Identity
299        vI_msgIdentityCloneTools.copySelectedIdentity(this.value);
300        // recognize reply-to fields for auto-reply
301        vI_msgIdentityCloneTools.initReplyToFields(this.value);
302        ]]></body>
303    </method>   
304    <method name="init">
305        <body><![CDATA[
306        var MenuItems = this._msgIdentityPopupElem.childNodes
307        for (var index = 0; index < MenuItems.length; index++) {
308            var identity = gAccountManager.getIdentity(MenuItems[index].getAttribute("value"));
309           
310            var newIdentity = new identityData(identity.email, identity.fullName, identity.key,
311                        identity.smtpServerKey, null,
312                        identity.description?"- "+identity.description:identity.accountname)
313            newIdentity.extras.readIdentityValues(identity);
314
315            var menuItem = this.addIdentityToCloneMenu(newIdentity)
316
317            if (this._msgIdentity_selectedItem == MenuItems[index]) {
318                this.selectedItem = menuItem;
319                this.identityData = newIdentity.getDuplicate();
320            }
321        }
322        this._popupMenu_separator = true;
323       
324        vI_msgIdentityCloneTools.initReplyToFields(this.value);
325        ]]></body>
326    </method>
327    <method name="clean">
328        <body><![CDATA[
329        var MenuItems = this._popupElem.childNodes;
330        while (MenuItems.length > 0) {
331            try {MenuItems[0].clean();} catch (e) { };
332            this._popupElem.removeChild(MenuItems[0])
333        }
334        this.selectedItem = null;
335        this.identityData = null;
336       
337        this._menu_separator = null;
338        ]]></body>
339    </method>   
340    <method name="addIdentityToCloneMenu">
341        <parameter name="localIdentityData" />
342        <body><![CDATA[
343        var existingItem = this._isExistingCloneMenuItem(localIdentityData);
344        if (!existingItem) {
345            var MenuItem = document.createElement("menuitem");
346                MenuItem.identityData = localIdentityData;
347            MenuItem.setAttribute("class", "identity_clone-popup-item");
348            MenuItem.setAttribute("type", "vIdentity"); // to prevent overriding with menuitem:not([type])
349            MenuItem.value = localIdentityData.id.key; // might be accessed before item is constructed
350
351            // set vid explicitely
352            if (this._popupMenu_separator) MenuItem.setAttribute("vid", "true");
353            else    MenuItem.setAttribute("vid", "false");
354                       
355            this._popupElem.appendChild(MenuItem);
356            return MenuItem;
357        }
358        else return existingItem;
359        ]]></body>
360    </method>
361    <method name="addIdentitiesToCloneMenu">
362        <parameter name="identityCollection" />
363        <body><![CDATA[
364        for (var index = 0; index < identityCollection.number; index++)
365            identityCollection.menuItems[index] =
366                this.addIdentityToCloneMenu(identityCollection.identityDataCollection[index])
367        ]]></body>
368    </method>
369    <method name="_getMenuItemForIdentity">
370        <parameter name="identitykey" />
371        <body><![CDATA[
372        var MenuItems = this._popupElem.childNodes;
373        for (var index = 0; index < MenuItems.length; index++) {
374            if (MenuItems[index].value == identitykey)
375                return MenuItems[index]
376        }
377        return null;
378        ]]></body>
379    </method>
380    <property name="_popupMenu_separator" >
381        <getter><![CDATA[
382            if (this._menu_separator) this._menu_separator.removeAttribute("hidden");
383            return this._menu_separator;
384        ]]></getter>
385        <setter><![CDATA[
386            if (!val) return;
387            // add hidden separator as indicator that now only virtual identities are added
388            this._menu_separator = document.createElement("menuseparator");
389            this._menu_separator.setAttribute("id", "vid_separator");
390            this._menu_separator.setAttribute("hidden", "true");
391            this._popupElem.appendChild(this._menu_separator)
392        ]]></setter>   
393    </property>
394    <property name="selectedMenuItem" >
395        <getter><![CDATA[
396            return this.selectedItem;
397        ]]></getter>
398        <setter><![CDATA[
399            if (typeof(val) == "object") this.selectedItem = val
400            else if (val == "default")
401                this.selectedItem = this._getMenuItemForIdentity(gAccountManager.defaultAccount.defaultIdentity.key)
402            else this.selectedItem = this._getMenuItemForIdentity(val)
403            this.doCommand();
404        ]]></setter>   
405    </property>
406    <method name="_isExistingCloneMenuItem">
407        <parameter name="localIdentityData" />
408        <body><![CDATA[
409        var MenuItems = this._popupElem.childNodes
410        for (var j = 0; j < MenuItems.length; j++) {
411            if (MenuItems[j].localName == "menuseparator") continue;
412            if (MenuItems[j].identityData.equals(localIdentityData)) return MenuItems[j];
413        }
414        return null;
415        ]]></body>
416    </method>
417    <field name="_msgIdentityElem">document.getElementById("msgIdentity")</field>
418    <field name="_msgIdentityPopupElem">document.getElementById("msgIdentityPopup")</field>
419    <property name="_msgIdentity_selectedItem" >
420        <getter><![CDATA[
421            if (!this._msgIdentityElem.selectedItem) {
422                vI_notificationBar.dump("** v_identity.xml: msgIdentityElem.selectedItem not set, using first Menuitem\n");
423                this._msgIdentityElem.selectedItem = this._msgIdentityPopupElem.firstChild
424                vI_notificationBar.dump("** v_identity.xml: msgIdentityElem.doCommand()\n");
425                this._msgIdentityElem.doCommand();
426            }
427            return this._msgIdentityElem.selectedItem;
428        ]]></getter>
429    </property> 
430    <method name="blurEvent">
431            <body><![CDATA[
432        vI_notificationBar.dump("\n** v_identity.xml blurEvent")
433        this.inputEvent(); // timeout might prevent inputEvent to fire before blurEvent
434       
435        this.label = this.identityData.combinedName; // add "<" and ">" to email if required
436        this.setAttribute("label", this.label);
437        ]]></body>
438    </method>
439    <method name="inputEvent">
440            <body><![CDATA[     
441        vI_notificationBar.dump("\n** v_identity.xml inputEvent\n")
442       
443        this.identityData.combinedName = this.label;
444       
445        var existingIdentity = this.checkForVirtualIdentity();
446        if (existingIdentity) this.selectedMenuItem = existingIdentity;
447       
448        vI_msgIdentityCloneTools.updateReplyTo();
449        ]]></body>
450    </method>
451    <method name="checkForVirtualIdentity">
452        <body><![CDATA[
453        var existingIdentity = this.identityData.isExistingIdentity(false);
454        if (!existingIdentity) { this.vid = true; vI_msgIdentityCloneTools.updateReplyTo(); }
455        else this.vid = false;
456       
457        vI_msgIdentityCloneTools.signatureSwitch(existingIdentity);
458       
459        return existingIdentity;
460        ]]></body>
461    </method>
462    <property name="smtp" onget="return this.identityData.smtp.key;" >
463        <setter><![CDATA[
464        this.identityData.smtp.key = val;
465       
466        document.getElementById("vI_tooltipPopupset").addTooltip(this);
467
468        var existingIdentity = this.checkForVirtualIdentity();
469        if (existingIdentity) this.selectedMenuItem = existingIdentity;
470        ]]></setter>
471    </property>
472    <property name="identityData">
473        <getter><![CDATA[
474        this._identityDataStorage.extras.readValues(); // update with current data
475        return this._identityDataStorage;
476        ]]></getter>
477        <setter><![CDATA[
478//      vI_notificationBar.dump("** v_identity.xml identityData setter'\n")
479        if (!val) this._identityDataStorage = null
480        else {
481            var oldIdentityData = this._identityDataStorage;
482            this._identityDataStorage = val;
483           
484            if (oldIdentityData) { // indicates that it's not first time after clean
485                if (!this._identityDataStorage.id.key) {
486                    this._identityDataStorage.id.key = oldIdentityData.id.key;
487                    var idName = this._identityDataStorage.id.value;
488                    this._identityDataStorage.sideDescription = (idName)?" - "+idName:"";
489                }
490               
491                if (this._identityDataStorage.smtp.key == null)
492                    this._identityDataStorage.smtp.key = oldIdentityData.smtp.key;
493               
494                this._identityDataStorage.extras.setValues();
495           
496                this.checkForVirtualIdentity();
497            }
498            else    this.vid = false;       // first time after clean it's always a real identity
499           
500            this.label = this._identityDataStorage.combinedName;
501            this.value = this._identityDataStorage.id.key;
502//          vI_notificationBar.dump("** v_identity.xml identityData setter value='" + this.value + "'\n")
503            this.description = this._identityDataStorage.sideDescription;
504            document.getAnonymousElementByAttribute(this, "anonid", "smtpServerListHbox").smtp = this._identityDataStorage.smtp.key;
505           
506        }
507//      vI_notificationBar.dump("** v_identity.xml identityData setter done.'\n")
508        ]]></setter>
509    </property>
510    <field name="_popupElem">document.getElementById("msgIdentityPopup_clone")</field>
511    <field name="tooltipElem">document.getAnonymousElementByAttribute(this, "anonid", "contentHBox")</field>
512    <field name="textBoxElem">document.getAnonymousElementByAttribute(this, "anonid", "textBox");</field>
513    <field name="_prefroot">Components.classes["@mozilla.org/preferences-service;1"]
514        .getService(Components.interfaces.nsIPrefService)
515        .getBranch(null).QueryInterface(Components.interfaces.nsIPrefBranch2)</field>
516    <field name="_observer"><![CDATA[({
517        _self: this,
518            observe: function(aSubject, aTopic, aPrefName) {
519            if (this._self._prefroot)
520                this._self.showSmtp =
521                this._self._prefroot.getBoolPref("extensions.virtualIdentity.show_smtp");
522                var MenuItems = this._self._popupElem.childNodes;
523                for (var j = 0; j < MenuItems.length; j++) {
524                    if (MenuItems[j].localName == "menuseparator") continue;
525                    MenuItems[j].smtpStyle = "width:" + document.getElementById("smtp_server_list").clientWidth + "px;";
526                }
527        }
528        })]]></field>
529    <property name="email" onset="this.identityData.email = val; this.label = this.identityData.combinedName; this.inputEvent()" />
530    <property name="vid" onget="return (this.getAttribute('vid') == 'true');" onset="this.setAttribute('vid',val?'true':'false'); return val;" />
531    <property name="label" onget="return this.textBoxElem.value;" onset="this.textBoxElem.value = val; return val;" />
532    <property name="value" onget="return this.getAttribute('value');" onset="this.setAttribute('value', val); return val;" />
533    <property name="extras" onget="return this.identityData.extras;" />
534    <property name="description" onget="return this.getAttribute('description');" onset="this.setAttribute('description', val); return val;" />
535    <property name="showSmtp" onget="return (this.getAttribute('showSmtp') == 'true');" onset="this.setAttribute('showSmtp',val?'true':'false'); return val;" />
536    </implementation>
537    </binding>
538</bindings>
Note: See TracBrowser for help on using the repository browser.