Merge remote branch 'nadir/translations/de'
[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     interval: 2000,
43     /* if we are using images it's good to preload them, safari has problems with
44        downloading anything after hitting submit button. these are images for lightBoxFu
45        and progress bar */
46     preloadImages: ["images/overlay.png", "images/ajax-loader.gif"],
47     jqueryPath: "javascripts/jquery.min.js",
48     uploadProgressPath: "javascripts/jquery.uploadProgress.js",
49     progressUrl: "progress"
50   });
51 });
52
53 function addLinkToPasswordGenerator() {
54   var link = $('<a href="#" id="gen_pass" />');
55   link.text(i18n.generateRandomPassword);
56   var file_key = $('#file_key');
57   file_key.after(link);
58   link.click(function(e) {
59     e.preventDefault();
60     link.text(i18n.generatingRandomPassword);
61     $.get('random_pass', function(pass) {
62       file_key.val(pass);
63       file_key.hide();
64       var show = $('<div class="random-pass" />');
65       show.text(pass);
66       link.before(show);
67       link.remove();
68     });
69   });
70 }
71
72 function authenticate() {
73   var authForm = $('<form></form>')
74   var authDiv = $('#upload-authentication').remove();
75   var lb = $.lightBoxFu;
76   authForm.bind('submit', function() {
77     jQuery.ajax({
78       type: 'POST',
79       url: 'authenticate',
80       dataType: 'text',
81       data: authentication.getData(),
82       success: function(data, textStatus, jqXHR) {
83         if (data != 'OK') {
84           /* Mh. Something strange happened. */
85           return;
86         }
87         $.each(authentication.getData(), function(key, value) {
88           var hiddenField = $('<input type="hidden" />');
89           hiddenField.attr('name', key);
90           hiddenField.val(value);
91           $('#upload').append(hiddenField);
92         });
93         lb.close();
94         if (authentication.handleAccept) {
95           authentication.handleAccept();
96         }
97       },
98       error: function(jqXHR, textStatus, errorThrown) {
99         switch (jqXHR.status) {
100           case 403:
101             $('#auth-message').text(i18n.pleaseTryAgain);
102             if (authentication.handleReject) {
103               authentication.handleReject();
104             }
105             return;
106           default:
107             $('#auth-message').
108               empty().
109               append($('<div />').text(i18n.error)).
110               append($('<div />').append($('<strong />').text(errorThrown))).
111               append($('<div />').text(jqXHR.responseText));
112             if (authentication.handleFailure) {
113               authentication.handleFailure(textStatus);
114             }
115         }
116       },
117     });
118     return false;
119   });
120   lb.open({
121     html: authForm.append(authDiv).append('<div id="auth-message"></div>'),
122     width: "430px",
123     closeOnClick: false
124   });
125   authentication.focus();
126 }