diff options
author | Egil Moeller <egil.moller@freecode.no> | 2012-02-26 13:07:51 +0100 |
---|---|---|
committer | Egil Moeller <egil.moller@freecode.no> | 2012-02-26 13:07:51 +0100 |
commit | 1239ce7f284821ad4ce51f8219c480ff557a5b86 (patch) | |
tree | 83816de3b8855fb89fadcb2383b3f8f81d66daf8 /src/static/js/pad_modals.js | |
parent | 1955bdec9a0f0448e5b04638f0e69ed3b9210f39 (diff) | |
download | etherpad-lite-1239ce7f284821ad4ce51f8219c480ff557a5b86.zip |
The Big Renaming - etherpad is now an NPM module
Diffstat (limited to 'src/static/js/pad_modals.js')
-rw-r--r-- | src/static/js/pad_modals.js | 374 |
1 files changed, 374 insertions, 0 deletions
diff --git a/src/static/js/pad_modals.js b/src/static/js/pad_modals.js new file mode 100644 index 00000000..b78e28f4 --- /dev/null +++ b/src/static/js/pad_modals.js @@ -0,0 +1,374 @@ +/** + * This code is mostly from the old Etherpad. Please help us to comment this code. + * This helps other people to understand this code better and helps them to improve it. + * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED + */ + +/** + * 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 padutils = require('/pad_utils').padutils; +var paddocbar = require('/pad_docbar').paddocbar; + +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 pad = undefined; + var self = { + init: function(_pad) + { + pad = _pad; + + 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; +}()); + +exports.padmodals = padmodals; |