Gitlab CSE Unil

Commit 25900a04 authored by Julien Furrer's avatar Julien Furrer
Browse files

Added support for external images

a field image_url added to AnObj
Image is loaded by a img tag with "crossorigin"
attribute set to "anonymous".
The paper.Raster object is build using the img tag
instead of the direct url. Also for local images.
parent 3ceafcdf
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'AnObj._image_url'
db.add_column(u'adim_anobj', '_image_url',
self.gf('django.db.models.fields.CharField')(default=u'', max_length=512, null=True, blank=True),
keep_default=False)
# Changing field 'AnObj.image'
db.alter_column(u'adim_anobj', 'image', self.gf('django.db.models.fields.files.ImageField')(max_length=100, null=True))
def backwards(self, orm):
# Deleting field 'AnObj._image_url'
db.delete_column(u'adim_anobj', '_image_url')
# Changing field 'AnObj.image'
db.alter_column(u'adim_anobj', 'image', self.gf(u'sorl.thumbnail.fields.ImageField')(max_length=100, null=True))
models = {
u'adim.annotation': {
'Meta': {'ordering': "(u'owner__id', u'-order', u'modification_date')", 'object_name': 'Annotation'},
'annotable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'annotations'", 'to': u"orm['adim.AnObj']"}),
'comment': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '512', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'item': ('django.db.models.fields.TextField', [], {}),
'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
},
u'adim.anobj': {
'Meta': {'ordering': "[u'-id']", 'object_name': 'AnObj'},
'_image_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '512', 'null': 'True', 'blank': 'True'}),
'_thumb_url': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
'ao_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['adim.AOType']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
'shared': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'blank': 'True'})
},
u'adim.aoattribute': {
'Meta': {'object_name': 'AOAttribute'},
'choice': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['adim.AOChoice']", 'null': 'True', 'blank': 'True'}),
'entity_id': ('django.db.models.fields.IntegerField', [], {}),
'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'schema': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'attrs'", 'to': u"orm['adim.AOSchema']"}),
'value_bool': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'value_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'value_range_max': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'value_range_min': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'value_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
},
u'adim.aochoice': {
'Meta': {'object_name': 'AOChoice'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'schema': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'choices'", 'to': u"orm['adim.AOSchema']"}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'adim.aoschema': {
'Meta': {'object_name': 'AOSchema'},
'ao_types': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['adim.AOType']", 'null': 'True', 'blank': 'True'}),
'datatype': ('django.db.models.fields.CharField', [], {'max_length': '5'}),
'filtered': ('django.db.models.fields.BooleanField', [], {}),
'help_text': ('django.db.models.fields.CharField', [], {'max_length': '250', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('autoslug.fields.AutoSlugField', [], {'unique_with': '()', 'max_length': '250', 'populate_from': "'title'", 'blank': 'True'}),
'required': ('django.db.models.fields.BooleanField', [], {}),
'searched': ('django.db.models.fields.BooleanField', [], {}),
'sortable': ('django.db.models.fields.BooleanField', [], {}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '250'})
},
u'adim.aotype': {
'Meta': {'object_name': 'AOType'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'title': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '512', 'blank': 'True'})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['adim']
\ No newline at end of file
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting field 'AnObj._image_url'
db.delete_column(u'adim_anobj', '_image_url')
# Adding field 'AnObj.image_url'
db.add_column(u'adim_anobj', 'image_url',
self.gf('django.db.models.fields.CharField')(default=u'', max_length=512, null=True, blank=True),
keep_default=False)
def backwards(self, orm):
# Adding field 'AnObj._image_url'
db.add_column(u'adim_anobj', '_image_url',
self.gf('django.db.models.fields.CharField')(default=u'', max_length=512, null=True, blank=True),
keep_default=False)
# Deleting field 'AnObj.image_url'
db.delete_column(u'adim_anobj', 'image_url')
models = {
u'adim.annotation': {
'Meta': {'ordering': "(u'owner__id', u'-order', u'modification_date')", 'object_name': 'Annotation'},
'annotable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'annotations'", 'to': u"orm['adim.AnObj']"}),
'comment': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '512', 'blank': 'True'}),
'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'item': ('django.db.models.fields.TextField', [], {}),
'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
},
u'adim.anobj': {
'Meta': {'ordering': "[u'-id']", 'object_name': 'AnObj'},
'_thumb_url': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
'ao_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['adim.AOType']", 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'image_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '512', 'null': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
'shared': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32', 'blank': 'True'})
},
u'adim.aoattribute': {
'Meta': {'object_name': 'AOAttribute'},
'choice': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['adim.AOChoice']", 'null': 'True', 'blank': 'True'}),
'entity_id': ('django.db.models.fields.IntegerField', [], {}),
'entity_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'schema': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'attrs'", 'to': u"orm['adim.AOSchema']"}),
'value_bool': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
'value_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
'value_float': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'value_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
'value_range_max': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'value_range_min': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
'value_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
},
u'adim.aochoice': {
'Meta': {'object_name': 'AOChoice'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'schema': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'choices'", 'to': u"orm['adim.AOSchema']"}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'adim.aoschema': {
'Meta': {'object_name': 'AOSchema'},
'ao_types': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['adim.AOType']", 'null': 'True', 'blank': 'True'}),
'datatype': ('django.db.models.fields.CharField', [], {'max_length': '5'}),
'filtered': ('django.db.models.fields.BooleanField', [], {}),
'help_text': ('django.db.models.fields.CharField', [], {'max_length': '250', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('autoslug.fields.AutoSlugField', [], {'unique_with': '()', 'max_length': '250', 'populate_from': "'title'", 'blank': 'True'}),
'required': ('django.db.models.fields.BooleanField', [], {}),
'searched': ('django.db.models.fields.BooleanField', [], {}),
'sortable': ('django.db.models.fields.BooleanField', [], {}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '250'})
},
u'adim.aotype': {
'Meta': {'object_name': 'AOType'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'title': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '512', 'blank': 'True'})
},
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['adim']
\ No newline at end of file
......@@ -92,6 +92,7 @@ class AnObj(BaseEntity):
filename
)
image = models.ImageField(upload_to=get_image_path, verbose_name=_("image"), blank=True, null=True)
image_url = models.CharField(max_length=512, verbose_name=_("image url"), blank=True, null=True, default="")
_thumb_url = models.CharField(max_length=512, blank=True, null=True)
......
......@@ -513,7 +513,6 @@ function ($, paper, Signal, config, tools) {
_raster = new paper.Raster();
_raster.onLoad = function() {
var currentLayer = paper.project.activeLayer;
imageLayer.activate();
......@@ -539,7 +538,8 @@ function ($, paper, Signal, config, tools) {
callback.call(scope, _raster);
}
};
_raster.source = imageConfig.url;
_raster.source = "adim-src-image"; //imageConfig.url;
_raster.position = [0,0];
currentLayer.activate();
......
......@@ -31,7 +31,7 @@ requirejs.config({
jquery: '../_src/lib/jquery/dist/jquery.min',
backbone: '../_src/lib/backbone/backbone-min',
underscore: '../_src/lib/underscore/underscore-min',
paper: '../_src/lib/paper/dist/paper-core.min',
paper: '../_src/lib/paper/dist/paper-core',
signals: '../_src/lib/signals/dist/signals.min',
FileSaver: '../_src/lib/FileSaver/FileSaver',
canvasToBlob: '../_src/lib/blueimp-canvas-to-blob/js/canvas-to-blob.min',
......
......@@ -49,11 +49,10 @@ window.ADIM_CONFIG = {
id: {{ anobj.id }},
title: '{{ anobj.name|escapejs }}',
slug: '{{ anobj.name|slugify }}',
image: 'image/',
image: '{{ anobj.image_url|default:"image/" }}',
thumbnail: 'thumb/'
{# image: '{% url "adim.app:ao_image" anobj_uuid=anobj.uuid %}'#}
},
users: {},
user: {
......@@ -119,6 +118,7 @@ window.ADIM_CONFIG = {
{% block main_container %}
{{ block.super }}
<img src='{{ anobj.image_url|default:"image/" }}' crossorigin="anonymous" id="adim-src-image" style="display:none;">
{% comment %}<div class="container-fluid" id="main">
{% if mode != 'review' %}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment