integration/js/taghome.js
changeset 64 458cc4576415
parent 50 9cc1b66d0880
child 73 fb4d0566ab19
--- a/integration/js/taghome.js	Fri Dec 21 15:45:10 2012 +0100
+++ b/integration/js/taghome.js	Fri Jan 04 18:10:03 2013 +0100
@@ -5,12 +5,40 @@
         acdata = [],
         labels = {
             content: "Séquence",
-            tag: "Tag"
-        };
+            tag: "Mot-clé"
+        },
+        replacerx;
     
     acInput.autocomplete({
         source: function( request, response ) {
-            response($.ui.autocomplete.filter(acdata, request.term));
+            var charsub = [ '[aáàâä]', '[cç]', '[eéèêë]', '[iíìîï]', '[oóòôö]' ],
+                terms = request.term.split(/[\s,]/),
+                escterms = terms.map(function(term) {
+                    var t = term.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1');
+                    _(charsub).each(function(chars) {
+                        var tmprx = new RegExp(chars,"gim");
+                        t = t.replace(tmprx, chars);
+                    });
+                    return t;
+                }).filter(_.identity);
+                var searchrxs = _(escterms).map(function(term) {
+                    return new RegExp("(^|\\s)" + term, "i")
+                });
+            replacerx = new RegExp("(^|\\s)(" + escterms.join("|") + ")", "gi");
+            var filtered = acdata
+                    .filter(function(d) {
+                        return _(searchrxs).reduce(function(memo, rx) {
+                            return memo && rx.test(d.label);
+                        }, true);
+                    })
+                    .sort(function(a, b) {
+                        if (a.type === b.type) {
+                            return (a.label > b.label ? 1 : (a.label < b.label ? -1 : 0));
+                        } else {
+                            return (a.type === "content" ? -1 : 1);
+                        }
+                    });
+            response(filtered);
         },
         select: function(event, ui) {
             document.location.href = ui.item.href;
@@ -18,9 +46,12 @@
     }).data("autocomplete")._renderItem = function(ul, item) {
         return $( "<li>" )
             .data( "item.autocomplete", item )
-            .append( "<a href='" + item.href + "'>" + labels[item.type] + " : " + item.label + "</a>" )
+            .append( "<a href='" + item.href + "'>" + labels[item.type] + " : " + item.label.replace(replacerx, '$1<b>$2</b>') + "</a>" )
             .appendTo( ul );
     };
+    acInput.on("keyup input paste", function() {
+        acInput.val(acInput.val().toUpperCase());
+    });
     
     $("#form_tag").submit(function() {
         return false;
@@ -28,6 +59,33 @@
         
     tagsInner.draggable();
     
+    var dragtimeout;
+    
+    $(".arrow_left").data({xdelta: 6, ydelta: 0});
+    $(".arrow_right").data({xdelta: -6, ydelta: 0});
+    $(".arrow_top").data({xdelta: 0, ydelta: 6});
+    $(".arrow_bottom").data({xdelta: 0, ydelta: -6});
+    
+    $(".arrow")
+        .mousedown(function() {
+            var deltas = $(this).data(),
+                move = function() {
+                    tagsInner.css({
+                        "left": deltas.xdelta + parseInt(tagsInner.css("left")),
+                        "top": deltas.ydelta + parseInt(tagsInner.css("top"))
+                    });
+                }
+            window.clearInterval(dragtimeout);
+            dragtimeout = window.setInterval(move, 20);
+            move();
+        })
+        .on(
+            "mouseout mouseup",
+            function() {
+                window.clearInterval(dragtimeout);
+            }
+        );
+    
     function resizeTags() {
         tagsInner.css({
             "margin-left": - Math.floor(tagsInner.width()/2) + "px",
@@ -47,7 +105,7 @@
         },
         success: function(data) {
             _(data.objects).each(function(content) {
-                var fpmatch = content.front_project.match(/projects\/([0-9a-f\-]+)/),
+                var fpmatch = (content.front_project || "").match(/projects\/([0-9a-f\-]+)/),
                     fproj = fpmatch ? fpmatch[1] : "";
                 acdata.push({
                     label: content.title,
@@ -96,7 +154,7 @@
             var l = ordered.length,
                 max = ordered[0].weight,
                 min = Math.min(max - 1, ordered[l - 1].weight),
-                colorscale = 128 / (max - min),
+                colorscale = 160 / (max - min),
                 ncols = Math.floor(.65*Math.sqrt(l)),
                 nlines = Math.ceil(l/ncols);
             var cells = _(nlines * ncols)
@@ -130,7 +188,7 @@
                 }
                 _html += "<td>";
                 if (c.tag) {
-                    var color = Math.floor( 127 + (c.tag.weight - min) * colorscale );
+                    var color = Math.floor( 95 + (c.tag.weight - min) * colorscale );
                     _html += '<a href="'
                         + endpoints.tag_page.replace("__TAG__",encodeURIComponent(c.tag.label))
                         + '" style="color: rgb('