integration/js/annotation-article.js
author Nicolas Sauret <nicolas.sauret@iri.centrepompidou.fr>
Fri, 18 Apr 2014 14:31:58 +0200
changeset 51 79833eaa394a
parent 36 bad0e6c60b63
permissions -rw-r--r--
set up second level for navigation
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,
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   109
            length: end - start,
31
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: "",
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   112
            creator: currentUser,
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   113
            tags: [],
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   114
            annotatedText: textinfo.text.substring(start, end),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   115
            beforeText: textinfo.text.substring(start - 40, start).replace(/^[\S]*\s+/,''),
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   116
            afterText: textinfo.text.substring(end, end + 40).replace(/\s+[\S]*$/,''),
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   117
            documentaryFile: currentDocumentaryFile
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   118
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   119
        annotations.push(annotation);
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   120
        showAnnotation(annotation, true);
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   121
        updateAnnotationCounts();
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   122
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   123
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   124
    var frameTpl = _.template(
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   125
        '<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
   126
        + '<div class="annotation-area" style="background-color: <%- annotation.color %>; height: <%- height %>px;"></div>'
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   127
        + '<form class="annotation-form"><h3>Annoté par&nbsp;: <em><%- annotation.creator.name %></em></h3>'
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   128
        + '<h3>Dossier documentaire&nbsp;: <em><%- annotation.documentaryFile.name %></em></h3><h3>Commentaire&nbsp;:</h3>'
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   129
        + '<% if (editable) { %><textarea class="annotation-textarea" placeholder="Mon commentaire&hellip;"><%- annotation.comment || "" %></textarea>'
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   130
        + '<% } else { %><p><%- annotation.comment || "(sans commentaire)" %></p><% } %>'
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   131
        + '<h3>Mots-clés&nbsp;:</h3>'
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   132
        + '<ul class="<%- editable ? "annotation-tags-form" : "" %>"><% _(annotation.tags).forEach(function(tag) { %><li><%- tag %></li><% }) %></ul>'
35
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   133
        + '<% if (editable) { %><h3><input class="annotation-public" type="checkbox" <% if (annotation.isPublic) {%>checked <% } %>/>Annotation publique</h3><div><a class="annotation-remove" href="#">Supprimer</a><input class="annotation-submit" type="submit" value="Enregistrer" /></div><% } %>'
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   134
        + '</form></div>'
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   135
    );
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   136
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   137
    var liTpl = _.template(
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   138
        '<li style="border-color: <%- annotation.color %>;"><div class="annotation-longview"><h3>Texte annoté&nbsp;:</h3></div>'
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   139
        + '<p class="annotation-text"><%- annotation.beforeText %><b><%- annotation.annotatedText %></b><%- annotation.afterText %></p>'
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   140
        + '<h3>Annoté par&nbsp;: <em><%- annotation.creator.name %></em></h3>'
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   141
        + '<div class="annotation-longview"><h3>Commentaire&nbsp;:</h3><p class="annotation-comment"><%- annotation.comment || "(Sans commentaire)" %></p>'
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   142
        + '<h3>Mots-clés&nbsp;:</h3><p class="annotation-tags"><%- (annotation.tags || []).join(", ") || "(aucun mot-clé)" %></p></div>'
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   143
        + '</li>'
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   144
    );
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   145
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   146
    function showFrameBox() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   147
        if (currentVisibleFrame) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   148
            $(".annotation-frame-box").show();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   149
            var offset = currentVisibleFrame.offset(),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   150
                width = currentVisibleFrame.outerWidth(),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   151
                height = currentVisibleFrame.outerHeight();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   152
            $(".annotation-fb-top").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   153
                height: offset.top - 77
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   154
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   155
            $(".annotation-fb-left").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   156
                top: offset.top,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   157
                height: height,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   158
                width: offset.left
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   159
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   160
            $(".annotation-fb-right").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   161
                top: offset.top,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   162
                height: height,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   163
                left: offset.left + width
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   164
            });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   165
            var fbbtop = offset.top + height;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   166
            $(".annotation-fb-bottom").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   167
                top: fbbtop,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   168
                height: ($("body").height() - fbbtop)
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   169
            });
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   170
            currentVisibleFrame.find(".annotation-textarea").focus();
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   171
        } else {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   172
            $(".annotation-frame-box").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
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   176
    function hideAllFrames() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   177
        if (currentVisibleFrame) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   178
            currentVisibleFrame.hide();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   179
        }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   180
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   181
        currentVisibleFrame = null;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   182
        showFrameBox();
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   183
        $(".annotation-blocks li").removeClass("selected");
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   184
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   185
    
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   186
    function showAnnotation(annotation, editAfterShow) {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   187
        var start = annotation.startOffset,
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   188
            end = annotation.length + start,
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   189
            color = annotation.color;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   190
        var spans = [];
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   191
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   192
        for (var i = 0, l = textinfo.nodes.length; i < l; i++) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   193
            var nodeinfo = textinfo.nodes[i];
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   194
            if (nodeinfo.end > start && nodeinfo.start <= end) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   195
                var r = document.createRange(),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   196
                    s = document.createElement('span'),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   197
                    rangestart = Math.max(0, start - nodeinfo.start),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   198
                    rangeend = Math.min(nodeinfo.length, end - nodeinfo.start);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   199
                s.style.backgroundColor = color;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   200
                r.setStart(nodeinfo.textNode, rangestart);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   201
                r.setEnd(nodeinfo.textNode, rangeend);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   202
                r.surroundContents(s);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   203
                spans.push(s);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   204
            }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   205
        }
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   206
        
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   207
        textinfo = parseContents(basenode);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   208
        var top = Math.min.apply(Math, spans.map(function(s) { return s.offsetTop })),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   209
            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
   210
            frame = $(frameTpl({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   211
                annotation: annotation,
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   212
                editable: (currentUser.id === annotation.creator.id),
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   213
                top: top,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   214
                height: height,
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   215
                left: basenode.offsetLeft
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   216
            })),
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   217
            li = $(liTpl({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   218
                annotation: annotation
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   219
            }));
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   220
        
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   221
        $(".annotation-frames").append(frame);
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   222
        $(annotation.documentaryFile.id === currentDocumentaryFile.id ? ".annotation-file-list" : ".annotation-other-list").append(li);
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   223
        
35
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   224
        frame.find(".annotation-textarea").on("keyup paste input change", function() {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   225
            annotation.comment = $(this).val();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   226
            li.find(".annotation-comment").text(annotation.comment || "(Sans commentaire)");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   227
        });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   228
        
35
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   229
        frame.find(".annotation-public").change(function() {
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   230
            annotation.isPublic = $(this).is(":checked");
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   231
        });
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   232
        
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   233
        frame.find("")
63dae3d25255 Added Public checkbox
veltr
parents: 33
diff changeset
   234
        
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   235
        var ontagchange = function(evt, ui) {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   236
            annotation.tags = $(this).tagit("assignedTags");
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   237
            li.find(".annotation-tags").text((annotation.tags || []).join(", ") || "(aucun mot-clé)");
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   238
        };
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   239
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   240
        frame.find(".annotation-tags-form").tagit({
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   241
            afterTagAdded: ontagchange,
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   242
            afterTagRemoved: ontagchange
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   243
        });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   244
        
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   245
        var show = function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   246
            if (mousedown) {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   247
                return;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   248
            }
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   249
            shownByClick = false;
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   250
            currentVisibleFrame = frame;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   251
            frame.show();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   252
            showFrameBox();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   253
            li.addClass("selected");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   254
        }
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   255
                
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   256
        $(spans).mouseenter(show);
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   257
        
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   258
        frame
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   259
            .mouseleave(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   260
                if (!shownByClick) {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   261
                    hideAllFrames();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   262
                }
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   263
            })
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   264
            .click(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   265
                shownByClick = true;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   266
            });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   267
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   268
        frame.find(".annotation-form").submit(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   269
            hideAllFrames();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   270
            return false;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   271
        });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   272
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   273
        frame.find(".annotation-remove").click(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   274
            annotations = _(annotations).reject(function(a) {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   275
                return a === annotation
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   276
            });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   277
            $(spans).css("background-color","").off("mouseenter",show);
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   278
            li.remove();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   279
            frame.remove();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   280
            hideAllFrames();
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   281
            updateAnnotationCounts();
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   282
            return false;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   283
        });
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   284
        
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   285
        li
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   286
            .mouseenter(function() {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   287
                $(spans).addClass("annotation-selected");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   288
                li.addClass("selected");
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   289
                li.find(".annotation-longview").stop().slideDown();
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   290
            })
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   291
            .mouseleave(function() {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   292
                $(spans).removeClass("annotation-selected");
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   293
                li.removeClass("selected");
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   294
                li.find(".annotation-longview").stop().slideUp();
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   295
            })
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   296
            .click(function() {
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   297
                show();
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   298
                shownByClick = true;
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   299
                $(window).scrollTop(currentVisibleFrame.offset().top - 100);
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   300
            });
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   301
        
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   302
        if (editAfterShow) {
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   303
            show();
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   304
            shownByClick = true;
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   305
        }
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   306
        
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   307
    }
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   308
    
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   309
    function updateAnnotationCounts() {
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   310
        $(".annotation-blocks .block").each(function() {
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   311
            var $this = $(this), n = $this.find("li").length;
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   312
            $this.find(".annotations-count").text(n || "aucune");
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   313
            if (n > 1) {
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   314
                $this.find(".annotation-plural").show();
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   315
            } else {
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   316
                $this.find(".annotation-plural").hide();
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   317
            }
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   318
        })
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   319
    }
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   320
    
32
3612737630f4 Improved interactions on text annotator
veltr
parents: 31
diff changeset
   321
    annotations.forEach(function(annotation) {
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   322
        showAnnotation(annotation);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   323
    });
36
bad0e6c60b63 Added local/other distinction in annotations
veltr
parents: 35
diff changeset
   324
    updateAnnotationCounts();
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   325
    
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   326
    var range = null;
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   327
        
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   328
    $(".content").mouseup(function(e) {
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   329
        range = document.getSelection().getRangeAt(0);
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   330
        var addann = $(".add-annotation");
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   331
        if (!range.collapsed && range.startContainer._nodeInfo && range.endContainer._nodeInfo && range.toString() !== " ") {
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   332
            addann.show();
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   333
            var doc = $(document), rect = range.getBoundingClientRect();
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   334
            addann.css({
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   335
                left: doc.scrollLeft() + rect.right + 5,
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   336
                top: doc.scrollTop() + (rect.top + rect.bottom - addann.outerHeight()) / 2,
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   337
            });
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   338
        } else {
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   339
            range = null;
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   340
            $(".add-annotation").hide();
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   341
        }
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   342
    }).mousedown(function() {
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   343
        $(".add-annotation").hide();
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   344
    });
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   345
    
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   346
    $(".add-annotation").click(function() {
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   347
        $(".add-annotation").hide();
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   348
        if (range) {
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   349
            var start = range.startOffset + range.startContainer._nodeInfo.start,
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   350
                end = range.endOffset + range.endContainer._nodeInfo.start;
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   351
            highlightText(start, end, colors[ncol++ % colors.length]);
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   352
            document.getSelection().removeAllRanges();
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   353
        }
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   354
    });
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   355
            
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   356
    $(window).mouseup(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   357
        mousedown = false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   358
        dragging = false;
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   359
    });
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   360
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   361
    $(".annotation-frame-box").click(hideAllFrames);
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   362
    
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   363
    $(window).resize(function() {
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   364
        showFrameBox();
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   365
        $(".annotation-frame").css({
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   366
            left: basenode.offsetLeft
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   367
        })
33
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   368
    });
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   369
    
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   370
    $(".add-annotation").css({
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   371
        left: (basenode.offsetLeft + 500)
8d7e6a9018fc Two steps to add a comment
veltr
parents: 32
diff changeset
   372
    });
31
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   373
059e197617bb Added First version of Text Annotator
veltr
parents:
diff changeset
   374
});