aboutsummaryrefslogtreecommitdiffstats
path: root/trunk/etherpad/src/static/js/pad_modals.js
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/etherpad/src/static/js/pad_modals.js')
-rw-r--r--trunk/etherpad/src/static/js/pad_modals.js364
1 files changed, 364 insertions, 0 deletions
diff --git a/trunk/etherpad/src/static/js/pad_modals.js b/trunk/etherpad/src/static/js/pad_modals.js
new file mode 100644
index 0000000..c9f48b5
--- /dev/null
+++ b/trunk/etherpad/src/static/js/pad_modals.js
@@ -0,0 +1,364 @@
+/**
+ * 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 allModals = $("#feedbackbox, #sharebox");
+
+ var shareboxExpanded = false;
+ var shareExpander = padutils.makeShowHideAnimator(function(state) {
+ function pow(x) { x = 1-x; x *= x*x; return 1-x; }
+ function ease(x) { return (x < 0) ? pow(x+1) : 1-pow(x); }
+ var smallHeight = 110 + (pad.getUserIsGuest() ? 0 : 50);
+ var bigHeight = 326 + (pad.getUserIsGuest() ? 0 : 50);
+ var boxHeight = (Math.abs(ease(state)))*(bigHeight-smallHeight) + smallHeight;
+ $("#sharebox").height(boxHeight);
+ // sharebox-open controls the disclosure triangle
+ // and also the visibility of any response (error/success)
+ // messages, which must be hidden during animation as well
+ // as when closed.
+ if (state == 0) {
+ $("#sharebox").addClass('sharebox-open');
+ }
+ else if (state > 0) {
+ $("#sharebox").removeClass('sharebox-open');
+ $("#sharebox-response").hide();
+ }
+ }, false, 20, 500);
+
+ //var overlayNode = null;
+
+ /*function adjustOverlay() {
+ if (overlayNode) {
+ var nodeWidth = overlayNode.width();
+ var nodeHeight = overlayNode.height();
+ var nodePos = overlayNode.position();
+ var outset = 10;
+ $("#modaloverlay").css({width: nodeWidth+outset*2,
+ height: nodeHeight+outset*2,
+ left: nodePos.left-outset,
+ top: nodePos.top-outset});
+ }
+ }*/
+
+ function showOverlay(forNode) {
+ //overlayNode = forNode;
+ //adjustOverlay();
+ $("#modaloverlay").show();
+ }
+ function hideOverlay() {
+ $("#modaloverlay").hide();
+ }
+
+ var self = {
+ shareExpander: shareExpander,
+ 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();
+ });
+
+ $("#uservoicelinks a").click(function() {
+ self.hideModal();
+ return true;
+ });
+ $("#feedbackemails a").each(function() {
+ var node = $(this);
+ node.attr('href', "mailto:"+node.attr('href')+"@pad.spline.inf.fu-berlin.de");
+ });
+ },
+ initShareBox: function() {
+ $("#sharebutton, #nootherusers a").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-dislink").click(function() {
+ if (shareboxExpanded) {
+ shareboxExpanded = false;
+ shareExpander.hide();
+ }
+ else {
+ shareboxExpanded = true;
+ shareExpander.show();
+ }
+ });
+
+ $("#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() {
+ allModals.hide();
+ $("#feedbackbox").show();
+ showOverlay($("#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';
+ }
+
+ allModals.hide();
+ $("#sharebox").show();
+ showOverlay($("#sharebox"));
+ $("#sharebox-url").focus().select();
+ },
+ hideModal: function() {
+ padutils.cancelActions('hide-feedbackbox');
+ padutils.cancelActions('hide-sharebox');
+ $("#sharebox-response").hide();
+ allModals.hide();
+ hideOverlay();
+ },
+ 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"+"@"+"pad.spline.inf.fu-berlin.de 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;
+}()); \ No newline at end of file