mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-01-20 22:49:53 +01:00
fa2a6e9ee6
Create a lazily-defined local reference for pad on initialization in each pad module in order to avoid circular dependency. At some point in the future this dependency should instead be injected into each module on initialization.
376 lines
10 KiB
JavaScript
376 lines
10 KiB
JavaScript
/**
|
|
* 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 = require('/pad2').pad; // Sidestep circular dependency (should be injected).
|
|
|
|
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;
|
|
}());
|
|
|
|
if (typeof exports !== 'undefined') {
|
|
exports.padmodals = padmodals;
|
|
}
|