integration/js/annotation-article.js
author veltr
Tue, 25 Jun 2013 18:46:43 +0200
changeset 32 3612737630f4
parent 31 059e197617bb
child 33 8d7e6a9018fc
permissions -rw-r--r--
Improved interactions on text annotator
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     1
$(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     2
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     3
    $(".fancybox").fancybox();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     4
    $('.font-up a').click(function(){
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     5
        var taille_police=parseFloat($('.content').css('font-size'),100)+2;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     6
        if(taille_police<30){
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     7
            var taille_ligne=parseFloat($('.content').css('line-height'),100)+2;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     8
            $('.content').css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
     9
                'line-height':taille_ligne+'px',
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    10
                'font-size':taille_police+'px'
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    11
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    12
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    13
        return false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    14
    });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    15
    $('.font-down a').click(function(){
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    16
        var taille_police=parseFloat($('.content').css('font-size'),100)-2;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    17
        if(taille_police>11){
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    18
            var taille_ligne=parseFloat($('.content').css('line-height'),100)-2;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    19
            $('.content').css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    20
                'line-height':taille_ligne+'px',
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    21
                'font-size':taille_police+'px'
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    22
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    23
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    24
        return false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    25
    });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    26
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    27
    /* ANNOTATION HANDLING */
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    28
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    29
    var basenode = $(".content")[0],
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    30
        cleanHtml = cleanTextNodes(basenode).innerHtml,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    31
        textinfo = parseContents(basenode);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    32
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    33
    window.annotations = window.annotations || [];
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    34
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    35
    var colors = ["#ff8", "#f88", "#8f8", "#8ff", "#f8f", "#88f"],
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    36
        currentVisibleFrame = null,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    37
        ncol = 0,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    38
        mousedown = false,
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
    39
        shownByClick = false,
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    40
        dragging = false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    41
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    42
    function cleanText(txt, keepbefore, keepafter) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    43
        var res = txt.replace(/[\n\r\t]+/gm,' ').replace(/ {2,}/g,' ');
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    44
        if (!keepbefore) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    45
            res = res.replace(/^ +/,'');
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    46
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    47
        if (!keepafter) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    48
            res = res.replace(/ +$/,'');
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    49
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    50
        return res;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    51
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    52
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    53
    function recursiveParse(node, info) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    54
        var children = node.childNodes;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    55
        for (var i = 0, l = children.length; i < l; i++) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    56
            var childnode = children[i];
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    57
            switch(childnode.nodeType) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    58
                case node.ELEMENT_NODE:
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    59
                    recursiveParse(childnode, info);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    60
                break;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    61
                case node.TEXT_NODE:
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    62
                    var startpos = info.text.length;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    63
                    info.text += childnode.textContent;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    64
                    var endpos = info.text.length,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    65
                        nodeinfo = {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    66
                            start: startpos,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    67
                            end: endpos,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    68
                            length: endpos - startpos,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    69
                            textNode: childnode
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    70
                        };
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    71
                    childnode._nodeInfo = nodeinfo;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    72
                    info.nodes.push(nodeinfo);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    73
                break;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    74
            }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    75
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    76
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    77
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    78
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    79
    function parseContents(node) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    80
        var res = {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    81
            text: '',
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    82
            nodes: []
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    83
        };
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    84
        recursiveParse(node, res);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    85
        return res;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    86
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    87
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    88
    function cleanTextNodes(node) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    89
        var children = node.childNodes;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    90
        for (var i = 0, l = children.length; i < l; i++) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    91
            var childnode = children[i];
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    92
            switch(childnode.nodeType) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    93
                case node.ELEMENT_NODE:
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    94
                    cleanTextNodes(childnode);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    95
                break;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    96
                case node.TEXT_NODE:
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    97
                    var keepbefore = (i && children[i-1].nodeType == node.ELEMENT_NODE),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    98
                        keepafter = (i < l-1 && children[i+1].nodeType == node.ELEMENT_NODE);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
    99
                    childnode.textContent = cleanText(childnode.textContent, keepbefore, keepafter);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   100
                break;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   101
            }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   102
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   103
        return node;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   104
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   105
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   106
    function highlightText(start, end, color) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   107
        var annotation = {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   108
            startOffset: start,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   109
            endOffset: end,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   110
            color: color,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   111
            comment: "",
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   112
            tags: [],
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   113
            annotatedText: textinfo.text.substring(start, end),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   114
            beforeText: textinfo.text.substring(start - 40, start).replace(/^[\S]*\s+/,''),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   115
            afterText: textinfo.text.substring(end, end + 40).replace(/\s+[\S]*$/,'')
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   116
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   117
        annotations.push(annotation);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   118
        showAnnotation(annotation);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   119
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   120
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   121
    var frameTpl = _.template(
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   122
        '<div class="annotation-frame" style="border-color: <%- annotation.color %>; top: <%-top %>px; left: <%- left %>px;">'
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   123
        + '<div class="annotation-area" style="background-color: <%- annotation.color %>; height: <%- height %>px;"></div>'
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   124
        + '<form class="annotation-form"><h3>Commentaire&nbsp;:</h3>'
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   125
        + '<textarea class="annotation-textarea" placeholder="Mon commentaire&hellip;"><%- annotation.comment || "" %></textarea>'
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   126
        + '<h3>Mots-clés&nbsp;:</h3>'
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   127
        + '<ul class="annotation-tags-form"><% _(annotation.tags).forEach(function(tag) { %><li><%- tag %></li><% }) %></ul>'
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   128
        + '<div><button class="annotation-remove">Supprimer</button><input class="annotation-submit" type="submit" value="Enregistrer" /></div>'
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   129
        + '</form></div>'
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   130
    );
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   131
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   132
    var liTpl = _.template(
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   133
        '<li style="border-color: <%- annotation.color %>;"><h3>Texte annoté</h3>'
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   134
        + '<p class="annotation-text"><%- annotation.beforeText %><b><%- annotation.annotatedText %></b><%- annotation.afterText %></p>'
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   135
        + '<h3>Commentaire&nbsp;:</h3><p class="annotation-comment"><%- annotation.comment || "(Sans commentaire)" %></p>'
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   136
        + '<h3>Mots-clés&nbsp;:</h3><p class="annotation-tags"><%- (annotation.tags || []).join(", ") || "(aucun mot-clé)" %></p>'
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   137
        + '</li>'
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   138
    );
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   139
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   140
    function showFrameBox() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   141
        if (currentVisibleFrame) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   142
            $(".annotation-frame-box").show();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   143
            var offset = currentVisibleFrame.offset(),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   144
                width = currentVisibleFrame.outerWidth(),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   145
                height = currentVisibleFrame.outerHeight();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   146
            $(".annotation-fb-top").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   147
                height: offset.top - 77
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   148
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   149
            $(".annotation-fb-left").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   150
                top: offset.top,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   151
                height: height,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   152
                width: offset.left
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   153
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   154
            $(".annotation-fb-right").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   155
                top: offset.top,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   156
                height: height,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   157
                left: offset.left + width
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   158
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   159
            var fbbtop = offset.top + height;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   160
            $(".annotation-fb-bottom").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   161
                top: fbbtop,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   162
                height: ($("body").height() - fbbtop)
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   163
            });
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   164
            currentVisibleFrame.find(".annotation-textarea").focus();
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   165
        } else {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   166
            $(".annotation-frame-box").hide();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   167
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   168
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   169
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   170
    function hideAllFrames() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   171
        if (currentVisibleFrame) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   172
            currentVisibleFrame.hide();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   173
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   174
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   175
        currentVisibleFrame = null;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   176
        showFrameBox();
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   177
        $(".annotation-list li").removeClass("selected");
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   178
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   179
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   180
    function showAnnotation(annotation) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   181
        var start = annotation.startOffset,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   182
            end = annotation.endOffset,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   183
            color = annotation.color;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   184
        var spans = [];
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   185
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   186
        for (var i = 0, l = textinfo.nodes.length; i < l; i++) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   187
            var nodeinfo = textinfo.nodes[i];
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   188
            if (nodeinfo.end > start && nodeinfo.start <= end) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   189
                var r = document.createRange(),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   190
                    s = document.createElement('span'),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   191
                    rangestart = Math.max(0, start - nodeinfo.start),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   192
                    rangeend = Math.min(nodeinfo.length, end - nodeinfo.start);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   193
                s.style.backgroundColor = color;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   194
                r.setStart(nodeinfo.textNode, rangestart);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   195
                r.setEnd(nodeinfo.textNode, rangeend);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   196
                r.surroundContents(s);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   197
                spans.push(s);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   198
            }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   199
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   200
        textinfo = parseContents(basenode);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   201
        var top = Math.min.apply(Math, spans.map(function(s) { return s.offsetTop })),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   202
            height = Math.max.apply(Math, spans.map(function(s) { return s.offsetHeight + s.offsetTop })) - top,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   203
            frame = $(frameTpl({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   204
                annotation: annotation,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   205
                top: top,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   206
                height: height,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   207
                left: basenode.offsetLeft
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   208
            })),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   209
            li = $(liTpl({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   210
                annotation: annotation
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   211
            }));
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   212
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   213
        $(".annotation-frames").append(frame);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   214
        $(".annotation-list").append(li);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   215
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   216
        frame.find(".annotation-textarea").on("keyup change", function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   217
            annotation.comment = $(this).val();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   218
            li.find(".annotation-comment").text(annotation.comment || "(Sans commentaire)");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   219
        });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   220
        
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   221
        var ontagchange = function(evt, ui) {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   222
            annotation.tags = $(this).tagit("assignedTags");
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   223
            li.find(".annotation-tags").text((annotation.tags || []).join(", ") || "(aucun mot-clé)");
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   224
        };
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   225
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   226
        frame.find(".annotation-tags-form").tagit({
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   227
            afterTagAdded: ontagchange,
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   228
            afterTagRemoved: ontagchange
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   229
        });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   230
        
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   231
        var show = function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   232
            if (mousedown) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   233
                return;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   234
            }
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   235
            shownByClick = false;
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   236
            currentVisibleFrame = frame;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   237
            frame.show();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   238
            showFrameBox();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   239
            li.addClass("selected");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   240
        }
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   241
                
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   242
        $(spans).mouseenter(show);
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   243
        
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   244
        frame
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   245
            .mouseleave(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   246
                if (!shownByClick) {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   247
                    hideAllFrames();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   248
                }
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   249
            })
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   250
            .click(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   251
                shownByClick = true;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   252
            });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   253
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   254
        frame.find(".annotation-form").submit(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   255
            hideAllFrames();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   256
            return false;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   257
        });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   258
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   259
        frame.find(".annotation-remove").click(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   260
            annotations = _(annotations).reject(function(a) {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   261
                return a === annotation
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   262
            });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   263
            $(spans).css("background-color","").off("mouseenter",show);
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   264
            li.remove();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   265
            frame.remove();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   266
            hideAllFrames();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   267
            return false;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   268
        });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   269
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   270
        li
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   271
            .mouseenter(function() {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   272
                $(spans).addClass("annotation-selected");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   273
                li.addClass("selected");
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   274
            })
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   275
            .mouseleave(function() {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   276
                $(spans).removeClass("annotation-selected");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   277
                li.removeClass("selected");
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   278
            })
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   279
            .click(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   280
                show();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   281
                shownByClick = true;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   282
                $(window).scrollTop(currentVisibleFrame.offset().top - 100);
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   283
            });
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   284
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   285
    
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   286
    annotations.forEach(function(annotation) {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   287
        showAnnotation(annotation);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   288
    });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   289
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   290
    $(".content")
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   291
        .mousedown(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   292
            mousedown = true;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   293
            dragging = false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   294
        })
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   295
        .mousemove(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   296
            if (mousedown) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   297
                dragging = true;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   298
            }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   299
        })
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   300
        .mouseup(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   301
            if (!dragging) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   302
                return;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   303
            }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   304
            var range = document.getSelection().getRangeAt(0);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   305
            if (!range.collapsed && range.startContainer._nodeInfo && range.endContainer._nodeInfo) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   306
                var start = range.startOffset + range.startContainer._nodeInfo.start,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   307
                    end = range.endOffset + range.endContainer._nodeInfo.start;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   308
                highlightText(start, end, colors[ncol++ % colors.length]);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   309
                document.getSelection().removeAllRanges();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   310
            }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   311
        });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   312
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   313
    $(window).mouseup(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   314
        mousedown = false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   315
        dragging = false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   316
    });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   317
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   318
    $(".annotation-frame-box").click(hideAllFrames);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   319
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   320
    $(window).resize(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   321
        showFrameBox();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   322
        $(".annotation-frame").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   323
            left: basenode.offsetLeft
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   324
        })
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   325
    })
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   326
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   327
});