]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Avoid tag duplicates 262/head
authorArthurHoaro <arthur@hoa.ro>
Wed, 8 Jul 2015 14:28:31 +0000 (16:28 +0200)
committerArthurHoaro <arthur@hoa.ro>
Sun, 12 Jul 2015 08:34:29 +0000 (10:34 +0200)
 * Prevent duplicate client side with awesomplete
 * Prevent duplicate server side (save_edit processing)

Fixes #261

index.php
tpl/editlink.html

index bbe302a63a4c9bb32ef85df27bd689432f14e286..87d9116a716872965cc74ec4c3c01a46db125751 100644 (file)
--- a/index.php
+++ b/index.php
@@ -709,7 +709,7 @@ function showRSS()
     if (!empty($_GET['searchterm'])) $linksToDisplay = $LINKSDB->filterFulltext($_GET['searchterm']);
     else if (!empty($_GET['searchtags']))   $linksToDisplay = $LINKSDB->filterTags(trim($_GET['searchtags']));
     else $linksToDisplay = $LINKSDB;
-        
+
     $nblinksToDisplay = 50;  // Number of links to display.
     if (!empty($_GET['nb']))  // In URL, you can specificy the number of links. Example: nb=200 or nb=all for all links.
     {
@@ -789,7 +789,7 @@ function showATOM()
     if (!empty($_GET['searchterm'])) $linksToDisplay = $LINKSDB->filterFulltext($_GET['searchterm']);
     else if (!empty($_GET['searchtags']))   $linksToDisplay = $LINKSDB->filterTags(trim($_GET['searchtags']));
     else $linksToDisplay = $LINKSDB;
-        
+
     $nblinksToDisplay = 50;  // Number of links to display.
     if (!empty($_GET['nb']))  // In URL, you can specificy the number of links. Example: nb=200 or nb=all for all links.
     {
@@ -1041,7 +1041,7 @@ function renderPage()
         if (!empty($_GET['searchterm'])) $links = $LINKSDB->filterFulltext($_GET['searchterm']);
         elseif (!empty($_GET['searchtags']))   $links = $LINKSDB->filterTags(trim($_GET['searchtags']));
         else $links = $LINKSDB;
-            
+
         $body='';
         $linksToDisplay=array();
 
@@ -1056,7 +1056,7 @@ function renderPage()
                 $linksToDisplay[]=$link; // Add to array.
             }
         }
-            
+
         $PAGE = new pageBuilder;
         $PAGE->assign('linkcount',count($LINKSDB));
         $PAGE->assign('linksToDisplay',$linksToDisplay);
@@ -1330,6 +1330,7 @@ function renderPage()
     {
         if (!tokenOk($_POST['token'])) die('Wrong token.'); // Go away!
         $tags = trim(preg_replace('/\s\s+/',' ', $_POST['lf_tags'])); // Remove multiple spaces.
+        $tags = implode(' ', array_unique(explode(' ', $tags))); // Remove duplicates.
         $linkdate=$_POST['lf_linkdate'];
         $url = trim($_POST['lf_url']);
         if (!startsWith($url,'http:') && !startsWith($url,'https:') && !startsWith($url,'ftp:') && !startsWith($url,'magnet:') && !startsWith($url,'?') && !startsWith($url,'javascript:'))
index a32748ab48f11b3ac49783103059d07c40886e5a..3733ca2185a94ca9a3df7cf48410c17175e476eb 100644 (file)
@@ -42,7 +42,7 @@
 {if="($GLOBALS['config']['OPEN_SHAARLI'] || isLoggedIn())"}
 <script>
     $ = Awesomplete.$;
-    new Awesomplete($('input[data-multiple]'), {
+    awesomplete = new Awesomplete($('input[data-multiple]'), {
         filter: function(text, input) {
             return Awesomplete.FILTER_CONTAINS(text, input.match(/[^ ]*$/)[0]);
         },
         },
         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>
 {/if}
 </body>