/src/baruwa/static/js/domains.js

https://bitbucket.org/datopdog/baruwa · JavaScript · 212 lines · 184 code · 8 blank · 20 comment · 19 complexity · 9d3eeb72f501fc0b81d3593222b69e99 MD5 · raw file

  1. //
  2. // Baruwa - Web 2.0 MailScanner front-end.
  3. // Copyright (C) 2010 Andrew Colin Kissa <andrew@topdog.za.net>
  4. //
  5. // This program is free software; you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation; either version 2 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License along
  16. // with this program; if not, write to the Free Software Foundation, Inc.,
  17. // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  18. //
  19. // vim: ai ts=4 sts=4 et sw=4
  20. //
  21. function ajax_start(){
  22. $(this).append('&nbsp;Processing...').show();
  23. if ($('#in-progress').length) {
  24. $('#in-progress').remove();
  25. };
  26. $('#Footer_container').after(loading_msg);
  27. }
  28. function ajax_stop(){
  29. $(this).empty().hide();
  30. $('#loading_message').remove();
  31. }
  32. function ajax_error(event, request, settings){
  33. if(request.status == 200){
  34. location.href=settings.url;
  35. }else{
  36. $(this).empty().append('<span class="ajax_error">'+gettext('Error connecting to server. check network!')+'</span>').show();
  37. $('.Grid_heading').before('<div id="ajax-error-msg" class="ui-state-highlight">'+gettext('Server error')+'</div>');
  38. setTimeout(function() {
  39. $('#ajax-error-msg').empty().remove();
  40. }, 3900);
  41. }
  42. $('#loading_message').remove();
  43. }
  44. function navigate(){
  45. window.scrollTo(0,0);
  46. url = $(this).attr('href').replace(/\//g, '-').replace(/^-/, '').replace(/-$/,'');
  47. $.address.value('?u='+url);
  48. $.address.history($.address.baseURL() + url);
  49. $.getJSON($(this).attr('href'),page_from_json);
  50. return false;
  51. }
  52. function paginate(){
  53. fmt = gettext('Showing page %(page)s of %(pages)s pages.');
  54. data = {'page':rj.page, 'pages':rj.pages}
  55. tmp = interpolate(fmt, data, true);
  56. $('#heading').empty().append(tmp);
  57. $.address.title(tmp);
  58. count = 0;
  59. row = [];
  60. row[count++] = tmp;
  61. if(rj.show_first){
  62. row[count++] = '<span><a href="/'+rj.app+'/1/'+rj.direction+'/'+rj.order_by+'/">';
  63. row[count++] = '<img src="'+media_url+'imgs/first_pager.png" alt="First"/></a></span>';
  64. row[count++] = '<span>.....</span>';
  65. }
  66. if(rj.has_previous){
  67. row[count++] = '<span><a href="/'+rj.app+'/'+rj.previous+'/'+rj.direction+'/'+rj.order_by+'/">';
  68. row[count++] = '<img src="'+media_url+'imgs/previous_pager.png" alt="Previous"/></a></span>';
  69. }
  70. $.each(rj.page_numbers,function(itr,lnk){
  71. li = '/'+rj.app+'/'+lnk+'/'+rj.direction+'/'+rj.order_by+'/';
  72. if(rj.page == lnk){
  73. row[count++] = '<span><b>'+lnk+'</b>&nbsp;</span>';
  74. }else{
  75. row[count++] = '<span><a href="'+li+'">'+lnk+'</a>&nbsp;</span>';
  76. }
  77. });
  78. if(rj.has_next){
  79. row[count++] = '<span><a href="/'+rj.app+'/'+rj.next+'/'+rj.direction+'/'+rj.order_by+'/">';
  80. row[count++] = '<img src="'+media_url+'imgs/next_pager.png" alt="Next"/></a></span>';
  81. }
  82. if(rj.show_last){
  83. row[count++] = '<span>......</span>';
  84. row[count++] = '<a href="/'+rj.app+'/last/'+rj.direction+'/'+rj.order_by+'/">';
  85. row[count++] = '<img src="'+media_url+'imgs/last_pager.png" alt="Last"/></a></span>';
  86. }
  87. $('#paginator').html(row.join(''));
  88. $('#paginator span a').bind('click',navigate);
  89. }
  90. function confirm_delete(event){
  91. event.preventDefault();
  92. $(this).blur();
  93. re = /\/accounts\/delete\/address\/([0-9]+)/
  94. l = $(this).attr('href');
  95. m = l.match(re)
  96. if (m) {
  97. del_warning = [];
  98. count = 0;
  99. del_warning[count++] = '<div id="confirm-del-msg">';
  100. del_warning[count++] = '<div id="confirm-del-info">';
  101. del_warning[count++] = gettext('This will delete the domain ');
  102. del_warning[count++] = gettext('and all associated data. This action is not reversible')+'</div>';
  103. del_warning[count++] = '<div id="confirm-del-buttons">';
  104. del_warning[count++] = gettext('Do you wish to continue ?');
  105. del_warning[count++] = '&nbsp;<input type="button" value="Yes" id="yes_del" />&nbsp;';
  106. del_warning[count++] = '<input type="button" value="No" id="no_del" />'
  107. del_warning[count++] = '</div>';
  108. del_warning[count++] = '</div>'
  109. if ($('#confirm-del-msg').length) {
  110. $('#confirm-del-msg').remove();
  111. };
  112. $('#domain-id-'+m[1]).after(del_warning.join(''));
  113. $('#no_del').bind('click', function(event) {
  114. event.preventDefault();
  115. $('#confirm-del-msg').remove();
  116. });
  117. $('#yes_del').bind('click', function(event) {
  118. event.preventDefault();
  119. $('#confirm-del-msg').remove();
  120. $.post(l, {id: m[1]}, function(response) {
  121. if (response.success) {
  122. $('#domain-id-'+m[1]).remove();
  123. $('.Grid_content').before('<div id="in-progress">'+response.html+'</div>');
  124. $('#in-progress').append('<div id="dismiss"><a href="#">'+gettext('Dismiss')+'</a></div>')
  125. ip = setTimeout(function() {$('#in-progress').remove();}, 15050);
  126. }else{
  127. $('.Grid_content').before('<div id="in-progress">'+response.html+'</div>');
  128. $('#in-progress').append('<div id="dismiss"><a href="#">'+gettext('Dismiss')+'</a></div>')
  129. ip = setTimeout(function() {$('#in-progress').remove();}, 15050);
  130. };
  131. $('#dismiss a').click(function(event){event.preventDefault();clearTimeout(ip);$('#in-progress').empty().remove();});
  132. }, "json");
  133. });
  134. };
  135. }
  136. function page_from_json(data){
  137. if (data) {
  138. rj = data.paginator;
  139. row = [];
  140. count = 0;
  141. css = 'DarkGray';
  142. $.each(data.items, function(i, n) {
  143. if(css == 'LightBlue'){
  144. css = 'LightGray';
  145. }else{
  146. css = 'LightBlue';
  147. }
  148. if (n.enabled) {
  149. img = '<img src="'+media_url+'imgs/active.png" alt="" />';
  150. eimg = '<img src="'+media_url+'imgs/tick.png" alt="" />';
  151. }else{
  152. img = '<img src="'+media_url+'imgs/inactive.png" alt="" />';
  153. eimg = '<img src="'+media_url+'imgs/minus.png" alt="" />';
  154. };
  155. row[count++] = '<div id="domain-id-'+n.id+'" class="'+css+'_div">';
  156. row[count++] = '<div class="Domains_hash">'+img+'</div>';
  157. row[count++] = '<div class="Domains_name"><a href="/settings/domains/'+n.id+'/">';
  158. row[count++] = ' '+n.address+'</a></div>';
  159. row[count++] = '<div class="Domains_owner"><a href="/accounts/user/'+n.user__id+'/">';
  160. row[count++] = ' '+n.user__first_name+' '+n.user__last_name+' ('+n.user__username+')</a>';
  161. row[count++] = '</div><div class="Domains_status">'+eimg+'</div>';
  162. row[count++] = '<div class="Domains_action"><div class="Domains_action_edit">';
  163. row[count++] = '<a href="/accounts/edit/address/'+n.id+'/">';
  164. row[count++] = '<img src="'+media_url+'imgs/edit.png" alt="Edit" title="Edit" /></a></div>';
  165. row[count++] = '<div class="Domains_action_delete">';
  166. row[count++] = '<a href="/accounts/delete/address/'+n.id+'/">';
  167. row[count++] = '<img src="'+media_url+'imgs/action_delete.png" alt="Delete" title="Delete" /></a>';
  168. row[count++] = '</div></div></div>';
  169. });
  170. if(row.length){
  171. $("div.Grid_heading").siblings('div').remove();
  172. $("div.Grid_heading").after(row.join(''));
  173. }else{
  174. $("div.Grid_heading").siblings('div').remove();
  175. $("div.Grid_heading").after('<div class="LightBlue_div"><div class="spanrow">'+gettext('No domains at the moment')+'</div></div>');
  176. }
  177. $('div.Domains_action_delete a').bind('click',confirm_delete);
  178. paginate();
  179. }
  180. }
  181. function handlextern(){
  182. page = $.address.parameter("u");
  183. if(page){
  184. window.scrollTo(0,0);
  185. page = $.trim(page);
  186. re = /^settings\-[0-9]+\-dsc|asc\-id|address$/
  187. if(re.test(page)){
  188. page = page.replace(/-/g,'/');
  189. url = '/'+ page + '/';
  190. $.get(url, function(response){
  191. page_from_json(response);
  192. }, "json");
  193. }
  194. }
  195. return false;
  196. }
  197. function jsize_page(){
  198. $('#my-spinner').ajaxStart(ajax_start).ajaxStop(ajax_stop).ajaxError(ajax_error);
  199. $('#paginator span a').bind('click',navigate);
  200. $.address.externalChange(handlextern);
  201. $('div.Domains_action_delete a').bind('click',confirm_delete);
  202. }
  203. var loading_msg = '<div id="loading_message"><div id="loading"><img src="'+media_url+'imgs/ajax-loader.gif" alt="loading"/><br/><b>'+gettext('Processing')+'</b></div></div>';
  204. $(document).ready(jsize_page);