mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
So what's now happening here is that the outer div (which we were previously animating) doesn't get animated at all; instead it is simply made visible or hidden. I *believe* this means that it always continues to take the same amount of space in the DOM; its being added and removed seemed to cause a slight height-of-page change which caused the scrollHandler to fire, causing the selected message indicator to move down the page. So now that this height is fixed, we achieve the animation instead by animating the inner div -- the one that actually contains the composebox elements. (imported from commit 95b2f95d52254e3792633460f42efaac27559efe)
164 lines
4.5 KiB
JavaScript
164 lines
4.5 KiB
JavaScript
var status_classes = 'alert-error alert-success alert-info';
|
|
|
|
function show_compose(tabname, focus_area) {
|
|
$('#zephyr_compose').css({visibility: "visible"});
|
|
$('.zephyr_comp').slideDown(100);
|
|
$('#zephyr-type-tabs a[href="#' + tabname + '-message"]').tab('show');
|
|
focus_area.focus();
|
|
focus_area.select();
|
|
}
|
|
|
|
function hide_compose() {
|
|
$('input, textarea, button').blur();
|
|
$('.zephyr_comp').slideUp(100,
|
|
function() { $('#zephyr_compose').css({visibility: "hidden"});});
|
|
}
|
|
|
|
function clear_compose_box() {
|
|
$("#zephyr_compose").find('input[type=text], textarea').val('');
|
|
}
|
|
|
|
function compose_button() {
|
|
clear_compose_box();
|
|
$('#sidebar a[href="#home"]').tab('show');
|
|
show_compose('class', $("#class"));
|
|
}
|
|
|
|
function toggle_compose() {
|
|
if ($("#zephyr-type-tabs li.active").find("a[href=#class-message]").length !== 0) {
|
|
// In class tab, switch to personals.
|
|
show_compose('personal', $("#huddle_recipient"));
|
|
} else {
|
|
show_compose('class', $("#class"));
|
|
}
|
|
}
|
|
|
|
function composing_class_message() {
|
|
return $("#class-message").is(":visible");
|
|
}
|
|
|
|
function composing_huddle_message() {
|
|
return $("#personal-message").is(":visible");
|
|
}
|
|
|
|
function compose_class_name() {
|
|
return $.trim($("#class").val());
|
|
}
|
|
|
|
function compose_instance() {
|
|
return $.trim($("#instance").val());
|
|
}
|
|
|
|
function compose_message() {
|
|
return $.trim($("#new_zephyr").val());
|
|
}
|
|
|
|
function compose_recipient() {
|
|
return $.trim($("#huddle_recipient").val());
|
|
}
|
|
|
|
function compose_huddle_message() {
|
|
return $.trim($("#new_zephyr").val());
|
|
}
|
|
|
|
function compose_error(error_text, bad_input) {
|
|
$('#send-status').removeClass(status_classes)
|
|
.addClass('alert-error')
|
|
.text(error_text)
|
|
.stop(true).fadeTo(0, 1);
|
|
$('#zephyr_compose').find('input[type="submit"]').removeAttr('disabled');
|
|
bad_input.focus().select();
|
|
}
|
|
|
|
function submit_buttons() {
|
|
return $('#zephyr_compose').find('input[type="submit"]');
|
|
}
|
|
|
|
// *Synchronously* check if a class exists.
|
|
// If not, displays an error and returns false.
|
|
function check_class_for_send(class_name) {
|
|
var okay = true;
|
|
$.ajax({
|
|
url: "subscriptions/exists/" + class_name,
|
|
async: false,
|
|
success: function (data) {
|
|
if (data === "False") {
|
|
// The class doesn't exist
|
|
okay = false;
|
|
$('#send-status').removeClass(status_classes).show();
|
|
$('#class-dne-name').text(class_name);
|
|
$('#class-dne').show();
|
|
submit_buttons().removeAttr('disabled');
|
|
hide_compose();
|
|
$('#create-it').focus();
|
|
}
|
|
$("#home-error").hide();
|
|
},
|
|
error: function (xhr) {
|
|
okay = false;
|
|
report_error("Error checking subscription", xhr, $("#home-error"));
|
|
$("#class").focus();
|
|
submit_buttons().removeAttr('disabled');
|
|
}
|
|
});
|
|
return okay;
|
|
}
|
|
|
|
function validate_class_message() {
|
|
var class_name = compose_class_name();
|
|
if (class_name === "") {
|
|
compose_error("Please specify a class", $("#class"));
|
|
return false;
|
|
}
|
|
|
|
if (compose_instance() === "") {
|
|
compose_error("Please specify an instance", $("#instance"));
|
|
return false;
|
|
}
|
|
|
|
if (compose_message() === "") {
|
|
compose_error("You have nothing to send!", $("#new_zephyr"));
|
|
return false;
|
|
}
|
|
|
|
if (!check_class_for_send(class_name))
|
|
return false;
|
|
|
|
if (class_list.indexOf(class_name.toLowerCase()) === -1) {
|
|
// You're not subbed to the class
|
|
$('#send-status').removeClass(status_classes).show();
|
|
$('#class-nosub-name').text(class_name);
|
|
$('#class-nosub').show();
|
|
submit_buttons().removeAttr('disabled');
|
|
hide_compose();
|
|
$('#sub-it').focus();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function validate_huddle_message() {
|
|
if (compose_recipient() === "") {
|
|
compose_error("Please specify at least one recipient", $("#huddle_recipient"));
|
|
return false;
|
|
}
|
|
|
|
if (compose_huddle_message() === "") {
|
|
compose_error("You have nothing to send!", $("#new_zephyr"));
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function validate_message() {
|
|
submit_buttons().attr('disabled', 'disabled').blur();
|
|
|
|
if (composing_huddle_message()) {
|
|
return validate_huddle_message();
|
|
} else {
|
|
return validate_class_message();
|
|
}
|
|
}
|