mirror of https://github.com/zulip/zulip.git
Move some UI-related code
(imported from commit 28dc554ed91c14f8a8b4be282a211d3d50cf9873)
This commit is contained in:
parent
37f8445318
commit
50d84e9ca8
|
@ -30,6 +30,7 @@
|
||||||
<script type="text/javascript" src="/static/js/dom_access.js"></script>
|
<script type="text/javascript" src="/static/js/dom_access.js"></script>
|
||||||
<script type="text/javascript" src="/static/js/narrow.js"></script>
|
<script type="text/javascript" src="/static/js/narrow.js"></script>
|
||||||
<script type="text/javascript" src="/static/js/compose.js"></script>
|
<script type="text/javascript" src="/static/js/compose.js"></script>
|
||||||
|
<script type="text/javascript" src="/static/js/ui.js"></script>
|
||||||
<script type="text/javascript" src="/static/js/hotkey.js"></script>
|
<script type="text/javascript" src="/static/js/hotkey.js"></script>
|
||||||
<script type="text/javascript" src="/static/js/zephyr.js"></script>
|
<script type="text/javascript" src="/static/js/zephyr.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
function clear_compose_box() {
|
||||||
|
$("#zephyr_compose").find('input[type=text], textarea').val('');
|
||||||
|
}
|
||||||
|
|
||||||
function compose_button() {
|
function compose_button() {
|
||||||
clear_compose_box();
|
clear_compose_box();
|
||||||
$('#sidebar a[href="#home"]').tab('show');
|
$('#sidebar a[href="#home"]').tab('show');
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
function register_huddle_onclick(zephyr_row, sender) {
|
||||||
|
zephyr_row.find(".zephyr_sender").click(function (e) {
|
||||||
|
prepare_huddle(sender);
|
||||||
|
// The sender span is inside the messagebox, which also has an
|
||||||
|
// onclick handler. We don't want to trigger the messagebox
|
||||||
|
// handler.
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
|
// switch to the replybox hotkey handler
|
||||||
|
keydown_handler = process_key_in_input;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function register_onclick(zephyr_row, zephyr_id) {
|
||||||
|
zephyr_row.find(".messagebox").click(function (e) {
|
||||||
|
if (!(clicking && mouse_moved)) {
|
||||||
|
// Was a click (not a click-and-drag).
|
||||||
|
select_zephyr_by_id(zephyr_id);
|
||||||
|
respond_to_zephyr();
|
||||||
|
}
|
||||||
|
mouse_moved = false;
|
||||||
|
clicking = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We use 'visibility' rather than 'display' and jQuery's show() / hide(),
|
||||||
|
because we want to reserve space for the email address. This avoids
|
||||||
|
things jumping around slightly when the email address is shown. */
|
||||||
|
|
||||||
|
function hide_email() {
|
||||||
|
$('.zephyr_sender_email').addClass('invisible');
|
||||||
|
}
|
||||||
|
|
||||||
|
function show_email(zephyr_id) {
|
||||||
|
hide_email();
|
||||||
|
get_zephyr_row(zephyr_id).find('.zephyr_sender_email').removeClass('invisible');
|
||||||
|
}
|
||||||
|
|
||||||
|
function report_error(response, xhr, status_box) {
|
||||||
|
if (xhr.status.toString().charAt(0) === "4") {
|
||||||
|
// Only display the error response for 4XX, where we've crafted
|
||||||
|
// a nice response.
|
||||||
|
response += ": " + $.parseJSON(xhr.responseText).msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
status_box.removeClass(status_classes).addClass('alert-error')
|
||||||
|
.text(response).stop(true).fadeTo(0, 1);
|
||||||
|
status_box.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
var clicking = false;
|
||||||
|
var mouse_moved = false;
|
||||||
|
|
||||||
|
function zephyr_mousedown() {
|
||||||
|
mouse_moved = false;
|
||||||
|
clicking = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function zephyr_mousemove() {
|
||||||
|
if (clicking) {
|
||||||
|
mouse_moved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function go_to_high_water_mark() {
|
||||||
|
select_and_show_by_id(high_water_mark);
|
||||||
|
}
|
||||||
|
|
||||||
|
var autocomplete_needs_update = false;
|
||||||
|
|
||||||
|
function update_autocomplete() {
|
||||||
|
class_list.sort();
|
||||||
|
instance_list.sort();
|
||||||
|
people_list.sort();
|
||||||
|
|
||||||
|
// limit number of items so the list doesn't fall off the screen
|
||||||
|
$( "#class" ).typeahead({
|
||||||
|
source: class_list,
|
||||||
|
items: 3,
|
||||||
|
});
|
||||||
|
$( "#instance" ).typeahead({
|
||||||
|
source: instance_list,
|
||||||
|
items: 2,
|
||||||
|
});
|
||||||
|
$( "#recipient" ).typeahead({
|
||||||
|
source: people_list,
|
||||||
|
items: 4,
|
||||||
|
});
|
||||||
|
|
||||||
|
autocomplete_needs_update = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function () {
|
||||||
|
// NB: This just binds to current elements, and won't bind to elements
|
||||||
|
// created after ready() is called.
|
||||||
|
$('input, textarea, button').focus(function () {
|
||||||
|
keydown_handler = process_key_in_input;
|
||||||
|
});
|
||||||
|
$('input, textarea, button').blur(function () {
|
||||||
|
keydown_handler = process_hotkey;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#zephyr-type-tabs a[href="#class-message"]').on('shown', function (e) {
|
||||||
|
$('#class-message input:not(:hidden):first').focus().select();
|
||||||
|
});
|
||||||
|
$('#zephyr-type-tabs a[href="#personal-message"]').on('shown', function (e) {
|
||||||
|
$('#personal-message input:not(:hidden):first').focus().select();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Prepare the click handler for subbing to a new class to which
|
||||||
|
// you have composed a zephyr.
|
||||||
|
$('#create-it').click(function () {
|
||||||
|
sub_from_home(compose_class_name(), $('#class-dne'));
|
||||||
|
});
|
||||||
|
|
||||||
|
// Prepare the click handler for subbing to an existing class.
|
||||||
|
$('#sub-it').click(function () {
|
||||||
|
sub_from_home(compose_class_name(), $('#class-nosub'));
|
||||||
|
});
|
||||||
|
|
||||||
|
var last_mousewheel = 0;
|
||||||
|
$("#main_div").mousewheel(function () {
|
||||||
|
var time = $.now();
|
||||||
|
if (time - last_mousewheel > 50) {
|
||||||
|
keep_pointer_in_view();
|
||||||
|
last_mousewheel = time;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.button-slide').click(function () {
|
||||||
|
show_compose('class', $("#class"));
|
||||||
|
});
|
||||||
|
});
|
|
@ -4,7 +4,8 @@
|
||||||
/*global $: false, jQuery: false, Handlebars: false,
|
/*global $: false, jQuery: false, Handlebars: false,
|
||||||
zephyr_json: false, initial_pointer: false, email: false,
|
zephyr_json: false, initial_pointer: false, email: false,
|
||||||
class_list: false, instance_list: false, people_list: false,
|
class_list: false, instance_list: false, people_list: false,
|
||||||
have_initial_messages: false, narrowed: false */
|
have_initial_messages: false, narrowed: false,
|
||||||
|
autocomplete_needs_update: true */
|
||||||
|
|
||||||
var loading_spinner;
|
var loading_spinner;
|
||||||
var templates = {};
|
var templates = {};
|
||||||
|
@ -21,67 +22,12 @@ $(function () {
|
||||||
templates.subscription = Handlebars.compile($("#template_subscription").html());
|
templates.subscription = Handlebars.compile($("#template_subscription").html());
|
||||||
});
|
});
|
||||||
|
|
||||||
function register_huddle_onclick(zephyr_row, sender) {
|
|
||||||
zephyr_row.find(".zephyr_sender").click(function (e) {
|
|
||||||
prepare_huddle(sender);
|
|
||||||
// The sender span is inside the messagebox, which also has an
|
|
||||||
// onclick handler. We don't want to trigger the messagebox
|
|
||||||
// handler.
|
|
||||||
e.stopPropagation();
|
|
||||||
|
|
||||||
// switch to the replybox hotkey handler
|
|
||||||
keydown_handler = process_key_in_input;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function register_onclick(zephyr_row, zephyr_id) {
|
|
||||||
zephyr_row.find(".messagebox").click(function (e) {
|
|
||||||
if (!(clicking && mouse_moved)) {
|
|
||||||
// Was a click (not a click-and-drag).
|
|
||||||
select_zephyr_by_id(zephyr_id);
|
|
||||||
respond_to_zephyr();
|
|
||||||
}
|
|
||||||
mouse_moved = false;
|
|
||||||
clicking = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var zephyr_array = [];
|
var zephyr_array = [];
|
||||||
var zephyr_dict = {};
|
var zephyr_dict = {};
|
||||||
var instance_list = [];
|
var instance_list = [];
|
||||||
var status_classes = 'alert-error alert-success alert-info';
|
var status_classes = 'alert-error alert-success alert-info';
|
||||||
|
|
||||||
function report_error(response, xhr, status_box) {
|
|
||||||
if (xhr.status.toString().charAt(0) === "4") {
|
|
||||||
// Only display the error response for 4XX, where we've crafted
|
|
||||||
// a nice response.
|
|
||||||
response += ": " + $.parseJSON(xhr.responseText).msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
status_box.removeClass(status_classes).addClass('alert-error')
|
|
||||||
.text(response).stop(true).fadeTo(0, 1);
|
|
||||||
status_box.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
$('#zephyr-type-tabs a[href="#class-message"]').on('shown', function (e) {
|
|
||||||
$('#class-message input:not(:hidden):first').focus().select();
|
|
||||||
});
|
|
||||||
$('#zephyr-type-tabs a[href="#personal-message"]').on('shown', function (e) {
|
|
||||||
$('#personal-message input:not(:hidden):first').focus().select();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Prepare the click handler for subbing to a new class to which
|
|
||||||
// you have composed a zephyr.
|
|
||||||
$('#create-it').click(function () {
|
|
||||||
sub_from_home(compose_class_name(), $('#class-dne'));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Prepare the click handler for subbing to an existing class.
|
|
||||||
$('#sub-it').click(function () {
|
|
||||||
sub_from_home(compose_class_name(), $('#class-nosub'));
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#sidebar a[href="#subscriptions"]').click(function () {
|
$('#sidebar a[href="#subscriptions"]').click(function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
|
@ -103,15 +49,6 @@ $(function () {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
var last_mousewheel = 0;
|
|
||||||
$("#main_div").mousewheel(function () {
|
|
||||||
var time = $.now();
|
|
||||||
if (time - last_mousewheel > 50) {
|
|
||||||
keep_pointer_in_view();
|
|
||||||
last_mousewheel = time;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
|
@ -432,20 +369,6 @@ function select_zephyr_by_id(zephyr_id) {
|
||||||
select_zephyr(get_zephyr_row(zephyr_id), false);
|
select_zephyr(get_zephyr_row(zephyr_id), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
var clicking = false;
|
|
||||||
var mouse_moved = false;
|
|
||||||
|
|
||||||
function zephyr_mousedown() {
|
|
||||||
mouse_moved = false;
|
|
||||||
clicking = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function zephyr_mousemove() {
|
|
||||||
if (clicking) {
|
|
||||||
mouse_moved = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Called on page load and when we [un]narrow.
|
// Called on page load and when we [un]narrow.
|
||||||
// Forces a call to select_zephyr even if the id has not changed,
|
// Forces a call to select_zephyr even if the id has not changed,
|
||||||
// because the visible table might have.
|
// because the visible table might have.
|
||||||
|
@ -501,65 +424,12 @@ function select_zephyr(next_zephyr, scroll_to) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function go_to_high_water_mark() {
|
|
||||||
select_and_show_by_id(high_water_mark);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We use 'visibility' rather than 'display' and jQuery's show() / hide(),
|
|
||||||
because we want to reserve space for the email address. This avoids
|
|
||||||
things jumping around slightly when the email address is shown. */
|
|
||||||
|
|
||||||
function hide_email() {
|
|
||||||
$('.zephyr_sender_email').addClass('invisible');
|
|
||||||
}
|
|
||||||
|
|
||||||
function show_email(zephyr_id) {
|
|
||||||
hide_email();
|
|
||||||
get_zephyr_row(zephyr_id).find('.zephyr_sender_email').removeClass('invisible');
|
|
||||||
}
|
|
||||||
|
|
||||||
// NB: This just binds to current elements, and won't bind to elements
|
|
||||||
// created after ready() is called.
|
|
||||||
|
|
||||||
$(function () {
|
|
||||||
$('input, textarea, button').focus(function () {
|
|
||||||
keydown_handler = process_key_in_input;
|
|
||||||
});
|
|
||||||
$('input, textarea, button').blur(function () {
|
|
||||||
keydown_handler = process_hotkey;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function prepare_huddle(recipients) {
|
function prepare_huddle(recipients) {
|
||||||
// Used for both personals and huddles.
|
// Used for both personals and huddles.
|
||||||
show_compose('personal', $("#new_personal_zephyr"));
|
show_compose('personal', $("#new_personal_zephyr"));
|
||||||
$("#recipient").val(recipients);
|
$("#recipient").val(recipients);
|
||||||
}
|
}
|
||||||
|
|
||||||
var autocomplete_needs_update = false;
|
|
||||||
|
|
||||||
function update_autocomplete() {
|
|
||||||
class_list.sort();
|
|
||||||
instance_list.sort();
|
|
||||||
people_list.sort();
|
|
||||||
|
|
||||||
// limit number of items so the list doesn't fall off the screen
|
|
||||||
$( "#class" ).typeahead({
|
|
||||||
source: class_list,
|
|
||||||
items: 3,
|
|
||||||
});
|
|
||||||
$( "#instance" ).typeahead({
|
|
||||||
source: instance_list,
|
|
||||||
items: 2,
|
|
||||||
});
|
|
||||||
$( "#recipient" ).typeahead({
|
|
||||||
source: people_list,
|
|
||||||
items: 4,
|
|
||||||
});
|
|
||||||
|
|
||||||
autocomplete_needs_update = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function same_recipient(a, b) {
|
function same_recipient(a, b) {
|
||||||
if ((a === undefined) || (b === undefined))
|
if ((a === undefined) || (b === undefined))
|
||||||
return false;
|
return false;
|
||||||
|
@ -793,10 +663,6 @@ function add_messages(data) {
|
||||||
update_autocomplete();
|
update_autocomplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
function clear_compose_box() {
|
|
||||||
$("#zephyr_compose").find('input[type=text], textarea').val('');
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_updates() {
|
function get_updates() {
|
||||||
console.log(new Date() + ': longpoll started');
|
console.log(new Date() + ': longpoll started');
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -838,12 +704,7 @@ function get_updates() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function () {
|
$(get_updates);
|
||||||
get_updates();
|
|
||||||
$('.button-slide').click(function () {
|
|
||||||
show_compose('class', $("#class"));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function above_view(zephyr) {
|
function above_view(zephyr) {
|
||||||
return zephyr.offset().top < $("#main_div").offset().top;
|
return zephyr.offset().top < $("#main_div").offset().top;
|
||||||
|
|
Loading…
Reference in New Issue