web/hdalab/static/hdalab/js/trees.js
author veltr
Thu, 11 Oct 2012 18:22:45 +0200
changeset 252 a46461f8a74f
child 253 1113c3874dd6
permissions -rw-r--r--
Separated Thesaurus and WP Categories
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
252
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     1
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     2
function countContentsAndThemes(_data) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     3
    _data.counts = {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     4
        contents: (typeof _data.contents == "object" && typeof _data.contents.slice == "function" ? _data.contents.length : 0),
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     5
        themes: (typeof _data.themes == "object" && typeof _data.themes.slice == "function" ? _data.themes.length : 0)
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     6
    }
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     7
    if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     8
        for (var _i = 0; _i < _data.themes.length; _i++) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
     9
            countContentsAndThemes(_data.themes[_i]);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    10
            var _subres = _data.themes[_i].counts;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    11
            _data.counts.contents += _subres.contents;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    12
            _data.counts.themes += _subres.themes;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    13
        }
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    14
    }
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    15
}
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    16
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    17
function renderTemplate(_data, _level, _scale) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    18
    _data.level = !!_level;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    19
    _(_data.tags).each(function(_tag) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    20
        _(_tag.contents).each(function(_content, _key) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    21
            _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1&hellip;');
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    22
            _content.hidden = (_key >= 5);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    23
        });
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    24
        _tag.show_more = _tag.contents && _tag.contents.length > 5 ? _tag.contents.length - 5 : 0;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    25
    });
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    26
    _(_data.contents).each(function(_content, _key) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    27
        _content.trimmed_description = _content.description.trim().replace(/(\n|\r|\r\n)/mg,' ').replace(/(^.{150,200})[\s].+$/m,'$1&hellip;');
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    28
        _content.hidden = (_key >= 5);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    29
    });
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    30
    _data.show_more = _data.contents && _data.contents.length > 5 ? _data.contents.length - 5 : 0;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    31
    _data.font_size = (10+Math.log(_data.counts.contents)*_scale);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    32
    var _prefix = '<li class="themeli {{#level}}folded {{/level}}"><p class="theme"><span style="font-size: {{font_size}}px">{{label}}</span> &mdash; {{#counts.themes}}{{counts.themes}} thème(s){{#counts.contents}}, {{/counts.contents}}{{/counts.themes}}{{#counts.contents}}{{counts.contents}} notice(s){{/counts.contents}}</p><ul>',
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    33
        _suffix = '{{#contents}}<li class="content{{#hidden}} hidden{{/hidden}}" id="content_{{id}}"><p class="title score_{{score}}">{{title}}</p><div class="foldedcontent"><div class="img-container"><img src="http://www.histoiredesarts.culture.fr/images/cached/images/{{hda_id}}.jpg" />'
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    34
            + '</div><p class="description">Source: {{organization}}<br /><a href="{{url}}" target="_blank" class="content">{{trimmed_description}}</a></p></div></li>{{/contents}}{{#show_more}}<li class="show_more">Plus de contenus (<span class="show_more_count">{{show_more}}</span>)&hellip;</li>{{/show_more}}</ul></li>',
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    35
        _html = Mustache.to_html(_prefix, _data);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    36
    if (typeof _data.themes == "object" && typeof _data.themes.slice == "function") {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    37
        for (var _i = 0; _i < _data.themes.length; _i++) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    38
            _html += renderTemplate(_data.themes[_i], _level + 1, _scale);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    39
        }
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    40
    }
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    41
    _html += Mustache.to_html(_suffix, _data);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    42
    return _html;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    43
}
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    44
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    45
function renderData(_selector, _data) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    46
    countContentsAndThemes(_data);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    47
    var _scale = 8 / Math.max(1,Math.log(_data.counts.contents));
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    48
    _selector.html(renderTemplate(_data, 0, _scale));
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    49
    _selector.find("p.theme").click(function() {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    50
        $(this).parent().toggleClass("folded")
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    51
        return false;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    52
    });
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    53
    _selector.find("li.content").mouseenter(function() {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    54
        $(this).find(".foldedcontent")
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    55
        .dequeue()
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    56
        .animate({
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    57
            height: 5 + $(this).find("p.description").outerHeight()
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    58
        },
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    59
        500);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    60
    }).mouseleave(function() {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    61
        $(this).find(".foldedcontent")
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    62
        .dequeue()
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    63
        .animate({
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    64
            height: "0"
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    65
        },
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    66
        500);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    67
    });
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    68
    _selector.find(".show_more").click(function() {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    69
        $(this).siblings(".hidden:lt(5)").removeClass("hidden");
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    70
        var _l = $(this).siblings(".hidden").length;
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    71
        $(this).find(".show_more_count").html(_l);
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    72
        if (!_l) {
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    73
            $(this).detach();
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    74
        } 
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    75
    });
a46461f8a74f Separated Thesaurus and WP Categories
veltr
parents:
diff changeset
    76
}