]> git.donarmstrong.com Git - roundcube.git/blob - skins/default/functions.js
Imported Upstream version 0.3
[roundcube.git] / skins / default / functions.js
1 /**
2  * RoundCube functions for default skin interface
3  */
4
5 /**
6  * Settings
7  */
8
9 function rcube_init_settings_tabs()
10 {
11   var tab = '#settingstabdefault';
12   if (window.rcmail && rcmail.env.action)
13     tab = '#settingstab' + (rcmail.env.action=='preferences' ? 'default' : (rcmail.env.action.indexOf('identity')>0 ? 'identities' : rcmail.env.action.replace(/\./g, '')));
14
15   $(tab).addClass('tablink-selected');
16 }
17
18 function rcube_show_advanced(visible)
19 {
20   $('tr.advanced').css('display', (visible ? (bw.ie ? 'block' : 'table-row') : 'none'));
21 }
22
23 /**
24  * Mail Composing
25  */
26
27 function rcmail_show_header_form(id)
28 {
29   var link, row, parent, ns, ps;
30   
31   link = document.getElementById(id + '-link');
32   parent = link.parentNode;
33
34   if ((ns = rcmail_next_sibling(link)))
35     ns.style.display = 'none';
36   else if ((ps = rcmail_prev_sibling(link)))
37     ps.style.display = 'none';
38     
39   link.style.display = 'none';
40
41   if (row = document.getElementById('compose-' + id))
42     {
43     var div = document.getElementById('compose-div');
44     var headers_div = document.getElementById('compose-headers-div');
45     row.style.display = (document.all && !window.opera) ? 'block' : 'table-row';
46     div.style.top = (parseInt(headers_div.offsetHeight)) + 'px';
47     }
48
49   return false;
50 }
51
52 function rcmail_hide_header_form(id)
53 {
54   var row, parent, ns, ps, link, links;
55
56   link = document.getElementById(id + '-link');
57   link.style.display = '';
58   
59   parent = link.parentNode;
60   links = parent.getElementsByTagName('a');
61
62   for (var i=0; i<links.length; i++)
63     if (links[i].style.display != 'none')
64       for (var j=i+1; j<links.length; j++)
65         if (links[j].style.display != 'none')
66           if ((ns = rcmail_next_sibling(links[i]))) {
67             ns.style.display = '';
68             break;
69           }
70
71   document.getElementById('_' + id).value = '';
72
73   if (row = document.getElementById('compose-' + id))
74     {
75     var div = document.getElementById('compose-div');
76     var headers_div = document.getElementById('compose-headers-div');
77     row.style.display = 'none';
78     div.style.top = (parseInt(headers_div.offsetHeight)) + 'px';
79     }
80
81   return false;
82 }
83
84 function rcmail_next_sibling(elm)
85 {
86   var ns = elm.nextSibling;
87   while (ns && ns.nodeType == 3)
88     ns = ns.nextSibling;
89   return ns;
90 }
91
92 function rcmail_prev_sibling(elm)
93 {
94   var ps = elm.previousSibling;
95   while (ps && ps.nodeType == 3)
96     ps = ps.previousSibling;
97   return ps;
98 }
99
100 function rcmail_init_compose_form()
101 {
102   var cc_field = document.getElementById('_cc');
103   if (cc_field && cc_field.value!='')
104     rcmail_show_header_form('cc');
105
106   var bcc_field = document.getElementById('_bcc');
107   if (bcc_field && bcc_field.value!='')
108     rcmail_show_header_form('bcc');
109
110   // prevent from form data loss when pressing ESC key in IE
111   if (bw.ie) {
112     var form = rcube_find_object('form');
113     form.onkeydown = function (e) { if (rcube_event.get_keycode(e) == 27) rcube_event.cancel(e); };
114   }
115 }
116
117 /**
118  * Mailbox view
119  */
120
121 function rcube_mail_ui()
122 {
123   this.markmenu = $('#markmessagemenu');
124   this.searchmenu = $('#searchmenu');
125   this.messagemenu = $('#messagemenu');
126 }
127
128 rcube_mail_ui.prototype = {
129
130 show_markmenu: function(show)
131 {
132   if (typeof show == 'undefined')
133     show = this.markmenu.is(':visible') ? false : true;
134   
135   var ref = rcube_find_object('markreadbutton');
136   if (show && ref)
137     this.markmenu.css({ left:ref.offsetLeft, top:(ref.offsetTop + ref.offsetHeight) });
138   
139   this.markmenu[show?'show':'hide']();
140 },
141
142 show_messagemenu: function(show)
143 {
144   if (typeof show == 'undefined')
145     show = this.messagemenu.is(':visible') ? false : true;
146
147   var ref = rcube_find_object('messagemenulink');
148   if (show && ref)
149     this.messagemenu.css({ left:ref.offsetLeft, top:(ref.offsetTop + ref.offsetHeight) });
150
151   this.messagemenu[show?'show':'hide']();
152 },
153
154 show_searchmenu: function(show)
155 {
156   if (typeof show == 'undefined')
157     show = this.searchmenu.is(':visible') ? false : true;
158
159   var ref = rcube_find_object('searchmod');
160   if (show && ref) {
161     var pos = $(ref).offset();
162     this.searchmenu.css({ left:pos.left, top:(pos.top + ref.offsetHeight + 2)});
163
164     if (rcmail.env.search_mods) {
165       for (var n in rcmail.env.search_mods) {
166         box = rcube_find_object('s_mod_' + n);
167         box.checked = 'checked';
168       }
169     }
170   }
171   this.searchmenu[show?'show':'hide']();
172 },
173  
174 set_searchmod: function(elem)
175 {
176   if (!rcmail.env.search_mods)
177     rcmail.env.search_mods = new Object();
178   
179   if (!elem.checked)
180     delete(rcmail.env.search_mods[elem.value]);
181   else
182     rcmail.env.search_mods[elem.value] = elem.value;
183 },
184
185 body_mouseup: function(evt, p)
186 {
187   if (this.markmenu && this.markmenu.is(':visible') && rcube_event.get_target(evt) != rcube_find_object('markreadbutton'))
188     this.show_markmenu(false);
189   else if (this.messagemenu && this.messagemenu.is(':visible') && rcube_event.get_target(evt) != rcube_find_object('messagemenulink'))
190     this.show_messagemenu(false);
191   else if (this.searchmenu && this.searchmenu.is(':visible') && rcube_event.get_target(evt) != rcube_find_object('searchmod')) {
192     var menu = rcube_find_object('searchmenu');
193     var target = rcube_event.get_target(evt);
194     while (target.parentNode) {
195       if (target.parentNode == menu)
196         return;
197       target = target.parentNode;
198     }
199     this.show_searchmenu(false);
200   }
201 },
202
203 body_keypress: function(evt, p)
204 {
205   if (rcube_event.get_keycode(evt) == 27) {
206     if (this.markmenu && this.markmenu.is(':visible'))
207       this.show_markmenu(false);
208     if (this.searchmenu && this.searchmenu.is(':visible'))
209       this.show_searchmenu(false);
210     if (this.messagemenu && this.messagemenu.is(':visible'))
211       this.show_messagemenu(false);
212   }
213 }
214
215 };
216
217 var rcmail_ui;
218
219 function rcube_init_mail_ui()
220 {
221   rcmail_ui = new rcube_mail_ui();
222   rcube_event.add_listener({ object:rcmail_ui, method:'body_mouseup', event:'mouseup' });
223   rcube_event.add_listener({ object:rcmail_ui, method:'body_keypress', event:'keypress' });
224 }