integration/js/taghome.js
author veltr
Fri, 14 Dec 2012 13:07:58 +0100
changeset 50 9cc1b66d0880
child 64 458cc4576415
permissions -rw-r--r--
Added directory for Level 2 Integration
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     1
function showTags() {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     2
    var tagsOuter = $(".taglist_container"),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     3
        tagsInner = $(".taglist_container table"),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     4
        acInput = $("#form_tag input[type=search]"),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     5
        acdata = [],
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     6
        labels = {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     7
            content: "Séquence",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     8
            tag: "Tag"
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
     9
        };
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    10
    
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    11
    acInput.autocomplete({
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    12
        source: function( request, response ) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    13
            response($.ui.autocomplete.filter(acdata, request.term));
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    14
        },
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    15
        select: function(event, ui) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    16
            document.location.href = ui.item.href;
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    17
        }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    18
    }).data("autocomplete")._renderItem = function(ul, item) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    19
        return $( "<li>" )
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    20
            .data( "item.autocomplete", item )
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    21
            .append( "<a href='" + item.href + "'>" + labels[item.type] + " : " + item.label + "</a>" )
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    22
            .appendTo( ul );
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    23
    };
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    24
    
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    25
    $("#form_tag").submit(function() {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    26
        return false;
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    27
    });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    28
        
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    29
    tagsInner.draggable();
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    30
    
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    31
    function resizeTags() {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    32
        tagsInner.css({
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    33
            "margin-left": - Math.floor(tagsInner.width()/2) + "px",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    34
            "margin-top": - Math.floor(tagsInner.height()/2) + "px",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    35
            "left": Math.floor(tagsOuter.width()/2) + "px",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    36
            "top": Math.floor(tagsOuter.height()/2) + "px"
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    37
        });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    38
    }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    39
    $(window).on("resize",resizeTags);
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    40
    
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    41
    $.ajax({
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    42
        url: endpoints.contents_api,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    43
        dataType: "jsonp", //TODO: JSON if on Platform
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    44
        data: {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    45
            limit: 0,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    46
            format: "jsonp"
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    47
        },
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    48
        success: function(data) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    49
            _(data.objects).each(function(content) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    50
                var fpmatch = content.front_project.match(/projects\/([0-9a-f\-]+)/),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    51
                    fproj = fpmatch ? fpmatch[1] : "";
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    52
                acdata.push({
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    53
                    label: content.title,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    54
                    type: "content",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    55
                    href: endpoints.content_page.replace("__CONTENT_ID__", content.iri_id).replace("__FRONT_PROJECT_ID__", fproj)
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    56
                });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    57
            });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    58
        }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    59
    })
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    60
    
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    61
    $.ajax({
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    62
        url: endpoints.tag_api,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    63
        dataType: "json",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    64
        data: {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    65
            contents: "all",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    66
            format: "json",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    67
            limit: 0,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    68
            steps: 100
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    69
        },
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    70
        success: function(data) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    71
            var grouped = {};
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    72
            _(data.objects).each(function(t) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    73
                var upt = t.name.toUpperCase(),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    74
                    w = t.weight + (grouped[upt] || 0);
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    75
                grouped[upt] = w;
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    76
            });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    77
            _(grouped).each(function(v, k) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    78
                acdata.push({
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    79
                    label: k,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    80
                    type: "tag",
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    81
                    href: endpoints.tag_page.replace("__TAG__", k)
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    82
                });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    83
            });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    84
            var ordered = _(grouped)
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    85
                .chain()
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    86
                .map(function(v, k) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    87
                    return {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    88
                        label: k,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    89
                        weight: v
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    90
                    }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    91
                })
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    92
                .sortBy(function(t) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    93
                    return -t.weight;
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    94
                })
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    95
                .value();
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    96
            var l = ordered.length,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    97
                max = ordered[0].weight,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    98
                min = Math.min(max - 1, ordered[l - 1].weight),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
    99
                colorscale = 128 / (max - min),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   100
                ncols = Math.floor(.65*Math.sqrt(l)),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   101
                nlines = Math.ceil(l/ncols);
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   102
            var cells = _(nlines * ncols)
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   103
                .chain()
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   104
                .range()
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   105
                .map(function(i) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   106
                    var x = i % ncols,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   107
                        y = Math.floor(i / ncols),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   108
                        dx = x - ((ncols - 1) / 2),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   109
                        dy = y - ((nlines - 1) / 2),
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   110
                        d = Math.sqrt(dx*dx + dy*dy);
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   111
                    return {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   112
                        n: i,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   113
                        x: x,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   114
                        y: y,
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   115
                        d: d
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   116
                    }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   117
                })
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   118
                .sortBy(function(c) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   119
                    return c.d;
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   120
                })
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   121
                .value();
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   122
            _(ordered).each(function(v, k) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   123
                cells[k].tag = v;
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   124
            });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   125
            cells = _(cells).sortBy(function(c) { return c.n });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   126
            var _html = "";
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   127
            _(cells).each(function(c) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   128
                if (c.x === 0) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   129
                    _html += "<tr>";
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   130
                }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   131
                _html += "<td>";
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   132
                if (c.tag) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   133
                    var color = Math.floor( 127 + (c.tag.weight - min) * colorscale );
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   134
                    _html += '<a href="'
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   135
                        + endpoints.tag_page.replace("__TAG__",encodeURIComponent(c.tag.label))
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   136
                        + '" style="color: rgb('
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   137
                        + [color,color,color].join(",")
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   138
                        + ')">'
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   139
                        + c.tag.label
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   140
                        + '</a>';
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   141
                }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   142
                _html += "</td>";
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   143
                if (c.x === (ncols - 1)) {
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   144
                    _html += "</tr>";
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   145
                }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   146
            });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   147
            tagsInner.html(_html);
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   148
            resizeTags();
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   149
        }
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   150
    });
9cc1b66d0880 Added directory for Level 2 Integration
veltr
parents:
diff changeset
   151
}