src/egonomy/models.py
author Anthony Ly <anthonyly.com@gmail.com>
Thu, 27 Jun 2013 17:38:53 +0200
changeset 188 aa163c5df6e3
parent 175 8f6eef1d1fc8
child 191 d7b30914607d
permissions -rw-r--r--
Merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Jan 28, 2013
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
@author: ymh
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from django.db import models
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from django.contrib.auth.models import User
159
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
    10
from django.contrib.contenttypes.models import ContentType
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
    11
from django.contrib.contenttypes import generic
21
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
class ImageMetadata(models.Model):
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    id = models.CharField(null=False, blank=False, max_length=15, primary_key=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    date_inserted = models.DateTimeField(null=False, blank=False, auto_now_add=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    date_modified = models.DateTimeField(null=False, blank=False, auto_now=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    cliche = models.CharField(null=False, blank=False, max_length=15)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    inventaire = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    titre = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    description = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    date = models.IntegerField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    longueur = models.DecimalField(null=True, blank=True, max_digits=20, decimal_places=15)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    hauteur = models.DecimalField(null=True, blank=True, max_digits=20, decimal_places=15)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    profondeur = models.DecimalField(null=True, blank=True, max_digits=20, decimal_places=15)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    diametre = models.DecimalField(null=True, blank=True, max_digits=20, decimal_places=15)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    photographe = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    auteur = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    droits = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    mentions = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    periode = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    technique = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    site = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    lieu = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    localisation = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    mots_cles = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    titre_pertimm = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    description_pertimm = models.TextField(null=True, blank=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    thesaurus_pertimm = models.TextField(null=True, blank=True)
67
a085d708c407 user fragment page and enhance pertimm display.
cavaliet
parents: 21
diff changeset
    42
    
a085d708c407 user fragment page and enhance pertimm display.
cavaliet
parents: 21
diff changeset
    43
    @property
69
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    44
    def mots_cles_list(self):
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    45
        return self.mots_cles.split(",")
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    46
    
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    47
    @property
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    48
    def titre_pertimm_list(self):
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    49
        return self.titre_pertimm.split(",")
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    50
    
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    51
    @property
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    52
    def description_pertimm_list(self):
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    53
        return self.description_pertimm.split(",")
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    54
    
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    55
    @property
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    56
    def thesaurus_pertimm_list(self):
412ab5e76c65 Clickable tags to easily add tags from rmn and pertimm.
cavaliet
parents: 67
diff changeset
    57
        return self.thesaurus_pertimm.replace("|", ",").split(",")
140
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    58
    
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    59
    @property
175
8f6eef1d1fc8 collection available in list and mosaic
cavaliet
parents: 168
diff changeset
    60
    def tag_list(self):
140
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    61
        # all keywords mots_cles + titre_pertimm+ description_pertimm + thesaurus_pertimmreturn
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    62
        # merged into one sorted list
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    63
        moc = self.mots_cles.split(",")
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    64
        tip = self.titre_pertimm.split(",")
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    65
        dep = self.description_pertimm.split(",")
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    66
        thp = self.thesaurus_pertimm.replace("|", ",").split(",")
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    67
        # sort by alphabetical order (sorted) and remove duplicates (set)
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    68
        l = sorted(list(set(moc + tip + dep + thp)), key=unicode.lower)
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
    69
        return l
21
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
class ImageInfo(models.Model):
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    id = models.CharField(null=False, blank=False, max_length=15, primary_key=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    image_file = models.ImageField(width_field = "width", height_field= "height", upload_to="images/", max_length=2048)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
    width = models.IntegerField(null=False, blank=False)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    height = models.IntegerField(null=False, blank=False)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    mimetype = models.CharField(null=True, blank=True, max_length=1024)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    exif = models.TextField(null=True, blank=True) #json value for exif data if available
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
class Image(models.Model):
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    id = models.CharField(null=False, blank=False, max_length=15, primary_key=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    metadata = models.ForeignKey(ImageMetadata)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    info = models.ForeignKey(ImageInfo, null=True, blank=True)
175
8f6eef1d1fc8 collection available in list and mosaic
cavaliet
parents: 168
diff changeset
    87
    
8f6eef1d1fc8 collection available in list and mosaic
cavaliet
parents: 168
diff changeset
    88
    @property
8f6eef1d1fc8 collection available in list and mosaic
cavaliet
parents: 168
diff changeset
    89
    def tag_list(self):
8f6eef1d1fc8 collection available in list and mosaic
cavaliet
parents: 168
diff changeset
    90
        return self.metadata.tag_list
21
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
class Fragment(models.Model):
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    image = models.ForeignKey(Image, blank=False, null=False)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    date_created = models.DateTimeField(blank=False, null=False, auto_now_add=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    date_saved = models.DateTimeField(blank=False, null=False, auto_now=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
    coordinates = models.TextField(blank=False, null=False)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    author = models.ForeignKey(User, blank=False, null=False)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    title = models.CharField(max_length=2048, blank=True, null=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    description = models.TextField(blank=True, null=True)
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    tags = models.TextField(blank=True, null=True)
74
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   103
    
149
af59627418e7 view fragment with new style
cavaliet
parents: 140
diff changeset
   104
    @property
af59627418e7 view fragment with new style
cavaliet
parents: 140
diff changeset
   105
    def tag_list(self):
af59627418e7 view fragment with new style
cavaliet
parents: 140
diff changeset
   106
        # tags in list
af59627418e7 view fragment with new style
cavaliet
parents: 140
diff changeset
   107
        return self.tags.split(",")
af59627418e7 view fragment with new style
cavaliet
parents: 140
diff changeset
   108
    
74
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   109
    
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   110
    def get_viewbox_info(self):
89
da5504ff262e debug and first step of senseetive request
cavaliet
parents: 74
diff changeset
   111
        if not self.coordinates or self.coordinates=="MZ" or self.coordinates=="":
74
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   112
            return None,None,None,None
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   113
        # Now we split the coordinates to get the path points's max and min x and y
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   114
        # A typical path is M0.1995 0.1574L0.3718 0.0131L0.7731 0.0597L0.5126 0.2915Z
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   115
        points_str = self.coordinates.strip("M").strip("Z").split("L")
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   116
        points_x = []
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   117
        points_y = []
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   118
        for p in points_str:
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   119
            xy = p.split(" ")
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   120
            points_x.append(float(xy[0]))
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   121
            points_y.append(float(xy[1]))
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   122
        # At this point, values are floats like 19.95, 15.74...
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   123
        min_x = min(points_x)
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   124
        max_x = max(points_x)
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   125
        min_y = min(points_y)
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   126
        max_y = max(points_y)
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   127
        # At this point, values are floats like 19, 15...
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   128
        # Now we build the viewbox, which is min_x min_y (max_x-min_x) (max_y-min_y) with number like 0.19 0.15...
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   129
        # We use floor and +2 for the viewbox to be a bit larger than the strict fragment
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   130
        vb_x = min_x
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   131
        vb_y = min_y
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   132
        vb_w = max_x - min_x
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   133
        vb_h = max_y - min_y
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   134
        return vb_x, vb_y, vb_w, vb_h
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   135
    
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   136
    # This property returns a ratio between width and height
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   137
    @property
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   138
    def ratio(self):
89
da5504ff262e debug and first step of senseetive request
cavaliet
parents: 74
diff changeset
   139
        if not self.coordinates or self.coordinates=="MZ" or self.coordinates=="":
93
0a75599363e9 Senseetive api : generate fragment with good ratio and not forced square.
cavaliet
parents: 89
diff changeset
   140
            return 1
74
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   141
        _, _, vb_w, vb_h = self.get_viewbox_info()
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   142
        return vb_w/vb_h
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   143
    
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   144
    # This property returns a viewbox used in the swg xml and enbling to see the fragment only
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   145
    @property
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   146
    def viewbox(self):
89
da5504ff262e debug and first step of senseetive request
cavaliet
parents: 74
diff changeset
   147
        if not self.coordinates or self.coordinates=="MZ" or self.coordinates=="":
74
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   148
            return "0 0 1 1"
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   149
        vb_x, vb_y, vb_w, vb_h = self.get_viewbox_info()
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   150
        vb = str(vb_x) + " " + str(vb_y) + " " + str(vb_w) + " " + str(vb_h)
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   151
        return vb
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   152
    
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   153
    # This property returns a square viewbox used in the swg xml and enbling to see the fragment only
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   154
    @property
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   155
    def viewbox_square(self):
89
da5504ff262e debug and first step of senseetive request
cavaliet
parents: 74
diff changeset
   156
        if not self.coordinates or self.coordinates=="MZ" or self.coordinates=="":
74
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   157
            return "0 0 1 1"
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   158
        vb_x, vb_y, vb_w, vb_h = self.get_viewbox_info()
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   159
        img_info = self.image.info
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   160
        img_ratio = float(img_info.width) / float(img_info.height)
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   161
        if vb_w > vb_h:
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   162
            # If fragment w > h, we center the fragment on y ...
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   163
            vb_y = max(0, vb_y - (((vb_w * img_ratio) - vb_h) / 2))
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   164
            # ... and resize the viewbox's h with image's ratio
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   165
            vb_h = vb_w * img_ratio
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   166
        else:
140
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   167
            # If fragment w <= h, we center the fragment on x ...
74
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   168
            vb_x = max(0, vb_x - (((vb_h / img_ratio) - vb_w) / 2))
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   169
            # ... and we resize the viewbox's w with image's ratio
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   170
            vb_w = vb_h / img_ratio
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   171
        vb = str(vb_x) + " " + str(vb_y) + " " + str(vb_w) + " " + str(vb_h)
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   172
        
5a3d8a3eb34d Display fragment only in all_fragment template.
cavaliet
parents: 69
diff changeset
   173
        return vb
140
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   174
159
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   175
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   176
140
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   177
class Collection(models.Model):
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   178
    
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   179
    SLIDESHOW = 1
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   180
    MOSAIC = 2
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   181
    GEOGRAPHICAL = 3
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   182
      
159
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   183
    PUBLICATION_CHOICES = (
140
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   184
    (SLIDESHOW, 'slideshow'),
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   185
    (MOSAIC, 'mosaic'),
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   186
    (GEOGRAPHICAL, 'geographical')
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   187
    )
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   188
    
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   189
    
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   190
    title = models.CharField(max_length=2048, blank=True, null=True)
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   191
    description = models.TextField(blank=True, null=True)
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   192
    author = models.ForeignKey(User, blank=False, null=False)
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   193
    creation = models.DateTimeField(auto_now_add=True)
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   194
    modification = models.DateTimeField(auto_now=True)
159
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   195
    public = models.BooleanField(null=False, default=True) # Collection is published or not, always published by default
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   196
    publication_type = models.IntegerField(choices=PUBLICATION_CHOICES, default=1) # slideshow, mosaic ou geographical
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   197
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   198
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   199
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   200
class CollectionItem(models.Model):
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   201
    
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   202
    content_type = models.ForeignKey(ContentType) # can be image ou fragment
168
c90576d18319 argumentaire/list collection view
cavaliet
parents: 159
diff changeset
   203
    object_id = models.CharField(null=False, blank=False, max_length=15) # has to be char because of image id
159
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   204
    content_object = generic.GenericForeignKey('content_type', 'object_id')
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   205
    description = models.TextField(blank=True, null=True)
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   206
    order = models.IntegerField()
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   207
    # An item belongs to only one collection. Collection will have "items" related name.
b98558f8d2c1 collection first step
cavaliet
parents: 149
diff changeset
   208
    collection = models.ForeignKey(Collection, related_name='items')
140
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   209
    
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   210
    
bfe995fae627 update js and new view image template
cavaliet
parents: 93
diff changeset
   211
    
21
5f3e270580af First model or egonomy
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212