1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-15 05:33:38 +00:00

Revert "[select2] upgraded it to v4.0"

This reverts commit 62c3519e85.
This commit is contained in:
lian 2018-08-03 16:08:29 +08:00
parent 20cb4ce86f
commit ee8e4135ea
35 changed files with 4567 additions and 428 deletions

View File

@ -1817,38 +1817,39 @@ button.sf-dropdown-toggle:focus {
text-align:center; text-align:center;
} }
/**** custom select2 ****/ /**** custom select2 ****/
.select2-container .select2-selection { .select2-container-multi .select2-choices {
min-height:30px;
border-color: #ddd; border-color: #ddd;
border-radius: 2px; border-radius: 2px;
background-image: none; /* rm the shadow */
}
.select2-container-multi .select2-choices .select2-search-field {
float:none;
}
.select2-container-multi .select2-choices .select2-search-field input {
padding:2px 2px 2px 5px;
font-family:inherit;
font-size:13px; font-size:13px;
line-height:0; /* to remove the extra height */
} }
.select2-container.select2-container--focus .select2-selection { .select2-container-multi .select2-choices .select2-search-choice {
border-color: #66afe9;
}
.select2-container .select2-selection .select2-selection__rendered {
padding:0;
}
.select2-container .select2-selection .select2-selection__choice {
border:none; border:none;
border-radius:0;
background:#eee; background:#eee;
border-radius:2px;
margin:4px 0 0 5px;
} }
.select2-container--default .select2-search--inline .select2-search__field { .select2-container .avatar,
padding:0 5px; .select2-results .select2-result-label .avatar {
box-sizing:content-box; vertical-align:middle;
margin-right:3px;
} }
.select2-results__option .avatar { .select2-result-label .text {
margin-right:10px;
}
.select2-results__option .text {
display:inline-block; display:inline-block;
width:calc(100% - 42px); width:calc(100% - 42px);
} }
.select2-container .select2-selection__rendered { .select2-results .select2-result-label .avatar {
line-height:1.5; margin-right:10px;
}
.select2-result-label .avatar,
.select2-result-label .text {
vertical-align:middle;
} }
/**** custom magnificPopup ****/ /**** custom magnificPopup ****/
.mfp-bottom-bar { .mfp-bottom-bar {

View File

@ -341,17 +341,7 @@ function HTMLescape(html){
function userInputOPtionsForSelect2(user_search_url) { function userInputOPtionsForSelect2(user_search_url) {
return { return {
tags: [],
// with 'tags', the user can directly enter, not just select
tags: true,
tokenSeparators: [',', ' '],
createTag: function(params) {
var term = $.trim(params.term);
return {
'id': term,
'text': term
};
},
minimumInputLength: 1, // input at least 1 character minimumInputLength: 1, // input at least 1 character
@ -362,10 +352,10 @@ function userInputOPtionsForSelect2(user_search_url) {
cache: true, cache: true,
data: function (params) { data: function (params) {
return { return {
q: params.term q: params
}; };
}, },
processResults: function(data) { results: function (data) {
var user_list = [], users = data['users']; var user_list = [], users = data['users'];
for (var i = 0, len = users.length; i < len; i++) { for (var i = 0, len = users.length; i < len; i++) {
user_list.push({ // 'id' & 'text' are required by the plugin user_list.push({ // 'id' & 'text' are required by the plugin
@ -384,19 +374,25 @@ function userInputOPtionsForSelect2(user_search_url) {
}, },
// format items shown in the drop-down menu // format items shown in the drop-down menu
templateResult: function(item) { formatResult: function(item) {
if (item.avatar_url) { if (item.avatar_url) {
return '<img src="' + item.avatar_url + '" width="32" height="32" class="avatar vam">' + '<span class="text ellipsis vam">' + HTMLescape(item.name) + '<br />' + HTMLescape(item.id) + '</span>'; return '<img src="' + item.avatar_url + '" width="32" height="32" class="avatar">' + '<span class="text ellipsis">' + HTMLescape(item.name) + '<br />' + HTMLescape(item.id) + '</span>';
} else { } else {
return; // if no match, show nothing return; // if no match, show nothing
} }
}, },
// format selected item shown in the input // format selected item shown in the input
templateSelection: function(item) { formatSelection: function(item) {
return HTMLescape(item.name || item.id); // if no name, show the email, i.e., when directly input, show the email return HTMLescape(item.name || item.id); // if no name, show the email, i.e., when directly input, show the email
}, },
createSearchChoice: function(term) {
return {
'id': $.trim(term)
};
},
escapeMarkup: function(m) { return m; } escapeMarkup: function(m) { return m; }
}; };
} }

View File

@ -14,7 +14,6 @@
<link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}"/> <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}"/>
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/jstree_default_theme/style.min.css" /> <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/jstree_default_theme/style.min.css" />
<link rel="stylesheet" type="text/css" href="{% static "css/magnific-popup.css" %}" /> <link rel="stylesheet" type="text/css" href="{% static "css/magnific-popup.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/select2.min.css" %}" />
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/seahub.css?t=1398068110" /> <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/seahub.css?t=1398068110" />
{% block extra_style %}{% endblock %} {% block extra_style %}{% endblock %}
{% if branding_css != '' %}<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}{{ branding_css }}" />{% endif %} {% if branding_css != '' %}<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}{{ branding_css }}" />{% endif %}
@ -153,44 +152,6 @@ function ajaxErrorHandler(xhr, textStatus, errorThrown) {
var error_msg = prepareAjaxErrorMsg(xhr); var error_msg = prepareAjaxErrorMsg(xhr);
feedback(error_msg, 'error'); feedback(error_msg, 'error');
} }
// i18n for select2
var i18n_select2 = {
errorLoading: function() {
return "{% trans "Loading failed" %}";
},
inputTooLong: function(e) { // not used in seahub
var t = e.input.length - e.maximum,
n = "Please delete " + t + " character";
return t != 1 && (n += "s"), n
},
inputTooShort: function(e) {
/*
var t = e.minimum - e.input.length,
n = "Please enter " + t + " or more characters";
return n
*/
return "{% trans "Please enter 1 or more character" %}";
},
loadingMore: function() { // not used in seahub
return "Loading more results…"
},
maximumSelected: function(e) {
/*
var t = "You can only select " + e.maximum + " item";
return e.maximum != 1 && (t += "s"), t
*/
return "{% trans "You cannot select any more choices" %}";
},
noResults: function() {
//return "No results found"
return "{% trans "No matches" %}";
},
searching: function() {
return "{% trans "Searching..." %}";
}
};
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
{% if request.cur_note %} {% if request.cur_note %}
$('#info-bar .close').on('click', function() { $('#info-bar .close').on('click', function() {

View File

@ -13,7 +13,7 @@
{% compress css %} {% compress css %}
<link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}" /> <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}" />
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/jstree_default_theme/style.min.css" /> <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/jstree_default_theme/style.min.css" />
<link rel="stylesheet" type="text/css" href="{% static "css/select2.min.css" %}" /> <link rel="stylesheet" type="text/css" href="{% static "css/select2-3.5.2.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/magnific-popup.css" %}" /> <link rel="stylesheet" type="text/css" href="{% static "css/magnific-popup.css" %}" />
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/seahub.css?t=1398068110" /> <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/seahub.css?t=1398068110" />
{% endcompress %} {% endcompress %}

View File

@ -400,7 +400,7 @@
<input type="text" name="library_name" value="" class="input" id="library-name" /><br /> <input type="text" name="library_name" value="" class="input" id="library-name" /><br />
<label for="library-owner">{% trans "Owner" %}</label> <label for="library-owner">{% trans "Owner" %}</label>
<span class="tip">{% trans "(If left blank, owner will be admin)" %}</span><br /> <span class="tip">{% trans "(If left blank, owner will be admin)" %}</span><br />
<select name="library_owner" id="library-owner"></select><br /> <input type="hidden" name="library_owner" value="" id="library-owner" />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" class="submit" value="{% trans "Submit" %}" /> <input type="submit" class="submit" value="{% trans "Submit" %}" />
</form> </form>
@ -614,7 +614,7 @@
<script type="text/template" id="library-transfer-form-tmpl"> <script type="text/template" id="library-transfer-form-tmpl">
<form method="" action="" id="repo-transfer-form"> <form method="" action="" id="repo-transfer-form">
<h3><%= title %></h3> <h3><%= title %></h3>
<select name="email"></select><br /> <input type="hidden" name="email" /><br />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" /> <input type="submit" value="{% trans "Submit" %}" />
</form> </form>
@ -685,7 +685,7 @@
<input type="text" name="group_name" value="" class="input" id="group-name" /><br /> <input type="text" name="group_name" value="" class="input" id="group-name" /><br />
<label for="group-owner">{% trans "Owner" %}</label> <label for="group-owner">{% trans "Owner" %}</label>
<span class="tip">{% trans "(If left blank, owner will be admin)" %}</span><br /> <span class="tip">{% trans "(If left blank, owner will be admin)" %}</span><br />
<select name="group_owner" id="group-owner"></select><br /> <input type="hidden" name="group_owner" value="" id="group-owner" />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" class="submit" value="{% trans "Submit" %}" /> <input type="submit" class="submit" value="{% trans "Submit" %}" />
</form> </form>
@ -718,7 +718,7 @@
<script type="text/template" id="group-transfer-form-tmpl"> <script type="text/template" id="group-transfer-form-tmpl">
<form method="" action="" id="group-transfer-form"> <form method="" action="" id="group-transfer-form">
<h3><%= title %></h3> <h3><%= title %></h3>
<select name="email"></select><br /> <input type="hidden" name="email" /><br />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" /> <input type="submit" value="{% trans "Submit" %}" />
</form> </form>
@ -787,7 +787,7 @@
<div id="share-tabs" class="nav-con-tabs"> <div id="share-tabs" class="nav-con-tabs">
<ul class="nav-con-tabs-nav"> <ul class="nav-con-tabs-nav">
<li class="tab"><a href="#dir-user-share" class="a">{% trans "Share to user" %}</a></li> <li class="tab"><a href="#dir-user-share" class="a">{% trans "Share to user" %}</a></li>
<li class="tab" id="dir-group-share-tab"><a href="#dir-group-share" class="a">{% trans "Share to group" %}</a></li> <li class="tab"><a href="#dir-group-share" class="a">{% trans "Share to group" %}</a></li>
</ul> </ul>
<div class="nav-con-tabs-content"> <div class="nav-con-tabs-content">
@ -804,7 +804,7 @@
<tbody> <tbody>
<tr id="add-dir-user-share-item"> <tr id="add-dir-user-share-item">
<td> <td>
<select name="emails"></select> <input type="hidden" name="emails" class="w100" />
</td> </td>
<td> <td>
<select name="permission" class="share-permission-select w100"> <select name="permission" class="share-permission-select w100">
@ -834,7 +834,7 @@
<tbody> <tbody>
<tr id="add-dir-group-share-item"> <tr id="add-dir-group-share-item">
<td> <td>
<select name="groups"></select> <input type="groups" name="groups" class="w100" />
</td> </td>
<td> <td>
<select name="permission" class="share-permission-select w100"> <select name="permission" class="share-permission-select w100">
@ -881,7 +881,7 @@
<form id="add-group-member-form" action="" method="post" class="hide">{% csrf_token %} <form id="add-group-member-form" action="" method="post" class="hide">{% csrf_token %}
<h3 id="dialogTitle">{% trans "Add Member" %}</h3> <h3 id="dialogTitle">{% trans "Add Member" %}</h3>
<label for="email">{% trans "Email" %}</label><br /> <label for="email">{% trans "Email" %}</label><br />
<select name="email" id="email"></select><br /> <input type="text" name="email" value="" id="email" /><br />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" class="submit" value="{% trans "Submit" %}" /> <input type="submit" class="submit" value="{% trans "Submit" %}" />
</form> </form>

View File

@ -79,7 +79,7 @@
<script type="text/template" id="add-lib-label-form-tmpl"> <script type="text/template" id="add-lib-label-form-tmpl">
<form action="" method=""> <form action="" method="">
<h3 id="dialogTitle">{% trans "Label current state" %}</h3> <h3 id="dialogTitle">{% trans "Label current state" %}</h3>
<select name="labels"></select> <input type="hidden" name="labels" class="w100" />
<p class="error hide"></p> <p class="error hide"></p>
<button type="submit" class="submit">{% trans "Submit" %}</button> <button type="submit" class="submit">{% trans "Submit" %}</button>
</form> </form>
@ -1092,7 +1092,7 @@
<span class="loading-icon"></span> <span class="loading-icon"></span>
<ul class="cur-tags hide ovhd"></ul> <ul class="cur-tags hide ovhd"></ul>
<span class="sf2-icon-edit tags-edit-icon op-icon hide" title="{% trans "Edit" %}"></span> <span class="sf2-icon-edit tags-edit-icon op-icon hide" title="{% trans "Edit" %}"></span>
<select class="tags-input hide"></select> <input type="hidden" class="w100 hide tags-input" />
<button class="submit tags-submit-btn hide">{% trans "Submit" %}</button> <button class="submit tags-submit-btn hide">{% trans "Submit" %}</button>
<p class="error hide"></p> <p class="error hide"></p>
</td> </td>
@ -1138,7 +1138,7 @@
<span class="loading-icon"></span> <span class="loading-icon"></span>
<ul class="cur-tags hide ovhd"></ul> <ul class="cur-tags hide ovhd"></ul>
<span class="sf2-icon-edit tags-edit-icon op-icon hide" title="{% trans "Edit" %}"></span> <span class="sf2-icon-edit tags-edit-icon op-icon hide" title="{% trans "Edit" %}"></span>
<select class="tags-input hide"></select> <input type="hidden" class="w100 hide tags-input" />
<button class="submit tags-submit-btn hide">{% trans "Submit" %}</button> <button class="submit tags-submit-btn hide">{% trans "Submit" %}</button>
<p class="error hide"></p> <p class="error hide"></p>
</td> </td>
@ -1163,8 +1163,8 @@
<% } %> <% } %>
<% if (enable_dir_private_share) { %> {# dir private share #} <% if (enable_dir_private_share) { %> {# dir private share #}
<li class="tab" id="dir-user-share-tab"><a href="#dir-user-share" class="a">{% trans "Share to user" %}</a></li> <li class="tab"><a href="#dir-user-share" class="a">{% trans "Share to user" %}</a></li>
<li class="tab" id="dir-group-share-tab"><a href="#dir-group-share" class="a">{% trans "Share to group" %}</a></li> <li class="tab"><a href="#dir-group-share" class="a">{% trans "Share to group" %}</a></li>
<% } %> <% } %>
<% } %> <% } %>
</ul> </ul>
@ -1308,7 +1308,7 @@
<tbody> <tbody>
<tr id="add-dir-user-share-item"> <tr id="add-dir-user-share-item">
<td> <td>
<select name="emails"></select> <input type="hidden" name="emails" class="w100" />
</td> </td>
<td> <td>
<select name="permission" class="share-permission-select w100"> <select name="permission" class="share-permission-select w100">
@ -1344,7 +1344,7 @@
<tbody> <tbody>
<tr id="add-dir-group-share-item"> <tr id="add-dir-group-share-item">
<td> <td>
<select name="groups"></select> <select name="groups" class="w100" multiple="multiple"></select>
</td> </td>
<td> <td>
<select name="permission" class="share-permission-select w100"> <select name="permission" class="share-permission-select w100">
@ -1685,7 +1685,7 @@
<div id="folder-perm-tabs" class="nav-con-tabs"> <div id="folder-perm-tabs" class="nav-con-tabs">
<ul class="nav-con-tabs-nav"> <ul class="nav-con-tabs-nav">
<li class="tab"><a href="#user-folder-perm" class="a">{% trans "User Permission" %}</a></li> <li class="tab"><a href="#user-folder-perm" class="a">{% trans "User Permission" %}</a></li>
<li class="tab" id="group-folder-perm-tab"><a href="#group-folder-perm" class="a">{% trans "Group Permission" %}</a></li> <li class="tab"><a href="#group-folder-perm" class="a">{% trans "Group Permission" %}</a></li>
</ul> </ul>
<div class="nav-con-tabs-content"> <div class="nav-con-tabs-content">
<div id="user-folder-perm" class="tabs-panel"> <div id="user-folder-perm" class="tabs-panel">
@ -1700,7 +1700,7 @@
<tbody> <tbody>
<tr id="add-user-folder-perm"> <tr id="add-user-folder-perm">
<td> <td>
<select name="email"></select> <input type="hidden" name="email" class="w100" />
</td> </td>
<td> <td>
<select name="permission" class="folder-perm-select w100"> <select name="permission" class="folder-perm-select w100">
@ -1726,7 +1726,7 @@
<tbody> <tbody>
<tr id="add-group-folder-perm"> <tr id="add-group-folder-perm">
<td> <td>
<select name="group"></select> <select name="group" class="w100" multiple="multiple"></select>
</td> </td>
<td> <td>
<select name="permission" class="folder-perm-select w100"> <select name="permission" class="folder-perm-select w100">
@ -2085,7 +2085,7 @@
<script type="text/template" id="group-transfer-form-tmpl"> <script type="text/template" id="group-transfer-form-tmpl">
<form method="post" action=""> <form method="post" action="">
<h3 id="dialogTitle">{% trans "Transfer Group To" %}</h3> <h3 id="dialogTitle">{% trans "Transfer Group To" %}</h3>
<select name="email"></select><br /> <input type="hidden" name="email" /><br />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" /> <input type="submit" value="{% trans "Submit" %}" />
</form> </form>
@ -2103,7 +2103,7 @@
<script type="text/template" id="group-manage-members-tmpl"> <script type="text/template" id="group-manage-members-tmpl">
<h3 id="dialogTitle"><%= title %></h3> <h3 id="dialogTitle"><%= title %></h3>
<form method="post" action="" id="add-group-members-form"> <form method="post" action="" id="add-group-members-form">
<select name="user_name"></select> <input type="hidden" name="user_name" />
<input type="submit" value="{% trans "Add" %}" class="submit" /> <input type="submit" value="{% trans "Add" %}" class="submit" />
</form> </form>
{% if enable_guest_invitation and user.permissions.can_invite_guest %} {% if enable_guest_invitation and user.permissions.can_invite_guest %}
@ -2257,7 +2257,7 @@
<script type="text/template" id="repo-transfer-form-tmpl"> <script type="text/template" id="repo-transfer-form-tmpl">
<form method="post" action="" id="repo-transfer-form"> <form method="post" action="" id="repo-transfer-form">
<h3 id="dialogTitle"><%= title %></h3> <h3 id="dialogTitle"><%= title %></h3>
<select name="email"></select><br /> <input type="hidden" name="email" /><br />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" /> <input type="submit" value="{% trans "Submit" %}" />
</form> </form>
@ -2268,7 +2268,7 @@
<div id="repo-folder-perm" class="nav-con-tabs js-tabs"> <div id="repo-folder-perm" class="nav-con-tabs js-tabs">
<ul class="nav-con-tabs-nav"> <ul class="nav-con-tabs-nav">
<li class="tab"><a href="#js-repo-user-folder-perm" class="a">{% trans "User Permission" %}</a></li> <li class="tab"><a href="#js-repo-user-folder-perm" class="a">{% trans "User Permission" %}</a></li>
<li class="tab" id="repo-group-folder-perm-tab"><a href="#js-repo-group-folder-perm" class="a">{% trans "Group Permission" %}</a></li> <li class="tab"><a href="#js-repo-group-folder-perm" class="a">{% trans "Group Permission" %}</a></li>
</ul> </ul>
<div class="nav-con-tabs-content"> <div class="nav-con-tabs-content">
@ -2285,9 +2285,7 @@
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> <td><input name="emails" type="hidden" class="w100" /></td>
<select name="emails"></select>
</td>
<td> <td>
<div class="pos-rel"> <div class="pos-rel">
<input type="text" name="folder_path" class="repo-folder-perm-folder-path" /> <input type="text" name="folder_path" class="repo-folder-perm-folder-path" />
@ -2332,7 +2330,7 @@
<tbody> <tbody>
<tr> <tr>
<td> <td>
<select name="groups"></select> <select name="groups" class="w100" multiple="multiple"></select>
</td> </td>
<td> <td>
<div class="pos-rel"> <div class="pos-rel">

View File

@ -6,6 +6,8 @@
{% block sub_title %}{% trans "History" %} - {% endblock %} {% block sub_title %}{% trans "History" %} - {% endblock %}
{% block extra_style %} {% block extra_style %}
<link rel="stylesheet" type="text/css" href="{% static "css/select2-3.5.2.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/select2.custom.css" %}" />
<style type="text/css"> <style type="text/css">
.go-back { top:-3px; } .go-back { top:-3px; }
</style> </style>
@ -105,7 +107,7 @@
{% if show_label and user_perm == 'rw' %} {% if show_label and user_perm == 'rw' %}
<form id="label-edit-form" action="" class="hide"> <form id="label-edit-form" action="" class="hide">
<h3 id="dialogTitle">{% trans "Edit labels" %}</h3> <h3 id="dialogTitle">{% trans "Edit labels" %}</h3>
<select name="labels"></select><br /> <input type="hidden" name="labels" /><br />
<p class="error hide"></p> <p class="error hide"></p>
<button type="submit" class="submit">{% trans "Submit" %}</button> <button type="submit" class="submit">{% trans "Submit" %}</button>
</form> </form>
@ -114,7 +116,7 @@
{% endblock %} {% endblock %}
{% block extra_script %} {% block extra_script %}
<script type="text/javascript" src="{% static "scripts/lib/select2.min.js" %}"></script> <script type="text/javascript" src="{% static "scripts/lib/select2-3.5.2.js" %}"></script>
<script type="text/javascript"> <script type="text/javascript">
{% include 'snippets/list_commit_detail.html' %} {% include 'snippets/list_commit_detail.html' %}
$('.view-snapshot').each(function() { $('.view-snapshot').each(function() {
@ -129,20 +131,19 @@ $('.label-edit-icon').on('click', function() {
var label = $(item).text(); var label = $(item).text();
s2_tags.push({ s2_tags.push({
'id': label, 'id': label,
'text': label, 'text': label
'selected': true
}); });
}); });
var $form = $('#label-edit-form'); var $form = $('#label-edit-form');
$form.data('tr', $tr).modal({focus: false}); $form.data('tr', $tr).modal({focus: false});
$('#simplemodal-container').css({'width':'auto', 'height':'auto'}); $('#simplemodal-container').css({'width':'auto', 'height':'auto'});
$('[name="labels"]').select2({ $('[name="labels"]')
language: i18n_select2, .select2({
multiple: true,
width: '280px', width: '280px',
tags: s2_tags tags: []
}); })
.select2('data', s2_tags);
}); });
$('#label-edit-form').on('submit', function() { $('#label-edit-form').on('submit', function() {
var $form = $(this); var $form = $(this);
@ -150,7 +151,7 @@ $('#label-edit-form').on('submit', function() {
var $error = $('.error', $form); var $error = $('.error', $form);
var $submit = $('[type="submit"]', $form); var $submit = $('[type="submit"]', $form);
var $tr = $form.data('tr'); var $tr = $form.data('tr');
var tags = $input.val(); var tags = $input.select2('val');
disable($submit); disable($submit);
$.ajax({ $.ajax({

View File

@ -2,8 +2,9 @@
<form id="repo-transfer-form" method="" action="" class="hide">{% csrf_token %} <form id="repo-transfer-form" method="" action="" class="hide">{% csrf_token %}
<h3>{% trans "Transfer Library"%}</h3> <h3>{% trans "Transfer Library"%}</h3>
<p class="detail">{% trans "Transfer %(lib_name)s to:"%}</p> <p class="detail">{% trans "Transfer %(lib_name)s to:"%}</p>
<select name="email"></select><br /> <input type="hidden" name="email" /><br />
<input type="hidden" name="repo_id" value="" /> <input type="hidden" name="repo_id" value="" />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" value="{% trans "Submit" %}" class="submit" /> <input type="submit" value="{% trans "Submit" %}" class="submit" />
<button class="simplemodal-close">{% trans "Cancel" %}</button>
</form> </form>

View File

@ -7,18 +7,21 @@ $('.repo-transfer-btn').on('click', function(){
repo_name = btn_ct.attr('data-name'), repo_name = btn_ct.attr('data-name'),
form = $('#repo-transfer-form'); form = $('#repo-transfer-form');
form.modal({focus: false}); form.modal({appendTo:'#main'});
$('#simplemodal-container').css({'width':'auto', 'height':'auto'}); $('#simplemodal-container').css({'width':'auto', 'height':'auto'});
var detail = $('.detail', form); var detail = $('.detail', form);
detail.html(detail.html().replace('%(lib_name)s', '<span class="op-target">' + HTMLescape(repo_name) + '</span>')); detail.html(detail.html().replace('%(lib_name)s', '<span class="op-target">' + HTMLescape(repo_name) + '</span>'));
$('[name="email"]', form).select2($.extend({ $('[name="email"]', form).select2($.extend({
language: i18n_select2,
multiple: true, // to keep the same UI with the others
width: '268px', width: '268px',
maximumSelectionLength: 1, maximumSelectionSize: 1,
placeholder: "{% trans "Search user or enter email and press Enter" %}" placeholder: "{% trans "Search user or enter email and press Enter" %}",
formatInputTooShort: "{% trans "Please enter 1 or more character" %}",
formatNoMatches: "{% trans "No matches" %}",
formatSearching: "{% trans "Searching..." %}",
formatAjaxError: "{% trans "Loading failed" %}",
formatSelectionTooBig: "{% trans "You cannot select any more choices" %}"
}, userInputOPtionsForSelect2('{% url 'search-user' %}'))); }, userInputOPtionsForSelect2('{% url 'search-user' %}')));
$('input[name="repo_id"]', form).val(repo_id); $('input[name="repo_id"]', form).val(repo_id);
@ -30,17 +33,17 @@ $('#repo-transfer-form').on('submit', function() {
var form = $(this), var form = $(this),
form_id = form.attr('id'), form_id = form.attr('id'),
repo_id = $('[name="repo_id"]', form).val(), repo_id = $('[name="repo_id"]', form).val(),
email = $('[name="email"]', form).val(); // [] email = $.trim(form.children('[name="email"]').val());
var $tr = form.data('tr'); var $tr = form.data('tr');
if (!email.length) { if (!email) {
return false; return false;
} }
$.ajax({ $.ajax({
url: '{{SITE_ROOT}}api/v2.1/admin/libraries/' + encodeURIComponent(repo_id) + '/', url: '{{SITE_ROOT}}api/v2.1/admin/libraries/' + encodeURIComponent(repo_id) + '/',
data: {'owner': email},
type: 'PUT', type: 'PUT',
data: {'owner': email[0]},
cache: false, cache: false,
beforeSend: prepareCSRFToken, beforeSend: prepareCSRFToken,
dataType: 'json', dataType: 'json',

View File

@ -2,6 +2,11 @@
{% load i18n seahub_tags %} {% load i18n seahub_tags %}
{% load staticfiles %} {% load staticfiles %}
{% block extra_style %}
<link rel="stylesheet" type="text/css" href="{% static "css/select2-3.5.2.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/select2.custom.css" %}" />
{% endblock %}
{% block right_panel %} {% block right_panel %}
<div class="tabnav"> <div class="tabnav">
<ul class="tabnav-tabs"> <ul class="tabnav-tabs">
@ -16,7 +21,7 @@
<form id="add-member-form" action="" method="" class="hide"> <form id="add-member-form" action="" method="" class="hide">
<h3>{% trans "Add Members" %}</h3> <h3>{% trans "Add Members" %}</h3>
<label>{% trans "Email" %}</label><br /> <label>{% trans "Email" %}</label><br />
<select name="emails"></select><br /> <input type="hidden" name="emails" /><br />
<p class="error hide"></p> <p class="error hide"></p>
<button type="submit" class="submit">{% trans "Submit" %}</button> <button type="submit" class="submit">{% trans "Submit" %}</button>
</form> </form>
@ -66,7 +71,7 @@
{% endblock %} {% endblock %}
{% block extra_script %}{{ block.super }} {% block extra_script %}{{ block.super }}
<script type="text/javascript" src= "{% static "scripts/lib/select2.min.js" %}"></script> <script type="text/javascript" src= "{% static "scripts/lib/select2-3.5.2.js" %}"></script>
<script type="text/javascript"> <script type="text/javascript">
addConfirmTo($('.js-toggle-admin'), { addConfirmTo($('.js-toggle-admin'), {
@ -134,17 +139,19 @@ $('#add-member-btn').on('click', function(){
$('#simplemodal-container').css({'width':'auto', 'height':'auto'}); $('#simplemodal-container').css({'width':'auto', 'height':'auto'});
$('[name="emails"]', $form).select2($.extend({ $('[name="emails"]', $form).select2($.extend({
language: i18n_select2,
multiple: true,
width: '280px', width: '280px',
placeholder: "{% trans "Search users or enter emails and press Enter" %}" placeholder: "{% trans "Search user or enter email and press Enter" %}",
formatInputTooShort: "{% trans "Please enter 1 or more character" %}",
formatNoMatches: "{% trans "No matches" %}",
formatSearching: "{% trans "Searching..." %}",
formatAjaxError: "{% trans "Loading failed" %}"
}, userInputOPtionsForSelect2('{% url 'search-user' %}'))); }, userInputOPtionsForSelect2('{% url 'search-user' %}')));
}); });
$('#add-member-form').on('submit', function(){ $('#add-member-form').on('submit', function(){
var $form = $(this); var $form = $(this);
var $error = $('.error', $form); var $error = $('.error', $form);
var $submit = $('[type="submit"]', $form); var $submit = $('[type="submit"]', $form);
var emails = $('[name="emails"]', $form).val(); var emails = $('[name="emails"]', $form).select2('val');
if (!emails.length) { if (!emails.length) {
$error.html("{% trans "It is required." %}").show(); $error.html("{% trans "It is required." %}").show();

View File

@ -13,7 +13,7 @@
{% compress css %} {% compress css %}
<link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}"/> <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap.min.css" %}"/>
<link rel="stylesheet" type="text/css" href="{% static "css/select2.min.css" %}"/> <link rel="stylesheet" type="text/css" href="{% static "css/select2-3.5.2.css" %}"/>
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/seahub.css?t=1398068110" /> <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/seahub.css?t=1398068110" />
<link rel="stylesheet" type="text/css" href="{% static "css/magnific-popup.css" %}" /> <link rel="stylesheet" type="text/css" href="{% static "css/magnific-popup.css" %}" />
{% endcompress %} {% endcompress %}

View File

@ -1,6 +1,13 @@
{% extends "sysadmin/base.html" %} {% extends "sysadmin/base.html" %}
{% load i18n avatar_tags seahub_tags staticfiles %} {% load i18n avatar_tags seahub_tags staticfiles %}
{% block extra_style %}
<link rel="stylesheet" type="text/css" href="{% static "css/select2-3.5.2.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/select2.custom.css" %}" />
{% endblock %}
{% block right_panel %} {% block right_panel %}
<p class="path-bar"> <p class="path-bar">
@ -329,7 +336,7 @@
{% block extra_script %} {% block extra_script %}
<script type="text/javascript" src="{% static "scripts/lib/jquery-ui.min.js" %}"></script> {# for tabs #} <script type="text/javascript" src="{% static "scripts/lib/jquery-ui.min.js" %}"></script> {# for tabs #}
<script type="text/javascript" src="{% static "scripts/lib/select2.min.js" %}"></script> <script type="text/javascript" src="{% static "scripts/lib/select2-3.5.2.js" %}"></script>
<script type="text/javascript"> <script type="text/javascript">
$('#tabs').tabs({cookie:{expires:1}}); $('#tabs').tabs({cookie:{expires:1}});

View File

@ -0,0 +1,704 @@
/*
Version: 3.5.2 Timestamp: Sat Nov 1 14:43:36 EDT 2014
*/
.select2-container {
margin: 0;
position: relative;
display: inline-block;
/* inline-block for ie7 */
zoom: 1;
*display: inline;
vertical-align: middle;
}
.select2-container,
.select2-drop,
.select2-search,
.select2-search input {
/*
Force border-box so that % widths fit the parent
container without overlap because of margin/padding.
More Info : http://www.quirksmode.org/css/box.html
*/
-webkit-box-sizing: border-box; /* webkit */
-moz-box-sizing: border-box; /* firefox */
box-sizing: border-box; /* css3 */
}
.select2-container .select2-choice {
display: block;
height: 26px;
padding: 0 0 0 8px;
overflow: hidden;
position: relative;
border: 1px solid #aaa;
white-space: nowrap;
line-height: 26px;
color: #444;
text-decoration: none;
border-radius: 4px;
background-clip: padding-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #fff;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
background-image: linear-gradient(to top, #eee 0%, #fff 50%);
}
html[dir="rtl"] .select2-container .select2-choice {
padding: 0 8px 0 0;
}
.select2-container.select2-drop-above .select2-choice {
border-bottom-color: #aaa;
border-radius: 0 0 4px 4px;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);
}
.select2-container.select2-allowclear .select2-choice .select2-chosen {
margin-right: 42px;
}
.select2-container .select2-choice > .select2-chosen {
margin-right: 26px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
float: none;
width: auto;
}
html[dir="rtl"] .select2-container .select2-choice > .select2-chosen {
margin-left: 26px;
margin-right: 0;
}
.select2-container .select2-choice abbr {
display: none;
width: 12px;
height: 12px;
position: absolute;
right: 24px;
top: 8px;
font-size: 1px;
text-decoration: none;
border: 0;
background: url('select2.png') right top no-repeat;
cursor: pointer;
outline: 0;
}
.select2-container.select2-allowclear .select2-choice abbr {
display: inline-block;
}
.select2-container .select2-choice abbr:hover {
background-position: right -11px;
cursor: pointer;
}
.select2-drop-mask {
border: 0;
margin: 0;
padding: 0;
position: fixed;
left: 0;
top: 0;
min-height: 100%;
min-width: 100%;
height: auto;
width: auto;
opacity: 0;
z-index: 9998;
/* styles required for IE to work */
background-color: #fff;
filter: alpha(opacity=0);
}
.select2-drop {
width: 100%;
margin-top: -1px;
position: absolute;
z-index: 9999;
top: 100%;
background: #fff;
color: #000;
border: 1px solid #aaa;
border-top: 0;
border-radius: 0 0 4px 4px;
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
}
.select2-drop.select2-drop-above {
margin-top: 1px;
border-top: 1px solid #aaa;
border-bottom: 0;
border-radius: 4px 4px 0 0;
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
}
.select2-drop-active {
border: 1px solid #5897fb;
border-top: none;
}
.select2-drop.select2-drop-above.select2-drop-active {
border-top: 1px solid #5897fb;
}
.select2-drop-auto-width {
border-top: 1px solid #aaa;
width: auto;
}
.select2-drop-auto-width .select2-search {
padding-top: 4px;
}
.select2-container .select2-choice .select2-arrow {
display: inline-block;
width: 18px;
height: 100%;
position: absolute;
right: 0;
top: 0;
border-left: 1px solid #aaa;
border-radius: 0 4px 4px 0;
background-clip: padding-box;
background: #ccc;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
background-image: linear-gradient(to top, #ccc 0%, #eee 60%);
}
html[dir="rtl"] .select2-container .select2-choice .select2-arrow {
left: 0;
right: auto;
border-left: none;
border-right: 1px solid #aaa;
border-radius: 4px 0 0 4px;
}
.select2-container .select2-choice .select2-arrow b {
display: block;
width: 100%;
height: 100%;
background: url('select2.png') no-repeat 0 1px;
}
html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
background-position: 2px 1px;
}
.select2-search {
display: inline-block;
width: 100%;
min-height: 26px;
margin: 0;
padding-left: 4px;
padding-right: 4px;
position: relative;
z-index: 10000;
white-space: nowrap;
}
.select2-search input {
width: 100%;
height: auto !important;
min-height: 26px;
padding: 4px 20px 4px 5px;
margin: 0;
outline: 0;
font-family: sans-serif;
font-size: 1em;
border: 1px solid #aaa;
border-radius: 0;
-webkit-box-shadow: none;
box-shadow: none;
background: #fff url('select2.png') no-repeat 100% -22px;
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
html[dir="rtl"] .select2-search input {
padding: 4px 5px 4px 20px;
background: #fff url('select2.png') no-repeat -37px -22px;
background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
.select2-drop.select2-drop-above .select2-search input {
margin-top: 4px;
}
.select2-search input.select2-active {
background: #fff url('select2-spinner.gif') no-repeat 100%;
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
.select2-container-active .select2-choice,
.select2-container-active .select2-choices {
border: 1px solid #5897fb;
outline: none;
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
}
.select2-dropdown-open .select2-choice {
border-bottom-color: transparent;
-webkit-box-shadow: 0 1px 0 #fff inset;
box-shadow: 0 1px 0 #fff inset;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
background-color: #eee;
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
background-image: linear-gradient(to top, #fff 0%, #eee 50%);
}
.select2-dropdown-open.select2-drop-above .select2-choice,
.select2-dropdown-open.select2-drop-above .select2-choices {
border: 1px solid #5897fb;
border-top-color: transparent;
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);
}
.select2-dropdown-open .select2-choice .select2-arrow {
background: transparent;
border-left: none;
filter: none;
}
html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {
border-right: none;
}
.select2-dropdown-open .select2-choice .select2-arrow b {
background-position: -18px 1px;
}
html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b {
background-position: -16px 1px;
}
.select2-hidden-accessible {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
/* results */
.select2-results {
max-height: 200px;
padding: 0 0 0 4px;
margin: 4px 4px 4px 0;
position: relative;
overflow-x: hidden;
overflow-y: auto;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
html[dir="rtl"] .select2-results {
padding: 0 4px 0 0;
margin: 4px 0 4px 4px;
}
.select2-results ul.select2-result-sub {
margin: 0;
padding-left: 0;
}
.select2-results li {
list-style: none;
display: list-item;
background-image: none;
}
.select2-results li.select2-result-with-children > .select2-result-label {
font-weight: bold;
}
.select2-results .select2-result-label {
padding: 3px 7px 4px;
margin: 0;
cursor: pointer;
min-height: 1em;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.select2-results-dept-1 .select2-result-label { padding-left: 20px }
.select2-results-dept-2 .select2-result-label { padding-left: 40px }
.select2-results-dept-3 .select2-result-label { padding-left: 60px }
.select2-results-dept-4 .select2-result-label { padding-left: 80px }
.select2-results-dept-5 .select2-result-label { padding-left: 100px }
.select2-results-dept-6 .select2-result-label { padding-left: 110px }
.select2-results-dept-7 .select2-result-label { padding-left: 120px }
.select2-results .select2-highlighted {
background: #3875d7;
color: #fff;
}
.select2-results li em {
background: #feffde;
font-style: normal;
}
.select2-results .select2-highlighted em {
background: transparent;
}
.select2-results .select2-highlighted ul {
background: #fff;
color: #000;
}
.select2-results .select2-no-results,
.select2-results .select2-searching,
.select2-results .select2-ajax-error,
.select2-results .select2-selection-limit {
background: #f4f4f4;
display: list-item;
padding-left: 5px;
}
/*
disabled look for disabled choices in the results dropdown
*/
.select2-results .select2-disabled.select2-highlighted {
color: #666;
background: #f4f4f4;
display: list-item;
cursor: default;
}
.select2-results .select2-disabled {
background: #f4f4f4;
display: list-item;
cursor: default;
}
.select2-results .select2-selected {
display: none;
}
.select2-more-results.select2-active {
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
}
.select2-results .select2-ajax-error {
background: rgba(255, 50, 50, .2);
}
.select2-more-results {
background: #f4f4f4;
display: list-item;
}
/* disabled styles */
.select2-container.select2-container-disabled .select2-choice {
background-color: #f4f4f4;
background-image: none;
border: 1px solid #ddd;
cursor: default;
}
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
background-color: #f4f4f4;
background-image: none;
border-left: 0;
}
.select2-container.select2-container-disabled .select2-choice abbr {
display: none;
}
/* multiselect */
.select2-container-multi .select2-choices {
height: auto !important;
height: 1%;
margin: 0;
padding: 0 5px 0 0;
position: relative;
border: 1px solid #aaa;
cursor: text;
overflow: hidden;
background-color: #fff;
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);
}
html[dir="rtl"] .select2-container-multi .select2-choices {
padding: 0 0 0 5px;
}
.select2-locked {
padding: 3px 5px 3px 5px !important;
}
.select2-container-multi .select2-choices {
min-height: 26px;
}
.select2-container-multi.select2-container-active .select2-choices {
border: 1px solid #5897fb;
outline: none;
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
}
.select2-container-multi .select2-choices li {
float: left;
list-style: none;
}
html[dir="rtl"] .select2-container-multi .select2-choices li
{
float: right;
}
.select2-container-multi .select2-choices .select2-search-field {
margin: 0;
padding: 0;
white-space: nowrap;
}
.select2-container-multi .select2-choices .select2-search-field input {
padding: 5px;
margin: 1px 0;
font-family: sans-serif;
font-size: 100%;
color: #666;
outline: 0;
border: 0;
-webkit-box-shadow: none;
box-shadow: none;
background: transparent !important;
}
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
}
.select2-default {
color: #999 !important;
}
.select2-container-multi .select2-choices .select2-search-choice {
padding: 3px 5px 3px 18px;
margin: 3px 0 3px 5px;
position: relative;
line-height: 13px;
color: #333;
cursor: default;
border: 1px solid #aaaaaa;
border-radius: 3px;
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
background-clip: padding-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-color: #e4e4e4;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
background-image: linear-gradient(to bottom, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
}
html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
{
margin: 3px 5px 3px 0;
padding: 3px 18px 3px 5px;
}
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
cursor: default;
}
.select2-container-multi .select2-choices .select2-search-choice-focus {
background: #d4d4d4;
}
.select2-search-choice-close {
display: block;
width: 12px;
height: 13px;
position: absolute;
right: 3px;
top: 4px;
font-size: 1px;
outline: none;
background: url('select2.png') right top no-repeat;
}
html[dir="rtl"] .select2-search-choice-close {
right: auto;
left: 3px;
}
.select2-container-multi .select2-search-choice-close {
left: 3px;
}
html[dir="rtl"] .select2-container-multi .select2-search-choice-close {
left: auto;
right: 2px;
}
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
background-position: right -11px;
}
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
background-position: right -11px;
}
/* disabled styles */
.select2-container-multi.select2-container-disabled .select2-choices {
background-color: #f4f4f4;
background-image: none;
border: 1px solid #ddd;
cursor: default;
}
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
padding: 3px 5px 3px 5px;
border: 1px solid #ddd;
background-image: none;
background-color: #f4f4f4;
}
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
background: none;
}
/* end multiselect */
.select2-result-selectable .select2-match,
.select2-result-unselectable .select2-match {
text-decoration: underline;
}
.select2-offscreen, .select2-offscreen:focus {
clip: rect(0 0 0 0) !important;
width: 1px !important;
height: 1px !important;
border: 0 !important;
margin: 0 !important;
padding: 0 !important;
overflow: hidden !important;
position: absolute !important;
outline: 0 !important;
left: 0px !important;
top: 0px !important;
}
.select2-display-none {
display: none;
}
.select2-measure-scrollbar {
position: absolute;
top: -10000px;
left: -10000px;
width: 100px;
height: 100px;
overflow: scroll;
}
/* Retina-ize icons */
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) {
.select2-search input,
.select2-search-choice-close,
.select2-container .select2-choice abbr,
.select2-container .select2-choice .select2-arrow b {
background-image: url('select2x2.png') !important;
background-repeat: no-repeat !important;
background-size: 60px 40px !important;
}
.select2-search input {
background-position: 100% -21px !important;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,14 @@
/* custom select2 */
.select2-container-multi .select2-choices {
border-color: #ddd;
border-radius: 2px;
background-image: none; /* rm the shadow */
}
.select2-container-multi .select2-choices .select2-search-field input {
padding:2px 2px 2px 5px;
}
.select2-container-multi .select2-choices .select2-search-choice {
border:none;
border-radius:0;
background:#eee;
}

File diff suppressed because one or more lines are too long

BIN
static/css/select2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

BIN
static/css/select2x2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

View File

@ -99,8 +99,20 @@ define([
if (collection.perm_type == 'user') { if (collection.perm_type == 'user') {
$('[name="emails"]', $panel).select2($.extend( $('[name="emails"]', $panel).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
'width': '100%' placeholder: gettext("Search user or enter email and press Enter") // to override 'placeholder' returned by `Common.conta...`
})); }));
} else {
var groups = app.pageOptions.joined_groups_exclude_address_book || [];
var g_opts = '';
for (var i = 0, len = groups.length; i < len; i++) {
g_opts += '<option value="' + groups[i].id + '" data-index="' + i + '">' + groups[i].name + '</option>';
}
$('[name="groups"]', $panel).html(g_opts).select2({
placeholder: gettext("Select a group"),
maximumSelectionSize: 1,
formatSelectionTooBig: gettext("You can only select 1 item"),
escapeMarkup: function(m) { return m; }
});
} }
// show existing items // show existing items
@ -135,8 +147,6 @@ define([
}, },
events: { events: {
'click #repo-group-folder-perm-tab': 'clickGroupPermTab',
'click .js-add-folder': 'showFolderSelectForm', 'click .js-add-folder': 'showFolderSelectForm',
'click .js-folder-select-submit': 'addFolder', 'click .js-folder-select-submit': 'addFolder',
'click .js-folder-select-cancel': 'cancelFolderSelect', 'click .js-folder-select-cancel': 'cancelFolderSelect',
@ -145,25 +155,6 @@ define([
'click .js-group-perm-add-submit': 'addPerm' 'click .js-group-perm-add-submit': 'addPerm'
}, },
clickGroupPermTab: function() {
var groups = app.pageOptions.joined_groups_exclude_address_book || [];
var group_list = [];
for (var i = 0, len = groups.length; i < len; i++) {
group_list.push({
id: groups[i].id,
text: groups[i].name
});
}
$('[name="groups"]', this.$groupPermPanel).select2({
language: Common.i18nForSelect2(),
width: '100%',
multiple: true,
data: group_list,
placeholder: gettext("Select groups"),
escapeMarkup: function(m) { return m; }
});
},
showFolderSelectForm: function(e) { showFolderSelectForm: function(e) {
var $icon = $(e.currentTarget); var $icon = $(e.currentTarget);
var $permContent = $icon.closest('.js-folder-perm-content').slideUp(); var $permContent = $icon.closest('.js-folder-perm-content').slideUp();
@ -225,36 +216,29 @@ define([
if ($submit.hasClass('js-user-perm-add-submit')) { if ($submit.hasClass('js-user-perm-add-submit')) {
for_user = true; for_user = true;
$panel = this.$userPermPanel; $panel = this.$userPermPanel;
$email_or_group = $('[name="emails"]', $panel); url = Common.getUrl({name: 'repo_user_folder_perm', repo_id: this.repo_id});
url = Common.getUrl({ var $email_or_group = $('[name="emails"]', $panel);
name: 'repo_user_folder_perm', var email = $email_or_group.val();
repo_id: this.repo_id if (!email) {
});
var emails = $email_or_group.val(); // []
if (!emails.length) {
return false; return false;
} }
post_data = {'user_email': emails}; post_data = {'user_email': email.split(',')};
} else { } else {
for_user = false; for_user = false;
$panel = this.$groupPermPanel; $panel = this.$groupPermPanel;
$email_or_group = $('[name="groups"]', $panel); url = Common.getUrl({name: 'repo_group_folder_perm', repo_id: this.repo_id});
url = Common.getUrl({ var $email_or_group = $('[name="groups"]', $panel);
name: 'repo_group_folder_perm', var group_val = $email_or_group.val().join(',');
repo_id: this.repo_id if (!group_val) {
});
var groups = $email_or_group.val();
if (!groups.length) {
return false; return false;
} }
post_data = {'group_id': groups}; post_data = {'group_id': group_val.split(',')};
} }
var $path = $('[name="folder_path"]', $panel); var $path = $('[name="folder_path"]', $panel);
@ -266,10 +250,7 @@ define([
return false; return false;
} }
$.extend(post_data, { $.extend(post_data, {'folder_path': path, 'permission': perm});
'folder_path': path,
'permission': perm
});
var $error = $('.error', $panel); var $error = $('.error', $panel);
Common.disableButton($submit); Common.disableButton($submit);
@ -286,16 +267,12 @@ define([
$(data.success).each(function(index, item) { $(data.success).each(function(index, item) {
var encoded_path = Common.encodePath(item.folder_path); var encoded_path = Common.encodePath(item.folder_path);
var perm_item = new ItemView({ var perm_item = new ItemView({
item_data: $.extend(item, { item_data: $.extend(item, {'for_user': for_user, 'show_folder_path': true, 'encoded_path': encoded_path})
'for_user': for_user,
'show_folder_path': true,
'encoded_path': encoded_path
})
}); });
$path.closest('tr').after(perm_item.el); $('[name="folder_path"]', $panel).closest('tr').after(perm_item.el);
}); });
$email_or_group.val(null).trigger('change'); $email_or_group.select2('val', '');
$path.val(''); $path.val('');
$('option', $perm).prop('selected', false); $('option', $perm).prop('selected', false);
$('[value="rw"]', $perm).prop('selected', true); $('[value="rw"]', $perm).prop('selected', true);

View File

@ -70,8 +70,7 @@ define([
str += '<li class="cur-tag fleft">' + Common.HTMLescape(tags[i].name) + '</li>'; str += '<li class="cur-tag fleft">' + Common.HTMLescape(tags[i].name) + '</li>';
s2_tags.push({ s2_tags.push({
'id': tags[i].name, 'id': tags[i].name,
'text': tags[i].name, 'text': tags[i].name
'selected': true
}); });
} }
this.s2_tags = s2_tags; this.s2_tags = s2_tags;
@ -84,19 +83,18 @@ define([
this.$('.cur-tags, .tags-edit-icon').hide(); this.$('.cur-tags, .tags-edit-icon').hide();
this.$('.tags-submit-btn').show(); this.$('.tags-submit-btn').show();
var $input = this.$('.tags-input'); var $input = this.$('input.tags-input');
// Select2 has been initialized var $s2_container = this.$('.tags-input.select2-container');
if ($input.hasClass("select2-hidden-accessible")) { if ($s2_container.length) {
this.$('.select2-container').show(); $input.select2('data', this.s2_tags);
$input.val(this.s2_tags2).trigger('change'); // s2_tags2 $s2_container.show();
} else { } else {
$input.show() $input.show()
.select2({ .select2({
language: Common.i18nForSelect2(), tags: [],
width: '100%', formatNoMatches: gettext("No matches")
multiple: true, })
tags: this.s2_tags .select2('data', this.s2_tags);
});
} }
return false; return false;
}, },
@ -104,7 +102,7 @@ define([
submitTags: function() { submitTags: function() {
var _this = this; var _this = this;
var $input = this.$('.tags-input'); var $input = this.$('.tags-input');
var tags = $input.val(); var tags = $input.select2('val');
var $submit = this.$('.tags-submit-btn'); var $submit = this.$('.tags-submit-btn');
var $error = this.$('.tags-container .error'); var $error = this.$('.tags-container .error');
var error_msg; var error_msg;
@ -141,14 +139,15 @@ define([
var s2_tags = []; var s2_tags = [];
for (var i = 0, len = tags.length; i < len; i++) { for (var i = 0, len = tags.length; i < len; i++) {
str += '<li class="cur-tag fleft">' + Common.HTMLescape(tags[i].name) + '</li>'; str += '<li class="cur-tag fleft">' + Common.HTMLescape(tags[i].name) + '</li>';
s2_tags.push(tags[i].name); s2_tags.push({
'id': tags[i].name,
'text': tags[i].name
});
} }
_this.s2_tags2 = s2_tags; // s2_tags2 _this.s2_tags = s2_tags;
$input.hide(); _this.$('.tags-input').hide();
$submit.hide(); $submit.hide();
_this.$('.select2-container').hide();
_this.$('.cur-tags').html(str).show(); _this.$('.cur-tags').html(str).show();
_this.$('.tags-edit-icon').show(); _this.$('.tags-edit-icon').show();
}, },

View File

@ -120,37 +120,18 @@ define([
'group_id': this.group_id 'group_id': this.group_id
}); });
} }
$('[name="email"]', this.$add_user_perm).select2($.extend({ $('[name="email"]', this.$add_user_perm).select2(
'width': '100%' Common.contactInputOptionsForSelect2({'url': url}));
}, Common.contactInputOptionsForSelect2({'url': url})));
},
events: {
'click #group-folder-perm-tab': 'clickGroupFolderPermTab',
'click #add-user-folder-perm .submit': 'addFolderPerm',
'click #add-group-folder-perm .submit': 'addFolderPerm'
},
clickGroupFolderPermTab: function() {
var _this = this;
// use select2 to 'group' input in 'add group perm' // use select2 to 'group' input in 'add group perm'
var groups; var groups;
var prepareGroupSelector = function(groups) { var prepareGroupSelector = function(groups) {
var group_list = []; var g_opts = '';
for (var i = 0, len = groups.length; i < len; i++) { for (var i = 0, len = groups.length; i < len; i++) {
group_list.push({ g_opts += '<option value="' + groups[i].id + '" data-index="' + i + '">' + groups[i].name + '</option>';
id: groups[i].id,
text: groups[i].name
});
} }
$('[name="group"]', _this.$add_group_perm).select2({ $('[name="group"]', _this.$add_group_perm).html(g_opts).select2({
language: Common.i18nForSelect2(),
width: '100%',
multiple: true,
placeholder: gettext("Select groups"), placeholder: gettext("Select groups"),
data: group_list,
escapeMarkup: function(m) { return m; } escapeMarkup: function(m) { return m; }
}); });
}; };
@ -178,12 +159,16 @@ define([
} }
}, },
events: {
'click #add-user-folder-perm .submit': 'addFolderPerm',
'click #add-group-folder-perm .submit': 'addFolderPerm'
},
addFolderPerm: function(e) { addFolderPerm: function(e) {
var $form, $input, $error, url, perm, post_data, extended_data; var $form, $error, url, post_data, extended_data;
if ($(e.currentTarget).closest('tr').attr('id') == 'add-user-folder-perm') { if ($(e.currentTarget).closest('tr').attr('id') == 'add-user-folder-perm') {
$form = this.$add_user_perm; $form = this.$add_user_perm;
$input = $('[name="email"]', $form);
$error = $('#user-folder-perm .error'); $error = $('#user-folder-perm .error');
url = Common.getUrl({ url = Common.getUrl({
@ -192,17 +177,17 @@ define([
'repo_user_folder_perm', 'repo_user_folder_perm',
repo_id: this.repo_id repo_id: this.repo_id
}); });
var emails_group_ids_input = $('[name="email"]', $form),
var emails = $input.val(); // [] emails = emails_group_ids_input.val(),
perm = $('[name="permission"]', $form).val(); perm = $('[name="permission"]', $form).val();
if (!emails.length || !perm) { if (!emails || !perm) {
return false; return false;
} }
post_data = { post_data = {
'folder_path': this.path, 'folder_path': this.path,
'user_email': emails, 'user_email': emails.split(','),
'permission': perm 'permission': perm
}; };
@ -213,7 +198,6 @@ define([
} else { } else {
$form = this.$add_group_perm; $form = this.$add_group_perm;
$input = $('[name="group"]', $form);
$error = $('#group-folder-perm .error'); $error = $('#group-folder-perm .error');
url = Common.getUrl({ url = Common.getUrl({
@ -223,16 +207,17 @@ define([
repo_id: this.repo_id repo_id: this.repo_id
}); });
var group_ids = $input.val(); var emails_group_ids_input = $('[name="group"]', $form),
group_ids = emails_group_ids_input.val().join(','),
perm = $('[name="permission"]', $form).val(); perm = $('[name="permission"]', $form).val();
if (!group_ids.length || !perm) { if (!group_ids || !perm) {
return false; return false;
} }
post_data = { post_data = {
'folder_path': this.path, 'folder_path': this.path,
'group_id': group_ids, 'group_id': group_ids.split(','),
'permission': perm 'permission': perm
}; };
@ -262,7 +247,7 @@ define([
$form.closest('tr').after(perm_item.el); $form.closest('tr').after(perm_item.el);
}); });
$input.val(null).trigger('change'); emails_group_ids_input.select2("val", "");
$error.addClass('hide'); $error.addClass('hide');
} }
if (data.failed.length > 0) { if (data.failed.length > 0) {

View File

@ -130,7 +130,7 @@ define([
validate: true, validate: true,
prepend: true, prepend: true,
success: function() { success: function() {
$input.val(null).trigger('change'); $input.select2('val', '');
}, },
error: function(collection, response, options) { error: function(collection, response, options) {
var error_msg = Common.prepareAjaxErrorMsg(response); var error_msg = Common.prepareAjaxErrorMsg(response);
@ -148,7 +148,7 @@ define([
beforeSend: Common.prepareCSRFToken, beforeSend: Common.prepareCSRFToken,
data: {'emails': input_val}, data: {'emails': input_val},
success: function(data) { // data: {success, failed} success: function(data) { // data: {success, failed}
$input.val(null).trigger('change'); $input.select2('val', '');
if (data.success.length > 0) { if (data.success.length > 0) {
_this.collection.add(data.success, {prepend: true}); _this.collection.add(data.success, {prepend: true});

View File

@ -146,13 +146,14 @@ define([
$('[name="email"]', $form).select2($.extend( $('[name="email"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '268px', width: '268px',
maximumSelectionLength: 1, maximumSelectionSize: 1,
placeholder: gettext("Search user or enter email and press Enter") placeholder: gettext("Search user or enter email and press Enter"), // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig: gettext("You cannot select any more choices")
})); }));
$form.on('submit', function() { $form.on('submit', function() {
var email = $('[name="email"]', $(this)).val(); // [] var email = $.trim($('[name="email"]', $(this)).val());
if (!email.length) { if (!email) {
return false; return false;
} }
if (email == _this.groupView.group.owner) { if (email == _this.groupView.group.owner) {
@ -170,7 +171,7 @@ define([
dataType: 'json', dataType: 'json',
beforeSend: Common.prepareCSRFToken, beforeSend: Common.prepareCSRFToken,
data: { data: {
'owner': email[0] 'owner': email
}, },
success: function(data) { success: function(data) {
_this.groupView.group = data; _this.groupView.group = data;

View File

@ -243,13 +243,14 @@ define([
$('[name="email"]', $form).select2($.extend( $('[name="email"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '280px', width: '280px',
maximumSelectionLength: 1, maximumSelectionSize: 1,
placeholder: gettext("Search user or enter email and press Enter") placeholder: gettext("Search user or enter email and press Enter"), // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig: gettext("You cannot select any more choices")
})); }));
$form.on('submit', function() { $form.on('submit', function() {
var email = $('[name="email"]', $(this)).val(); // [] var email = $.trim($('[name="email"]', $(this)).val());
if (!email.length) { if (!email) {
return false; return false;
} }
if (email == _this.model.get('owner')) { if (email == _this.model.get('owner')) {
@ -267,7 +268,7 @@ define([
dataType: 'json', dataType: 'json',
beforeSend: Common.prepareCSRFToken, beforeSend: Common.prepareCSRFToken,
data: { data: {
'owner': email[0] 'owner': email
}, },
success: function() { success: function() {
$.modal.close(); $.modal.close();
@ -387,12 +388,7 @@ define([
}); });
} }
$('#simplemodal-data').html($form); $('#simplemodal-data').html($form);
$('[name="labels"]', $form).select2({ $('[name="labels"]', $form).select2({tags: s2_data});
language: Common.i18nForSelect2(),
width: '100%',
multiple: true,
tags: s2_data
});
}, },
error: function(xhr) { error: function(xhr) {
var error_msg = Common.prepareAjaxErrorMsg(xhr); var error_msg = Common.prepareAjaxErrorMsg(xhr);
@ -402,11 +398,11 @@ define([
$form.on('submit', function() { $form.on('submit', function() {
var $input = $('[name="labels"]', $form); var $input = $('[name="labels"]', $form);
var labels = $input.val(); var labels = $input.select2('val');
var $error = $('.error', $form); var $error = $('.error', $form);
var $submit = $('[type="submit"]', $form); var $submit = $('[type="submit"]', $form);
if (!labels.length) { if (labels.length == 0) {
$error.html(gettext("It is required.")).show(); $error.html(gettext("It is required.")).show();
return false; return false;
} }

View File

@ -53,7 +53,7 @@ define([
}).modal({focus:false}); }).modal({focus:false});
} }
this.$("#share-tabs").tabs({}); this.$("#share-tabs").tabs();
if (!this.repo_encrypted && app.pageOptions.can_generate_share_link) { if (!this.repo_encrypted && app.pageOptions.can_generate_share_link) {
this.downloadLinkPanelInit(); this.downloadLinkPanelInit();
@ -106,9 +106,6 @@ define([
}, },
events: { events: {
'click #dir-user-share-tab': 'clickUserShareTab',
'click #dir-group-share-tab': 'clickGroupShareTab',
'click [type="checkbox"]': 'clickCheckbox', 'click [type="checkbox"]': 'clickCheckbox',
'click .shared-link': 'clickToSelect', 'click .shared-link': 'clickToSelect',
@ -140,40 +137,6 @@ define([
'click #add-dir-group-share-item .submit': 'dirGroupShare' 'click #add-dir-group-share-item .submit': 'dirGroupShare'
}, },
// To make select2 input get the right width
clickUserShareTab: function() {
var $add_item = $('#add-dir-user-share-item');
$('[name="emails"]', $add_item).select2($.extend({
'width': '100%'
}, Common.contactInputOptionsForSelect2()));
},
clickGroupShareTab: function() {
var $add_item = $('#add-dir-group-share-item');
var prepareGroupsSelector = function(groups) {
var group_list = [];
for (var i = 0, len = groups.length; i < len; i++) {
group_list.push({
id: groups[i].id,
text: groups[i].name
});
}
$('[name="groups"]', $add_item).select2({
language: Common.i18nForSelect2(),
width: '100%',
multiple: true,
placeholder: gettext("Select groups"),
data: group_list,
escapeMarkup: function(m) { return m; }
});
};
if (this.parent_group_id) { // group owned repo
this.prepareAvailableGroupsForGroupOwnedRepo({'callback': prepareGroupsSelector});
} else {
this.prepareAvailableGroups({'callback': prepareGroupsSelector});
}
},
clickCheckbox: function(e) { clickCheckbox: function(e) {
var $el = $(e.currentTarget); var $el = $(e.currentTarget);
// for link options such as 'password', 'expire' // for link options such as 'password', 'expire'
@ -676,6 +639,9 @@ define([
}); });
$add_item.after(new_item.el); $add_item.after(new_item.el);
}); });
$('[name="emails"]', $add_item).select2($.extend({
//width: '292px' // the container will copy class 'w100' from the original element to get width
},Common.contactInputOptionsForSelect2()));
$table.removeClass('hide'); $table.removeClass('hide');
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
@ -818,7 +784,23 @@ define([
}); });
$add_item.after(new_item.el); $add_item.after(new_item.el);
}); });
var prepareGroupsSelector = function(groups) {
var g_opts = '';
for (var i = 0, len = groups.length; i < len; i++) {
g_opts += '<option value="' + groups[i].id + '" data-index="' + i + '">' + groups[i].name + '</option>';
}
$('[name="groups"]', $add_item).html(g_opts).select2({
placeholder: gettext("Select groups"),
escapeMarkup: function(m) { return m; }
});
$table.removeClass('hide'); $table.removeClass('hide');
};
if (_this.parent_group_id) { // group owned repo
_this.prepareAvailableGroupsForGroupOwnedRepo({'callback': prepareGroupsSelector});
} else {
_this.prepareAvailableGroups({'callback': prepareGroupsSelector});
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
var err_msg = Common.prepareAjaxErrorMsg(xhr); var err_msg = Common.prepareAjaxErrorMsg(xhr);
@ -840,9 +822,9 @@ define([
var $panel = $('#dir-user-share'); var $panel = $('#dir-user-share');
var $form = this.$('#add-dir-user-share-item'); // pseudo form var $form = this.$('#add-dir-user-share-item'); // pseudo form
var $emails_input = $('[name="emails"]', $form), var emails_input = $('[name="emails"]', $form),
emails = $emails_input.val(); // [] emails = emails_input.val(); // string
if (!emails.length) { if (!emails) {
return false; return false;
} }
@ -864,7 +846,7 @@ define([
data = { data = {
'permission': perm, 'permission': perm,
'path': path, 'path': path,
'username': emails 'username': emails.split(',')
}; };
} else { } else {
url = Common.getUrl({ url = Common.getUrl({
@ -874,7 +856,7 @@ define([
method = 'PUT'; method = 'PUT';
data = { data = {
'share_type': 'user', 'share_type': 'user',
'username': emails, 'username': emails.split(','),
'permission': perm 'permission': perm
}; };
} }
@ -898,7 +880,7 @@ define([
}); });
$add_item.after(new_item.el); $add_item.after(new_item.el);
}); });
$emails_input.val(null).trigger('change'); // clear the selected items emails_input.select2("val", "");
$('option', $perm).prop('selected', false); $('option', $perm).prop('selected', false);
$('[value="rw"]', $perm).prop('selected', true); $('[value="rw"]', $perm).prop('selected', true);
$error.addClass('hide'); $error.addClass('hide');
@ -928,9 +910,9 @@ define([
var $form = this.$('#add-dir-group-share-item'); // pseudo form var $form = this.$('#add-dir-group-share-item'); // pseudo form
var $groups_input = $('[name="groups"]', $form), var $groups_input = $('[name="groups"]', $form),
groups = $groups_input.val(); // [] or [group.id] groups = $groups_input.val(); // null or [group.id]
if (!groups.length) { if (!groups) {
return false; return false;
} }
@ -985,7 +967,7 @@ define([
}); });
$add_item.after(new_item.el); $add_item.after(new_item.el);
}); });
$groups_input.val(null).trigger('change'); // clear the selected items $groups_input.select2("val", "");
$('option', $perm).prop('selected', false); $('option', $perm).prop('selected', false);
$('[value="rw"]', $perm).prop('selected', true); $('[value="rw"]', $perm).prop('selected', true);
$error.addClass('hide'); $error.addClass('hide');

View File

@ -43,7 +43,7 @@ require.config({
'js.cookie': 'lib/js.cookie', 'js.cookie': 'lib/js.cookie',
simplemodal: 'lib/jquery.simplemodal', // TODO: it uses deprecated methods in jquery 3 simplemodal: 'lib/jquery.simplemodal', // TODO: it uses deprecated methods in jquery 3
jstree: 'lib/jstree.min', // TODO: it uses deprecated methods in jquery 3 jstree: 'lib/jstree.min', // TODO: it uses deprecated methods in jquery 3
select2: 'lib/select2.min', select2: 'lib/select2-3.5.2', // TODO
moment: 'lib/moment-with-locales.min', moment: 'lib/moment-with-locales.min',
marked: 'lib/marked.min', marked: 'lib/marked.min',
@ -659,44 +659,6 @@ define([
} }
}, },
i18nForSelect2: function() {
return {
errorLoading: function() {
return gettext("Loading failed");
},
inputTooLong: function(e) { // not used in seahub
var t = e.input.length - e.maximum,
n = "Please delete " + t + " character";
return t != 1 && (n += "s"), n
},
inputTooShort: function(e) {
/*
var t = e.minimum - e.input.length,
n = "Please enter " + t + " or more characters";
return n
*/
return gettext("Please enter 1 or more character");
},
loadingMore: function() { // not used in seahub
return "Loading more results…"
},
maximumSelected: function(e) {
/*
var t = "You can only select " + e.maximum + " item";
return e.maximum != 1 && (t += "s"), t
*/
return gettext("You cannot select any more choices");
},
noResults: function() {
//return "No results found"
return gettext("No matches");
},
searching: function() {
return gettext("Searching...");
}
};
},
contactInputOptionsForSelect2: function(options) { contactInputOptionsForSelect2: function(options) {
var _this = this; var _this = this;
@ -708,24 +670,19 @@ define([
} }
return { return {
language: _this.i18nForSelect2(),
multiple: true,
placeholder: gettext("Search users or enter emails and press Enter"), placeholder: gettext("Search users or enter emails and press Enter"),
// with 'tags', the user can directly enter, not just select // with 'tags', the user can directly enter, not just select
tags: true, // tags need `<input type="hidden" />`, not `<select>`
tokenSeparators: [',', ' '], tags: [],
createTag: function(params) {
var term = $.trim(params.term);
return {
'id': term,
'text': term
};
},
minimumInputLength: 1, // input at least 1 character minimumInputLength: 1, // input at least 1 character
formatInputTooShort: gettext("Please enter 1 or more character"),
formatNoMatches: gettext("No matches"),
formatSearching: gettext("Searching..."),
formatAjaxError: gettext("Loading failed"),
ajax: { ajax: {
url: url, url: url,
dataType: 'json', dataType: 'json',
@ -733,10 +690,10 @@ define([
cache: true, cache: true,
data: function(params) { data: function(params) {
return { return {
q: params.term q: params
}; };
}, },
processResults: function(data) { results: function(data) {
var user_list = [], users = data['users'] || data; var user_list = [], users = data['users'] || data;
for (var i = 0, len = users.length; i < len; i++) { for (var i = 0, len = users.length; i < len; i++) {
@ -758,19 +715,25 @@ define([
}, },
// format items shown in the drop-down menu // format items shown in the drop-down menu
templateResult: function(item) { formatResult: function(item) {
if (item.avatar_url) { if (item.avatar_url) {
return '<img src="' + item.avatar_url + '" width="32" height="32" class="avatar vam"><span class="text ellipsis vam">' + _this.HTMLescape(item.name) + '<br />' + _this.HTMLescape(item.contact_email) + '</span>'; return '<img src="' + item.avatar_url + '" width="32" height="32" class="avatar"><span class="text ellipsis">' + _this.HTMLescape(item.name) + '<br />' + _this.HTMLescape(item.contact_email) + '</span>';
} else { } else {
return; // if no match, show nothing return; // if no match, show nothing
} }
}, },
// format selected item shown in the input // format selected item shown in the input
templateSelection: function(item) { formatSelection: function(item) {
return _this.HTMLescape(item.name || item.id); // if no name, show the email, i.e., when directly input, show the email return _this.HTMLescape(item.name || item.id); // if no name, show the email, i.e., when directly input, show the email
}, },
createSearchChoice: function(term) {
return {
'id': $.trim(term)
};
},
escapeMarkup: function(m) { return m; } escapeMarkup: function(m) { return m; }
} }
}, },
@ -778,13 +741,19 @@ define([
groupInputOptionsForSelect2: function() { groupInputOptionsForSelect2: function() {
var _this = this; var _this = this;
return { return {
language: _this.i18nForSelect2(),
multiple: true,
placeholder: gettext("Search groups"), placeholder: gettext("Search groups"),
// with 'tags', the user can directly enter, not just select
// tags need `<input type="hidden" />`, not `<select>`
tags: [],
minimumInputLength: 1, // input at least 1 character minimumInputLength: 1, // input at least 1 character
formatInputTooShort: gettext("Please enter 1 or more character"),
formatNoMatches: gettext("No matches"),
formatSearching: gettext("Searching..."),
formatAjaxError: gettext("Loading failed"),
ajax: { ajax: {
url: _this.getUrl({name: 'search_group'}), url: _this.getUrl({name: 'search_group'}),
dataType: 'json', dataType: 'json',
@ -792,10 +761,10 @@ define([
cache: true, cache: true,
data: function(params) { data: function(params) {
return { return {
q: params.term q: params
}; };
}, },
processResults: function(data) { results: function(data) {
var group_list = [], groups = data; var group_list = [], groups = data;
for (var i = 0, len = groups.length; i < len; i++) { for (var i = 0, len = groups.length; i < len; i++) {
@ -813,7 +782,7 @@ define([
}, },
// format items shown in the drop-down menu // format items shown in the drop-down menu
templateResult: function(item) { formatResult: function(item) {
if (item.name) { if (item.name) {
return '<span class="text ellipsis">' + _this.HTMLescape(item.name) + '</span>'; return '<span class="text ellipsis">' + _this.HTMLescape(item.name) + '</span>';
} else { } else {
@ -822,7 +791,7 @@ define([
}, },
// format selected item shown in the input // format selected item shown in the input
templateSelection: function(item) { formatSelection: function(item) {
return _this.HTMLescape(item.name); return _this.HTMLescape(item.name);
}, },

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -155,15 +155,17 @@ define([
$('[name="email"]', $form).select2($.extend( $('[name="email"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '280px' width: '275px',
containerCss: {'margin-bottom': '5px'},
placeholder: gettext("Search users or enter emails and press Enter")
})); }));
$form.submit(function() { $form.submit(function() {
var emails = $('[name="email"]', $form).val(); var emails = $.trim($('[name="email"]', $form).val());
var $error = $('.error', $form); var $error = $('.error', $form);
var $submitBtn = $('[type="submit"]', $form); var $submitBtn = $('[type="submit"]', $form);
if (!emails.length) { if (!emails) {
$error.html(gettext("It is required.")).show(); $error.html(gettext("It is required.")).show();
return false; return false;
} }
@ -178,7 +180,7 @@ define([
}), }),
type: 'POST', type: 'POST',
dataType: 'json', dataType: 'json',
data: {'email': emails}, data: {'email': emails.split(',')},
traditional: true, traditional: true,
beforeSend: Common.prepareCSRFToken, beforeSend: Common.prepareCSRFToken,
success: function(data) { success: function(data) {

View File

@ -36,16 +36,18 @@ define([
$('[name="email"]', $form).select2($.extend( $('[name="email"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '280px' width: '275px',
containerCss: {'margin-bottom': '5px'},
placeholder: gettext("Search users or enter emails and press Enter")
})); }));
$form.on('submit', function() { $form.on('submit', function() {
var group_id = _this.groupMemberCollection.group_id; var group_id = _this.groupMemberCollection.group_id;
var emails = $('[name="email"]', $form).val(); var emails = $.trim($('[name="email"]', $form).val());
var $error = $('.error', $form); var $error = $('.error', $form);
var $submitBtn = $('[type="submit"]', $form); var $submitBtn = $('[type="submit"]', $form);
if (!emails.length) { if (!emails) {
$error.html(gettext("It is required.")).show(); $error.html(gettext("It is required.")).show();
return false; return false;
} }
@ -62,7 +64,7 @@ define([
dataType: 'json', dataType: 'json',
beforeSend: Common.prepareCSRFToken, beforeSend: Common.prepareCSRFToken,
traditional: true, traditional: true,
data: {'email': emails}, data: {'email': emails.split(',')},
success: function(data) { success: function(data) {
if (data.success.length > 0) { if (data.success.length > 0) {
_this.groupMemberCollection.add(data.success, {prepend: true}); _this.groupMemberCollection.add(data.success, {prepend: true});

View File

@ -70,15 +70,16 @@ define([
$('[name="email"]', $form).select2($.extend( $('[name="email"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '300px', width: '300px',
maximumSelectionLength: 1, maximumSelectionSize: 1,
placeholder: gettext("Search user or enter email and press Enter") placeholder: gettext("Search user or enter email and press Enter"), // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig: gettext("You cannot select any more choices")
})); }));
$form.on('submit', function() { $form.on('submit', function() {
var email = $('[name="email"]', $(this)).val(); // [] var email = $.trim($('[name="email"]', $(this)).val());
var $submitBtn = $('[type="submit"]', $(this)); var $submitBtn = $('[type="submit"]', $(this));
if (!email.length) { if (!email) {
return false; return false;
} }
if (email == cur_owner) { if (email == cur_owner) {
@ -92,7 +93,7 @@ define([
dataType: 'json', dataType: 'json',
beforeSend: Common.prepareCSRFToken, beforeSend: Common.prepareCSRFToken,
data: { data: {
'new_owner': email[0] 'new_owner': email
}, },
success: function() { success: function() {
$.modal.close(); $.modal.close();

View File

@ -58,18 +58,20 @@ define([
_this = this; _this = this;
$form.modal(); $form.modal();
$('#simplemodal-container').css({'width':'auto', 'height':'auto'}); $('#simplemodal-container').css({'height':'auto'});
$('[name="group_owner"]', $form).select2($.extend( $('[name="group_owner"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '100%', width: '268px',
maximumSelectionLength: 1, containerCss: {'margin-bottom': '5px'},
placeholder: gettext("Search user or enter email and press Enter") maximumSelectionSize: 1,
placeholder: gettext("Search user or enter email and press Enter"), // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig: gettext("You cannot select any more choices")
})); }));
$form.on('submit', function() { $form.on('submit', function() {
var group_name = $.trim($('[name="group_name"]', $form).val()); var group_name = $.trim($('[name="group_name"]', $form).val());
var group_owner = $('[name="group_owner"]', $form).val(); var group_owner = $.trim($('[name="group_owner"]', $form).val());
var $error = $('.error', $form); var $error = $('.error', $form);
var $submitBtn = $('[type="submit"]', $form); var $submitBtn = $('[type="submit"]', $form);
@ -81,10 +83,7 @@ define([
$error.hide(); $error.hide();
Common.disableButton($submitBtn); Common.disableButton($submitBtn);
groups.create({ groups.create({'group_name': group_name, 'group_owner': group_owner}, {
'group_name': group_name,
'group_owner': group_owner[0]
}, {
prepend: true, prepend: true,
wait: true, wait: true,
success: function() { success: function() {

View File

@ -103,19 +103,19 @@ define([
$('[name="email"]', $form).select2($.extend( $('[name="email"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '300px', width: '300px',
maximumSelectionLength: 1, maximumSelectionSize: 1,
placeholder: gettext("Search user or enter email and press Enter") placeholder: gettext("Search user or enter email and press Enter"), // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig: gettext("You cannot select any more choices")
})); }));
$form.on('submit', function() { $form.on('submit', function() {
var email = $('[name="email"]', $(this)).val(); // [] var email = $.trim($('[name="email"]', $(this)).val());
if (!email.length) { if (!email) {
return false; return false;
} }
if (email == _this.model.get('owner')) { if (email == _this.model.get('owner')) {
return false; return false;
} }
email = email[0];
var url = Common.getUrl({'name': 'admin-library','repo_id': _this.model.get('id')}); var url = Common.getUrl({'name': 'admin-library','repo_id': _this.model.get('id')});
var $submitBtn = $('[type="submit"]', $(this)); var $submitBtn = $('[type="submit"]', $(this));

View File

@ -52,14 +52,16 @@ define([
$('[name="library_owner"]', $form).select2($.extend( $('[name="library_owner"]', $form).select2($.extend(
Common.contactInputOptionsForSelect2(), { Common.contactInputOptionsForSelect2(), {
width: '100%', width: '268px',
maximumSelectionLength: 1, containerCss: {'margin-bottom': '5px'},
placeholder: gettext("Search user or enter email and press Enter") maximumSelectionSize: 1,
placeholder: gettext("Search user or enter email and press Enter"), // to override 'placeholder' returned by `Common.conta...`
formatSelectionTooBig: gettext("You cannot select any more choices")
})); }));
$form.on('submit', function() { $form.on('submit', function() {
var library_name = $.trim($('[name="library_name"]', $form).val()); var library_name = $.trim($('[name="library_name"]', $form).val());
var library_owner = $('[name="library_owner"]', $form).val(); var library_owner = $.trim($('[name="library_owner"]', $form).val());
var $error = $('.error', $form); var $error = $('.error', $form);
var $submitBtn = $('[type="submit"]', $form); var $submitBtn = $('[type="submit"]', $form);
@ -71,10 +73,7 @@ define([
$error.hide(); $error.hide();
Common.disableButton($submitBtn); Common.disableButton($submitBtn);
repos.create({ repos.create({'name': library_name, 'owner': library_owner}, {
'name': library_name,
'owner': library_owner[0]
}, {
prepend: true, prepend: true,
wait: true, wait: true,
success: function() { success: function() {

View File

@ -49,20 +49,10 @@ define([
}, },
events: { events: {
'click #dir-group-share-tab': 'clickDirGroupShareTab',
'click #add-dir-user-share-item .submit': 'dirUserShare', 'click #add-dir-user-share-item .submit': 'dirUserShare',
'click #add-dir-group-share-item .submit': 'dirGroupShare' 'click #add-dir-group-share-item .submit': 'dirGroupShare'
}, },
clickDirGroupShareTab: function() {
var $dir_group_share_panel = this.$('#dir-group-share');
$('[name="groups"]', $dir_group_share_panel).select2($.extend({
'width': '100%'
}, Common.groupInputOptionsForSelect2()));
},
dirUserSharePanelInit: function() { dirUserSharePanelInit: function() {
var $dir_user_share_panel = this.$('#dir-user-share'); var $dir_user_share_panel = this.$('#dir-user-share');
@ -71,7 +61,7 @@ define([
var repo_id = this.repo_id; var repo_id = this.repo_id;
$('[name="emails"]', $dir_user_share_panel).select2($.extend({ $('[name="emails"]', $dir_user_share_panel).select2($.extend({
width: '100%' //width: '292px' // the container will copy class 'w100' from the original element to get width
}, Common.contactInputOptionsForSelect2())); }, Common.contactInputOptionsForSelect2()));
Common.ajaxGet({ Common.ajaxGet({
@ -108,6 +98,10 @@ define([
var $add_item = this.$('#add-dir-group-share-item'); var $add_item = this.$('#add-dir-group-share-item');
var repo_id = this.repo_id; var repo_id = this.repo_id;
$('[name="groups"]', $dir_group_share_panel).select2($.extend({
//width: '292px' // the container will copy class 'w100' from the original element to get width
}, Common.groupInputOptionsForSelect2()));
Common.ajaxGet({ Common.ajaxGet({
'get_url': Common.getUrl({name: 'admin_shares'}), 'get_url': Common.getUrl({name: 'admin_shares'}),
'data': { 'data': {
@ -139,12 +133,12 @@ define([
var $user_share_item = this.$('#add-dir-user-share-item'); var $user_share_item = this.$('#add-dir-user-share-item');
var $emails_input = $('[name="emails"]', $user_share_item), var $emails_input = $('[name="emails"]', $user_share_item),
emails = $emails_input.val(); // [] emails = $emails_input.val(); // string
var $perm = $('[name="permission"]', $user_share_item), var $perm = $('[name="permission"]', $user_share_item),
perm = $perm.val(); perm = $perm.val();
if (!emails.length || !perm) { if (!emails || !perm) {
return false; return false;
} }
@ -162,7 +156,7 @@ define([
data: { data: {
'repo_id': repo_id, 'repo_id': repo_id,
'share_type': 'user', 'share_type': 'user',
'share_to': emails, 'share_to': emails.split(','),
'permission': perm 'permission': perm
}, },
success: function(data) { success: function(data) {
@ -180,7 +174,7 @@ define([
}); });
$user_share_item.after(new_item.el); $user_share_item.after(new_item.el);
}); });
$emails_input.val(null).trigger('change'); $emails_input.select2("val", "");
$('option', $perm).prop('selected', false); $('option', $perm).prop('selected', false);
$('[value="rw"]', $perm).prop('selected', true); $('[value="rw"]', $perm).prop('selected', true);
$error.addClass('hide'); $error.addClass('hide');
@ -207,12 +201,12 @@ define([
var $group_share_item= this.$('#add-dir-group-share-item'); var $group_share_item= this.$('#add-dir-group-share-item');
var $groups_input = $('[name="groups"]', $group_share_item), var $groups_input = $('[name="groups"]', $group_share_item),
groups = $groups_input.val(); // [] groups = $groups_input.val(); // string
var $perm = $('[name="permission"]', $group_share_item), var $perm = $('[name="permission"]', $group_share_item),
perm = $perm.val(); perm = $perm.val();
if (!groups.length || !perm) { if (!groups || !perm) {
return false; return false;
} }
@ -231,7 +225,7 @@ define([
data: { data: {
'repo_id': repo_id, 'repo_id': repo_id,
'share_type': 'group', 'share_type': 'group',
'share_to': groups, 'share_to': groups.split(','),
'permission': perm 'permission': perm
}, },
success: function(data) { success: function(data) {
@ -249,7 +243,7 @@ define([
}); });
$group_share_item.after(new_item.el); $group_share_item.after(new_item.el);
}); });
$groups_input.val(null).trigger('change'); $groups_input.select2("val", "");
$('option', $perm).prop('selected', false); $('option', $perm).prop('selected', false);
$('[value="rw"]', $perm).prop('selected', true); $('[value="rw"]', $perm).prop('selected', true);
$error.addClass('hide'); $error.addClass('hide');
@ -271,6 +265,7 @@ define([
} }
}); });
} }
}); });
return SharePopupView; return SharePopupView;