mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-05 00:43:53 +00:00
Add basic autocomplete for @
This commit is contained in:
@@ -85,7 +85,7 @@
|
|||||||
|
|
||||||
<div id="group-reply">
|
<div id="group-reply">
|
||||||
<h3>信息栏</h3>
|
<h3>信息栏</h3>
|
||||||
<form action="" method="post">
|
<form id="group-message-form" action="" method="post">
|
||||||
<textarea name="message" id="message">{{ form.data.message }}</textarea><br />
|
<textarea name="message" id="message">{{ form.data.message }}</textarea><br />
|
||||||
{% for error in form.message.errors %}
|
{% for error in form.message.errors %}
|
||||||
<p class="error">{{ error|escape }}</p>
|
<p class="error">{{ error|escape }}</p>
|
||||||
@@ -191,6 +191,15 @@
|
|||||||
addConfirmTo($('#quit-group'), '确定要退出?');
|
addConfirmTo($('#quit-group'), '确定要退出?');
|
||||||
addConfirmTo($('.cancel-share'), '确定要取消共享该目录?');
|
addConfirmTo($('.cancel-share'), '确定要取消共享该目录?');
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
var member_list = [];
|
||||||
|
{% for member in members %}
|
||||||
|
member_list.push('{{ member.user_name|email2nickname}}');
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
addAtAutocomplete('#message', '#group-message-form', member_list);
|
||||||
|
});
|
||||||
|
|
||||||
$("table tr:gt(0)").hover(
|
$("table tr:gt(0)").hover(
|
||||||
function() {
|
function() {
|
||||||
$(this).find('img').css('cursor', 'pointer').removeClass('vh');
|
$(this).find('img').css('cursor', 'pointer').removeClass('vh');
|
||||||
|
@@ -245,6 +245,7 @@ def render_group_info(request, group_id, form):
|
|||||||
return render_to_response("group/group_info.html", {
|
return render_to_response("group/group_info.html", {
|
||||||
"managers": managers,
|
"managers": managers,
|
||||||
"common_members": common_members,
|
"common_members": common_members,
|
||||||
|
"members": members,
|
||||||
"repos": repos,
|
"repos": repos,
|
||||||
"group_id": group_id,
|
"group_id": group_id,
|
||||||
"group" : group,
|
"group" : group,
|
||||||
|
@@ -943,3 +943,19 @@ p {
|
|||||||
background:#646464;
|
background:#646464;
|
||||||
font-size:14px;
|
font-size:14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* scroll result for autocomplete */
|
||||||
|
.ui-autocomplete {
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y: auto;
|
||||||
|
/* prevent horizontal scrollbar */
|
||||||
|
overflow-x: hidden;
|
||||||
|
/* add padding to account for vertical scrollbar */
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
/* IE 6 doesn't support max-height
|
||||||
|
* we use height instead, but this forces the menu to always be this tall
|
||||||
|
*/
|
||||||
|
* html .ui-autocomplete {
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||||
|
|
||||||
//add op confirm dialog
|
//add op confirm dialog
|
||||||
var Op_url = '';
|
var Op_url = '';
|
||||||
function addConfirmTo(ele, confirm_con) {
|
function addConfirmTo(ele, confirm_con) {
|
||||||
@@ -73,6 +75,53 @@ function addAutocomplete(ele_id, container_id, data) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* func: add autocomplete for `@` to some input ele
|
||||||
|
* @param ele_id: autocomplete is added to this ele(ment), e.g-'#xxx'
|
||||||
|
* @param container_id: id of autocomplete's container, often container of element above
|
||||||
|
* @param data: tip data in array, e.g- ['xx', 'yy']
|
||||||
|
*/
|
||||||
|
function addAtAutocomplete(ele_id, container_id, data) {
|
||||||
|
function split(val) {
|
||||||
|
return val.split(/\ \s*/);
|
||||||
|
}
|
||||||
|
function extractLast(term) {
|
||||||
|
return split(term).pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
$(ele_id)
|
||||||
|
.bind("keydown", function(event) {
|
||||||
|
if (event.keyCode === $.ui.keyCode.TAB &&
|
||||||
|
$(this).data("autocomplete").menu.active) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.autocomplete({
|
||||||
|
appendTo: container_id,
|
||||||
|
autoFocus: true,
|
||||||
|
delay: 100,
|
||||||
|
minLength: 0,
|
||||||
|
source: function(request, response) {
|
||||||
|
var lastTerm = extractLast(request.term);
|
||||||
|
var lastIndex = lastTerm.lastIndexOf('@');
|
||||||
|
if (lastIndex >= 0) {
|
||||||
|
response($.ui.autocomplete.filter(data, lastTerm.substring(lastIndex+1)));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
focus: function() {
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
select: function(event, ui) {
|
||||||
|
var terms = split(this.value);
|
||||||
|
var popTerm = terms.pop();
|
||||||
|
terms.push(popTerm.concat(ui.item.value));
|
||||||
|
terms.push("");
|
||||||
|
this.value = terms.join(" ");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function filesizeformat(bytes, precision)
|
function filesizeformat(bytes, precision)
|
||||||
{
|
{
|
||||||
var kilobyte = 1024;
|
var kilobyte = 1024;
|
||||||
|
@@ -13,7 +13,6 @@ $(function() {
|
|||||||
$("#repo_id").val($(this).attr("data"));
|
$("#repo_id").val($(this).attr("data"));
|
||||||
$("#repo-share-form").modal({appendTo: "#main"});
|
$("#repo-share-form").modal({appendTo: "#main"});
|
||||||
addAutocomplete('#email_or_group', '#repo-share-form', share_list);
|
addAutocomplete('#email_or_group', '#repo-share-form', share_list);
|
||||||
$('.ui-autocomplete').css({'max-height': window.innerHeight - $('.ui-autocomplete-input').offset().top - $('.ui-autocomplete-input').height() - 10, 'overflow': 'auto'});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//check before post
|
//check before post
|
||||||
|
Reference in New Issue
Block a user