Ladder browsing mode improvement
This commit is contained in:
@@ -186,7 +186,7 @@
|
|||||||
top: 100%;
|
top: 100%;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
&:empty {
|
&:empty, &.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.result-line {
|
.result-line {
|
||||||
|
@@ -6,18 +6,27 @@ let searchHighlight;
|
|||||||
let manualRating = false;
|
let manualRating = false;
|
||||||
let manualRank = false;
|
let manualRank = false;
|
||||||
|
|
||||||
function initSearch() {
|
function searchResultShown() {
|
||||||
let needle = $('#needle')[0].value.trim();
|
return !(!searchResult || searchResult.length === 0 || $('#search-result').hasClass('hidden'));
|
||||||
if (searchTimer) {
|
|
||||||
clearTimeout(searchTimer);
|
|
||||||
}
|
|
||||||
searchTimer = setTimeout(() => {
|
|
||||||
search(needle);
|
|
||||||
}, SEARCH_DELAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function searchResultShown() {
|
function browseScroll() {
|
||||||
return !(!searchResult || searchResult.length === 0)
|
let scrollTo = $('#needle')[0].value.trim();
|
||||||
|
while (scrollTo.length > 0) {
|
||||||
|
let target = $(`#search-result .result-line[data-name^="${scrollTo}"i]`);
|
||||||
|
if (target.length > 0) {
|
||||||
|
target[0].scrollIntoView({behavior: "smooth", block: "center"});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
scrollTo = scrollTo.substring(0, scrollTo.length - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearSearch() {
|
||||||
|
$('#search-result').clear();
|
||||||
|
searchTimer = undefined;
|
||||||
|
searchResult = undefined;
|
||||||
|
searchHighlight = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
function search(needle) {
|
function search(needle) {
|
||||||
@@ -28,17 +37,10 @@ function search(needle) {
|
|||||||
needle: needle,
|
needle: needle,
|
||||||
// aga: form.val('aga'),
|
// aga: form.val('aga'),
|
||||||
egf: form.val('egf'),
|
egf: form.val('egf'),
|
||||||
ffg: form.val('ffg'),
|
ffg: form.val('ffg')
|
||||||
}
|
}
|
||||||
let country = form.val('countryFilter');
|
let country = form.val('countryFilter');
|
||||||
if (country) search.countryFilter = country;
|
if (country) search.countryFilter = country;
|
||||||
let searchFormState = {
|
|
||||||
countryFilter: !!country,
|
|
||||||
// aga: search.aga,
|
|
||||||
egf: search.egf,
|
|
||||||
ffg: search.ffg
|
|
||||||
};
|
|
||||||
store('searchFormState', searchFormState);
|
|
||||||
api.postJson('search', search)
|
api.postJson('search', search)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if (Array.isArray(result)) {
|
if (Array.isArray(result)) {
|
||||||
@@ -46,17 +48,7 @@ function search(needle) {
|
|||||||
let html = resultTemplate.render(result);
|
let html = resultTemplate.render(result);
|
||||||
$('#search-result')[0].innerHTML = html;
|
$('#search-result')[0].innerHTML = html;
|
||||||
if (needle === '*') {
|
if (needle === '*') {
|
||||||
setTimeout(() => {
|
setTimeout(() => browseScroll(), 0);
|
||||||
let scrollTo = $('#needle')[0].value.trim();
|
|
||||||
while (scrollTo.length > 0) {
|
|
||||||
let target = $(`#search-result .result-line[data-name^="${scrollTo}"i]`);
|
|
||||||
if (target.length > 0) {
|
|
||||||
target[0].scrollIntoView({ behavior: "smooth", block: "center" });
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
scrollTo = scrollTo.substring(0, scrollTo.length - 1);
|
|
||||||
}
|
|
||||||
}, 0);
|
|
||||||
} else {
|
} else {
|
||||||
let scrollable = $('#player .popup-body');
|
let scrollable = $('#player .popup-body');
|
||||||
scrollable[0].scrollTop = 0;
|
scrollable[0].scrollTop = 0;
|
||||||
@@ -64,13 +56,34 @@ function search(needle) {
|
|||||||
} else console.log(result);
|
} else console.log(result);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
$('#search-result').clear();
|
// needle is empty (and by construction we can't be in browse mode) - clear search result
|
||||||
searchTimer = undefined;
|
clearSearch();
|
||||||
searchResult = undefined;
|
|
||||||
searchHighlight = undefined;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initSearch() {
|
||||||
|
let needle = $('#needle')[0].value.trim();
|
||||||
|
if (searchTimer) {
|
||||||
|
clearTimeout(searchTimer);
|
||||||
|
}
|
||||||
|
searchTimer = setTimeout(() => {
|
||||||
|
let form = $('#search-form')[0];
|
||||||
|
let browsing = !!form.val('browse');
|
||||||
|
if (!browsing || !searchResult) {
|
||||||
|
search(browsing ? '*' : needle);
|
||||||
|
} else if (browsing) {
|
||||||
|
if (needle.length) {
|
||||||
|
$('#search-result').removeClass('hidden');
|
||||||
|
browseScroll();
|
||||||
|
} else {
|
||||||
|
$('#search-result').addClass('hidden');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$('#search-result').removeClass('hidden');
|
||||||
|
}
|
||||||
|
}, SEARCH_DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
function parseRank(rank) {
|
function parseRank(rank) {
|
||||||
let groups = /(\d+)([kd])/.exec(rank)
|
let groups = /(\d+)([kd])/.exec(rank)
|
||||||
if (groups) {
|
if (groups) {
|
||||||
@@ -108,19 +121,14 @@ function addPlayers() {
|
|||||||
// keep preliminary/final status
|
// keep preliminary/final status
|
||||||
let status = form.val('final') || false;
|
let status = form.val('final') || false;
|
||||||
form.reset();
|
form.reset();
|
||||||
// initial search checkboxes position
|
|
||||||
['countryFilter', /* 'aga', */ 'egf', 'ffg'].forEach(id => {
|
|
||||||
let value = store(id);
|
|
||||||
let ctl = $(`#${id}`);
|
|
||||||
if (value !== null && typeof(value) !== 'undefined' && ctl.length !== 0) {
|
|
||||||
ctl[0].checked = value;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
form.val('final', status);
|
form.val('final', status);
|
||||||
$('#player').removeClass('edit').addClass('create');
|
$('#player').removeClass('edit').addClass('create');
|
||||||
$('#register').removeClass('disabled');
|
$('#register').removeClass('disabled');
|
||||||
modal('player');
|
modal('player');
|
||||||
setTimeout(() => $('#needle').focus(), 100);
|
setTimeout(() => {
|
||||||
|
$('#needle').focus();
|
||||||
|
|
||||||
|
}, 100);
|
||||||
store('addingPlayers', true);
|
store('addingPlayers', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,11 +317,11 @@ onLoad(() => {
|
|||||||
});
|
});
|
||||||
$('#clear-search').on('click', e => {
|
$('#clear-search').on('click', e => {
|
||||||
$('#needle')[0].value = '';
|
$('#needle')[0].value = '';
|
||||||
$('#search-result').clear();
|
initSearch();
|
||||||
});
|
});
|
||||||
let searchFormState = store('searchFormState')
|
let searchFormState = store('searchFormState')
|
||||||
if (searchFormState) {
|
if (searchFormState) {
|
||||||
for (let id of ["countryFilter", /* "aga", */ "egf", "ffg"]) {
|
for (let id of ["countryFilter", /* "aga", */ "egf", "ffg", "browse"]) {
|
||||||
let ctl = $(`#${id}`);
|
let ctl = $(`#${id}`);
|
||||||
if (ctl.length !== 0) {
|
if (ctl.length !== 0) {
|
||||||
ctl[0].checked = searchFormState[id];
|
ctl[0].checked = searchFormState[id];
|
||||||
@@ -324,9 +332,20 @@ onLoad(() => {
|
|||||||
let chk = e.target.closest('.toggle');
|
let chk = e.target.closest('.toggle');
|
||||||
let checkbox = chk.find('input')[0];
|
let checkbox = chk.find('input')[0];
|
||||||
checkbox.checked = !checkbox.checked;
|
checkbox.checked = !checkbox.checked;
|
||||||
let id = checkbox.getAttribute('id');
|
//
|
||||||
let value = checkbox.checked;
|
// let id = checkbox.getAttribute('id');
|
||||||
store(id, value);
|
// let value = checkbox.checked;
|
||||||
|
// store(id, value);
|
||||||
|
let form = $('#search-form')[0];
|
||||||
|
let searchFormState = {
|
||||||
|
countryFilter: !!form.val('countryFilter'),
|
||||||
|
// aga: search.aga,
|
||||||
|
egf: !!form.val('egf'),
|
||||||
|
ffg: !!form.val('ffg'),
|
||||||
|
browse: !!form.val('browse')
|
||||||
|
};
|
||||||
|
store('searchFormState', searchFormState);
|
||||||
|
clearSearch();
|
||||||
initSearch();
|
initSearch();
|
||||||
});
|
});
|
||||||
$('#reglist-mode').on('change', e => {
|
$('#reglist-mode').on('change', e => {
|
||||||
@@ -496,9 +515,6 @@ onLoad(() => {
|
|||||||
}));
|
}));
|
||||||
bulkUpdate(players);
|
bulkUpdate(players);
|
||||||
});
|
});
|
||||||
$('#browse-players').on('click', e => {
|
|
||||||
search('*');
|
|
||||||
});
|
|
||||||
$('.player-fields').on('change input', e => {
|
$('.player-fields').on('change input', e => {
|
||||||
$('#register').removeClass('disabled');
|
$('#register').removeClass('disabled');
|
||||||
});
|
});
|
||||||
|
@@ -143,10 +143,14 @@
|
|||||||
<label>FFG</label>
|
<label>FFG</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="two wide field">
|
<div class="two wide centered field">
|
||||||
<button id="browse-players" type="button" class="ui basic icon button">
|
<div class="toggle" title="${utils.ratingsDates.ffg|'no ffg ratings'}">
|
||||||
<i class="sort alphabet down icon"></i>
|
<input id="browse" name="browse" type="checkbox" value="true"/>
|
||||||
</button>
|
<div class="search-param checkbox">
|
||||||
|
<div class="circle"></div>
|
||||||
|
</div>
|
||||||
|
<label><i class="sort alphabet down icon"></i></label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
Reference in New Issue
Block a user