/** * 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