properly half-close both sides of the HTTP connection
[coquelicot.git] / public / javascripts / coquelicot.js
1 /*
2  * Coquelicot: "one-click" file sharing with a focus on users' privacy.
3  * Copyright © 2010-2012 potager.org <jardiniers@potager.org>
4  *           © 2011 mh / immerda.ch <mh+coquelicot@immerda.ch>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as
8  * published by the Free Software Foundation, either version 3 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 $(function($) {
21   $.lightBoxFu.initialize({
22     imagesPath: 'images/',
23     stylesheetsPath: 'stylesheets/'
24   });
25   $('form#upload').uploadProgress({
26     start:function() {
27       // after starting upload open lightBoxFu with our bar as html
28       $.lightBoxFu.open({
29         html: '<div id="uploading"><span id="received"></span><span id="size"></span><br/><div id="progress" class="bar"><div id="progressbar">&nbsp;</div></div><span id="percent"></span></div>',
30         width: "250px",
31         closeOnClick: false
32       });
33       jQuery('#received').html(i18n.uploadStarting);
34       jQuery('#percent').html("0%");
35     },
36     uploading: function(upload) {
37       // update upload info on each /progress response
38       jQuery('#received').html(i18n.uploading + parseInt(upload.received / 1024) + "/");
39       jQuery('#size').html(parseInt(upload.size / 1024) + ' ' + i18n.kb);
40       jQuery('#percent').html(upload.percents + "%");
41     },
42     success: function(upload) {
43       $('#received').html('');
44       $('#size').html('');
45       $('#percent').html("100%");
46     },
47     interval: 2000,
48     /* if we are using images it's good to preload them, safari has problems with
49        downloading anything after hitting submit button. these are images for lightBoxFu
50        and progress bar */
51     preloadImages: ["images/overlay.png", "images/ajax-loader.gif"],
52     jqueryPath: "javascripts/jquery.min.js",
53     uploadProgressPath: "javascripts/jquery.uploadProgress.js",
54     progressUrl: "progress"
55   });
56 });
57
58 function addLinkToPasswordGenerator() {
59   var link = $('<a href="#" id="gen_pass" />');
60   link.text(i18n.generateRandomPassword);
61   var file_key = $('#file_key');
62   file_key.after(link);
63   link.click(function(e) {
64     e.preventDefault();
65     link.text(i18n.generatingRandomPassword);
66     $.get('random_pass', function(pass) {
67       file_key.val(pass);
68       file_key.hide();
69       var show = $('<div class="random-pass" />');
70       show.text(pass);
71       link.before(show);
72       link.remove();
73     });
74   });
75 }
76
77 function authenticate() {
78   var authForm = $('<form></form>')
79   var authDiv = $('#upload-authentication').remove();
80   var lb = $.lightBoxFu;
81   authForm.bind('submit', function() {
82     jQuery.ajax({
83       type: 'POST',
84       url: 'authenticate',
85       dataType: 'text',
86       data: authentication.getData(),
87       success: function(data, textStatus, jqXHR) {
88         if (data != 'OK') {
89           /* Mh. Something strange happened. */
90           return;
91         }
92         var hiddenFields = $('<div />')
93         $.each(authentication.getData(), function(key, value) {
94           var hiddenField = $('<input type="hidden" />');
95           hiddenField.attr('name', key);
96           hiddenField.val(value);
97           hiddenFields.append(hiddenField)
98         });
99         $('#upload').prepend(hiddenFields);
100         lb.close();
101         if (authentication.handleAccept) {
102           authentication.handleAccept();
103         }
104       },
105       error: function(jqXHR, textStatus, errorThrown) {
106         switch (jqXHR.status) {
107           case 403:
108             $('#auth-message').text(i18n.pleaseTryAgain);
109             if (authentication.handleReject) {
110               authentication.handleReject();
111             }
112             return;
113           default:
114             $('#auth-message').
115               empty().
116               append($('<div />').text(i18n.error)).
117               append($('<div />').append($('<strong />').text(errorThrown))).
118               append($('<div />').text(jqXHR.responseText));
119             if (authentication.handleFailure) {
120               authentication.handleFailure(textStatus);
121             }
122         }
123       },
124     });
125     return false;
126   });
127   lb.open({
128     html: authForm.append(authDiv).append('<div id="auth-message"></div>'),
129     width: "430px",
130     closeOnClick: false
131   });
132   authentication.focus();
133 }