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