summaryrefslogtreecommitdiff
path: root/src/static/js/pad_modals.js
diff options
context:
space:
mode:
authorEgil Moeller <egil.moller@freecode.no>2012-02-26 13:07:51 +0100
committerEgil Moeller <egil.moller@freecode.no>2012-02-26 13:07:51 +0100
commit1239ce7f284821ad4ce51f8219c480ff557a5b86 (patch)
tree83816de3b8855fb89fadcb2383b3f8f81d66daf8 /src/static/js/pad_modals.js
parent1955bdec9a0f0448e5b04638f0e69ed3b9210f39 (diff)
downloadetherpad-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.js374
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;