/** * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS-IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var padmodals = (function() { /*var clearFeedbackEmail = function() {}; function clearFeedback() { clearFeedbackEmail(); $("#feedbackbox-message").val(''); } var sendingFeedback = false; function setSendingFeedback(v) { v = !! v; if (sendingFeedback != v) { sendingFeedback = v; if (v) { $("#feedbackbox-send").css('opacity', 0.75); } else { $("#feedbackbox-send").css('opacity', 1); } } }*/ var sendingInvite = false; function setSendingInvite(v) { v = !! v; if (sendingInvite != v) { sendingInvite = v; if (v) { $(".sharebox-send").css('opacity', 0.75); } else { $("#sharebox-send").css('opacity', 1); } } } var clearShareBoxTo = function() {}; function clearShareBox() { clearShareBoxTo(); } var self = { init: function() { self.initFeedback(); self.initShareBox(); }, initFeedback: function() { /*var emailField = $("#feedbackbox-email"); clearFeedbackEmail = padutils.makeFieldLabeledWhenEmpty(emailField, '(your email address)').clear; clearFeedback();*/ $("#feedbackbox-hide").click(function() { self.hideModal(); }); /*$("#feedbackbox-send").click(function() { self.sendFeedbackEmail(); });*/ $("#feedbackbutton").click(function() { self.showFeedback(); }); }, initShareBox: function() { $("#sharebutton").click(function() { self.showShareBox(); }); $("#sharebox-hide").click(function() { self.hideModal(); }); $("#sharebox-send").click(function() { self.sendInvite(); }); $("#sharebox-url").click(function() { $("#sharebox-url").focus().select(); }); clearShareBoxTo = padutils.makeFieldLabeledWhenEmpty($("#sharebox-to"), "(email addresses)").clear; clearShareBox(); $("#sharebox-subject").val(self.getDefaultShareBoxSubjectForName(pad.getUserName())); $("#sharebox-message").val(self.getDefaultShareBoxMessageForName(pad.getUserName())); $("#sharebox-stripe .setsecurity").click(function() { self.hideModal(); paddocbar.setShownPanel('security'); }); }, getDefaultShareBoxMessageForName: function(name) { return (name || "Somebody") + " has shared an EtherPad document with you." + "\n\n" + "View it here:\n\n" + padutils.escapeHtml($(".sharebox-url").val() + "\n"); }, getDefaultShareBoxSubjectForName: function(name) { return (name || "Somebody") + " invited you to an EtherPad document"; }, relayoutWithBottom: function(px) { $("#modaloverlay").height(px); $("#sharebox").css('left', Math.floor(($(window).width() - $("#sharebox").outerWidth()) / 2)); $("#feedbackbox").css('left', Math.floor(($(window).width() - $("#feedbackbox").outerWidth()) / 2)); }, showFeedback: function() { self.showModal("#feedbackbox"); }, showShareBox: function() { // when showing the dialog, if it still says "Somebody" invited you // then we fill in the updated username if there is one; // otherwise, we don't touch it, perhaps the user is happy with it var msgbox = $("#sharebox-message"); if (msgbox.val() == self.getDefaultShareBoxMessageForName(null)) { msgbox.val(self.getDefaultShareBoxMessageForName(pad.getUserName())); } var subjBox = $("#sharebox-subject"); if (subjBox.val() == self.getDefaultShareBoxSubjectForName(null)) { subjBox.val(self.getDefaultShareBoxSubjectForName(pad.getUserName())); } if (pad.isPadPublic()) { $("#sharebox-stripe").get(0).className = 'sharebox-stripe-public'; } else { $("#sharebox-stripe").get(0).className = 'sharebox-stripe-private'; } self.showModal("#sharebox", 500); $("#sharebox-url").focus().select(); }, showModal: function(modalId, duration) { $(".modaldialog").hide(); $(modalId).show().css( { 'opacity': 0 }).animate( { 'opacity': 1 }, duration); $("#modaloverlay").show().css( { 'opacity': 0 }).animate( { 'opacity': 1 }, duration); }, hideModal: function(duration) { padutils.cancelActions('hide-feedbackbox'); padutils.cancelActions('hide-sharebox'); $("#sharebox-response").hide(); $(".modaldialog").animate( { 'opacity': 0 }, duration, function() { $("#modaloverlay").hide(); }); $("#modaloverlay").animate( { 'opacity': 0 }, duration, function() { $("#modaloverlay").hide(); }); }, hideFeedbackLaterIfNoOtherInteraction: function() { return padutils.getCancellableAction('hide-feedbackbox', function() { self.hideModal(); }); }, hideShareboxLaterIfNoOtherInteraction: function() { return padutils.getCancellableAction('hide-sharebox', function() { self.hideModal(); }); }, /* sendFeedbackEmail: function() { if (sendingFeedback) { return; } var message = $("#feedbackbox-message").val(); if (! message) { return; } var email = ($("#feedbackbox-email").hasClass('editempty') ? '' : $("#feedbackbox-email").val()); var padId = pad.getPadId(); var username = pad.getUserName(); setSendingFeedback(true); $("#feedbackbox-response").html("Sending...").get(0).className = ''; $("#feedbackbox-response").show(); $.ajax({ type: 'post', url: '/ep/pad/feedback', data: { feedback: message, padId: padId, username: username, email: email }, success: success, error: error }); var hideCall = self.hideFeedbackLaterIfNoOtherInteraction(); function success(msg) { setSendingFeedback(false); clearFeedback(); $("#feedbackbox-response").html("Thanks for your feedback").get(0).className = 'goodresponse'; $("#feedbackbox-response").show(); window.setTimeout(function() { $("#feedbackbox-response").fadeOut('slow', function() { hideCall(); }); }, 1500); } function error(e) { setSendingFeedback(false); $("#feedbackbox-response").html("Could not send feedback. Please email us at feedback"+"@"+"etherpad.com instead.").get(0).className = 'badresponse'; $("#feedbackbox-response").show(); } },*/ sendInvite: function() { if (sendingInvite) { return; } if (!pad.isFullyConnected()) { displayErrorMessage("Error: Connection to the server is down or flaky."); return; } var message = $("#sharebox-message").val(); if (!message) { displayErrorMessage("Please enter a message body before sending."); return; } var emails = ($("#sharebox-to").hasClass('editempty') ? '' : $("#sharebox-to").val()) || ''; // find runs of characters that aren't obviously non-email punctuation var emailArray = emails.match(/[^\s,:;<>\"\'\/\(\)\[\]{}]+/g) || []; if (emailArray.length == 0) { displayErrorMessage('Please enter at least one "To:" address.'); $("#sharebox-to").focus().select(); return; } for (var i = 0; i < emailArray.length; i++) { var addr = emailArray[i]; if (!addr.match(/^[\w\.\_\+\-]+\@[\w\_\-]+\.[\w\_\-\.]+$/)) { displayErrorMessage('"' + padutils.escapeHtml(addr) + '" does not appear to be a valid email address.'); return; } } var subject = $("#sharebox-subject").val(); if (!subject) { subject = self.getDefaultShareBoxSubjectForName(pad.getUserName()); $("#sharebox-subject").val(subject); // force the default subject } var padId = pad.getPadId(); var username = pad.getUserName(); setSendingInvite(true); $("#sharebox-response").html("Sending...").get(0).className = ''; $("#sharebox-response").show(); $.ajax( { type: 'post', url: '/ep/pad/emailinvite', data: { message: message, toEmails: emailArray.join(','), subject: subject, username: username, padId: padId }, success: success, error: error }); var hideCall = self.hideShareboxLaterIfNoOtherInteraction(); function success(msg) { setSendingInvite(false); $("#sharebox-response").html("Email invitation sent!").get(0).className = 'goodresponse'; $("#sharebox-response").show(); window.setTimeout(function() { $("#sharebox-response").fadeOut('slow', function() { hideCall(); }); }, 1500); } function error(e) { setSendingFeedback(false); $("#sharebox-response").html("An error occurred; no email was sent.").get(0).className = 'badresponse'; $("#sharebox-response").show(); } function displayErrorMessage(msgHtml) { $("#sharebox-response").html(msgHtml).get(0).className = 'badresponse'; $("#sharebox-response").show(); } } }; return self; }());