summaryrefslogtreecommitdiffstats
path: root/leafymiracle/widgets.py
blob: d2b38c0fca9e35a4562ae3866e9c72ddaf38800e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# Copyright (C) 2011 Luke Macken <lmacken@redhat.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

from tw2.jit import SQLARadialGraph
from tw2.core.resources import JSSymbol

from leafymiracle import models

# Using mihmo's mathematically nice colors for fedora.
# http://mihmo.livejournal.com/37350.html
triads = ["#3c6eb4", "#b53c6e", "#6eb53c"]
triads_dark = ["#294172", "#732942", "#427329"]


class LeafyGraph(SQLARadialGraph):
    id = 'leafy_graph'
    entities = [models.Root, models.Category, models.Group, models.Package]
    base_url = '/data'
    width = '1000'
    height = '750'
    depth = 2
    levelDistance = 150
    alphabetize_relations = 24
    alphabetize_minimal = True
    show_attributes = False
    imply_relations = True
    auto_labels = False
    excluded_columns = ['group']
    deep_linking = True
    #transition = JSSymbol(src='$jit.Trans.Back.easeInOut')
    duration = 400

    backgroundcolor = '#FFFFFF'
    background = { 'CanvasStyles': { 'strokeStyle' : '#FFFFFF' } }
    Node = { 'color' : triads[1] }
    Edge = { 'color' : triads[2], 'lineWidth':1.5, }

    # Override the label style
    onPlaceLabel = JSSymbol(src="""
        (function(domElement, node){
            domElement.style.display = "none";
            domElement.innerHTML = node.name;
            domElement.style.display = "";
            var left = parseInt(domElement.style.left);
            domElement.style.width = '120px';
            domElement.style.height = '';
            var w = domElement.offsetWidth;
            domElement.style.left = (left - w /2) + 'px';

            domElement.style.cursor = 'pointer';
            if ( node._depth <= 1 )
                domElement.style.color = '%s';
            else
                domElement.style.color = '%s';
        })""" % (triads[0], triads_dark[0]))