Fix name-typo in NEWS
[coquelicot.git] / public / javascripts / coquelicot.js
1 /*
2  * Coquelicot: "one-click" file sharing with a focus on users' privacy.
3  * Copyright © 2010-2013 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.kib);
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.before(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.append($('<div>').append($('<code>').text(pass))).
71            append($('<div>').append($('<em>').text(i18n.writeItDown)));
72       link.before(show);
73       link.remove();
74     });
75   });
76 }
77
78 function authenticate() {
79   var authForm = $('<form></form>')
80   var authDiv = $('#upload-authentication').remove();
81   var lb = $.lightBoxFu;
82   authForm.bind('submit', function() {
83     jQuery.ajax({
84       type: 'POST',
85       url: 'authenticate',
86       dataType: 'text',
87       data: authentication.getData(),
88       success: function(data, textStatus, jqXHR) {
89         if (data != 'OK') {
90           /* Mh. Something strange happened. */
91           return;
92         }
93         var hiddenFields = $('<div />')
94         $.each(authentication.getData(), function(key, value) {
95           var hiddenField = $('<input type="hidden" />');
96           hiddenField.attr('name', key);
97           hiddenField.val(value);
98           hiddenFields.append(hiddenField)
99         });
100         $('#upload').prepend(hiddenFields);
101         lb.close();
102         if (authentication.handleAccept) {
103           authentication.handleAccept();
104         }
105       },
106       error: function(jqXHR, textStatus, errorThrown) {
107         switch (jqXHR.status) {
108           case 403:
109             $('#auth-message').text(i18n.pleaseTryAgain);
110             if (authentication.handleReject) {
111               authentication.handleReject();
112             }
113             return;
114           default:
115             $('#auth-message').
116               empty().
117               append($('<div />').text(i18n.error)).
118               append($('<div />').append($('<strong />').text(errorThrown))).
119               append($('<div />').text(jqXHR.responseText));
120             if (authentication.handleFailure) {
121               authentication.handleFailure(textStatus);
122             }
123         }
124       },
125     });
126     return false;
127   });
128   lb.open({
129     html: authForm.append(authDiv).append('<div id="auth-message"></div>'),
130     width: "350px",
131     closeOnClick: false
132   });
133   authentication.focus();
134 }