Avoid tag duplicates
* Prevent duplicate client side with awesomplete * Prevent duplicate server side (save_edit processing) Fixes #261
This commit is contained in:
parent
eee711c0a8
commit
781e8aadea
2 changed files with 28 additions and 5 deletions
|
@ -1330,6 +1330,7 @@ function renderPage()
|
||||||
{
|
{
|
||||||
if (!tokenOk($_POST['token'])) die('Wrong token.'); // Go away!
|
if (!tokenOk($_POST['token'])) die('Wrong token.'); // Go away!
|
||||||
$tags = trim(preg_replace('/\s\s+/',' ', $_POST['lf_tags'])); // Remove multiple spaces.
|
$tags = trim(preg_replace('/\s\s+/',' ', $_POST['lf_tags'])); // Remove multiple spaces.
|
||||||
|
$tags = implode(' ', array_unique(explode(' ', $tags))); // Remove duplicates.
|
||||||
$linkdate=$_POST['lf_linkdate'];
|
$linkdate=$_POST['lf_linkdate'];
|
||||||
$url = trim($_POST['lf_url']);
|
$url = trim($_POST['lf_url']);
|
||||||
if (!startsWith($url,'http:') && !startsWith($url,'https:') && !startsWith($url,'ftp:') && !startsWith($url,'magnet:') && !startsWith($url,'?') && !startsWith($url,'javascript:'))
|
if (!startsWith($url,'http:') && !startsWith($url,'https:') && !startsWith($url,'ftp:') && !startsWith($url,'magnet:') && !startsWith($url,'?') && !startsWith($url,'javascript:'))
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
{if="($GLOBALS['config']['OPEN_SHAARLI'] || isLoggedIn())"}
|
{if="($GLOBALS['config']['OPEN_SHAARLI'] || isLoggedIn())"}
|
||||||
<script>
|
<script>
|
||||||
$ = Awesomplete.$;
|
$ = Awesomplete.$;
|
||||||
new Awesomplete($('input[data-multiple]'), {
|
awesomplete = new Awesomplete($('input[data-multiple]'), {
|
||||||
filter: function(text, input) {
|
filter: function(text, input) {
|
||||||
return Awesomplete.FILTER_CONTAINS(text, input.match(/[^ ]*$/)[0]);
|
return Awesomplete.FILTER_CONTAINS(text, input.match(/[^ ]*$/)[0]);
|
||||||
},
|
},
|
||||||
|
@ -52,6 +52,28 @@
|
||||||
},
|
},
|
||||||
minChars: 1
|
minChars: 1
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove already selected items from autocompletion list.
|
||||||
|
* HTML list is never updated, so removing a tag will add it back to awesomplete.
|
||||||
|
*
|
||||||
|
* FIXME: This a workaround waiting for awesomplete to handle this.
|
||||||
|
* https://github.com/LeaVerou/awesomplete/issues/16749
|
||||||
|
*/
|
||||||
|
var input = document.querySelector('#lf_tags');
|
||||||
|
input.addEventListener('input', function()
|
||||||
|
{
|
||||||
|
proposedTags = input.getAttribute('data-list').replace(/,/g, '').split(' ');
|
||||||
|
reg = /(\w+) /g;
|
||||||
|
while((match = reg.exec(input.value)) !== null) {
|
||||||
|
id = proposedTags.indexOf(match[1]);
|
||||||
|
if(id != -1 ) {
|
||||||
|
proposedTags.splice(id, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
awesomplete.list = proposedTags;
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
{/if}
|
{/if}
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Reference in a new issue