parent
e99f3b011e
commit
c3143027c5
23 changed files with 556 additions and 1875 deletions
@ -1,97 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
from functools import update_wrapper, partial |
|
||||||
|
|
||||||
from django.contrib import admin |
|
||||||
from django.contrib.admin.util import unquote |
|
||||||
from django.conf.urls import patterns, url |
|
||||||
from django.core.exceptions import PermissionDenied |
|
||||||
from django.core.urlresolvers import reverse_lazy, reverse |
|
||||||
from django.http import Http404 |
|
||||||
from django.utils.translation import ugettext_lazy as _ |
|
||||||
from django.utils.html import escape |
|
||||||
from django.utils.encoding import force_text |
|
||||||
|
|
||||||
from functions.admin import DefaultAdmin |
|
||||||
from functions.http import JsonResponse |
|
||||||
|
|
||||||
from .models import Comment |
|
||||||
|
|
||||||
|
|
||||||
class CommentAdmin(DefaultAdmin): |
|
||||||
class Media: |
|
||||||
js = ( |
|
||||||
"js/jquery.truncator.js", |
|
||||||
"admin/js/comments_manage.js", |
|
||||||
) |
|
||||||
# css = { |
|
||||||
# 'all': ("admin/css/comments_manage.css",), |
|
||||||
# } |
|
||||||
list_display = ['text', 'ip', 'user', 'hide'] |
|
||||||
list_select_related = True |
|
||||||
list_filter = ('hidden', ) |
|
||||||
date_hierarchy = 'created' |
|
||||||
readonly_fields = ['ip', 'created', 'parent', 'user'] |
|
||||||
fieldsets = ( |
|
||||||
(None, |
|
||||||
{'fields': (('created', 'hidden',), |
|
||||||
'ip', |
|
||||||
'user', |
|
||||||
'text', )}), |
|
||||||
) |
|
||||||
|
|
||||||
def hide(self, obj): |
|
||||||
body = u'<img src="{url}" alt={alt}>' \ |
|
||||||
u' <a class="action" href="{href}">{label}</a>' \ |
|
||||||
u' | <a class="action" href="{href2}">{label2}</a>'\ |
|
||||||
.format(**self.get_yesno_image_data(obj)) |
|
||||||
return body |
|
||||||
hide.short_description = _(u'Модерирование') |
|
||||||
hide.allow_tags = True |
|
||||||
|
|
||||||
def urls(self): |
|
||||||
urlpatterns = self.get_urls() |
|
||||||
def wrap(view): |
|
||||||
def wrapper(*args, **kwargs): |
|
||||||
return self.admin_site.admin_view(view)(*args, **kwargs) |
|
||||||
return update_wrapper(wrapper, view) |
|
||||||
info = self.model._meta.app_label, self.model._meta.module_name |
|
||||||
_urlpatterns = patterns('', |
|
||||||
url(r'^(?P<object_id>\d+)/ajax/(?P<action>hide|show|banro|unbanro)/$', |
|
||||||
wrap(self.ajax_view), |
|
||||||
name='%s_%s_ajax' % info), |
|
||||||
) |
|
||||||
return _urlpatterns + urlpatterns |
|
||||||
urls = property(urls) |
|
||||||
|
|
||||||
def get_yesno_image_data(self, obj): |
|
||||||
return { |
|
||||||
'url': '/static/admin/img/icon-{0}.gif'.format('no' if obj.hidden else 'yes'), |
|
||||||
'alt': str(not obj.hidden), |
|
||||||
'href': reverse('admin:comments_comment_ajax', args=[obj.id, 'hide' if not obj.hidden else 'show']), |
|
||||||
'label': unicode(_(u'Опубликовать') if obj.hidden else _(u'Скрыть')), |
|
||||||
'href2': reverse('admin:comments_comment_ajax', args=[obj.id, 'banro' if not obj.user.readonly else 'unbanro']), |
|
||||||
'label2': unicode(_(u'Снять RO') if obj.user.readonly else _(u'Наложить RO')), |
|
||||||
} |
|
||||||
|
|
||||||
def ajax_view(self, request, object_id, extra_context=None, *args, **kwargs): |
|
||||||
"The 'change' admin view for this model." |
|
||||||
action = kwargs.get('action') |
|
||||||
model = self.model |
|
||||||
opts = model._meta |
|
||||||
obj = self.get_object(request, unquote(object_id)) |
|
||||||
if not self.has_change_permission(request, obj) or not request.is_ajax(): |
|
||||||
raise PermissionDenied |
|
||||||
if obj is None: |
|
||||||
raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_text(opts.verbose_name), 'key': escape(object_id)}) |
|
||||||
|
|
||||||
if action in ['hide', 'show']: |
|
||||||
obj.hidden = True if action == 'hide' else False |
|
||||||
obj.save() |
|
||||||
else: |
|
||||||
obj.user.readonly = True if action == 'banro' else False |
|
||||||
obj.user.save() |
|
||||||
|
|
||||||
return JsonResponse(dict({'success': True}, **self.get_yesno_image_data(obj))) |
|
||||||
ajax_view.csrf_exempt = True |
|
||||||
|
|
||||||
admin.site.register(Comment, CommentAdmin) |
|
||||||
@ -1,22 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
from django import forms |
|
||||||
from django.utils.translation import ugettext as _ |
|
||||||
|
|
||||||
from functions.forms import EmptySelect |
|
||||||
from .models import Comment |
|
||||||
|
|
||||||
|
|
||||||
class CommentForm(forms.ModelForm): |
|
||||||
class Meta: |
|
||||||
model = Comment |
|
||||||
fields = ['parent', 'text'] |
|
||||||
widgets = dict(parent=EmptySelect) |
|
||||||
|
|
||||||
def save(self, commit=True): |
|
||||||
obj = super(CommentForm, self).save(commit=False) |
|
||||||
return obj |
|
||||||
|
|
||||||
def clean(self): |
|
||||||
if getattr(self._user, 'readonly', True): |
|
||||||
raise forms.ValidationError(_(u'Вы не можете оставлять комментарии. Вам выдано ограничение ReadOnly.')) |
|
||||||
return super(CommentForm, self).clean() |
|
||||||
@ -1,73 +0,0 @@ |
|||||||
# -*- encoding: utf-8 -*- |
|
||||||
|
|
||||||
version = "0.0.1" |
|
||||||
version_info = (0,0,1) |
|
||||||
""" |
|
||||||
Модуль для поиска нецензурных слов (мата) в тексте |
|
||||||
|
|
||||||
Лицензия: LGPL (http://www.opensource.org/licenses/lgpl-2.1.php) |
|
||||||
|
|
||||||
Пример: |
|
||||||
|
|
||||||
from matfilter import matfilter |
|
||||||
some_data = "любой текст для проверки" |
|
||||||
if len(matfilter(some_data)): |
|
||||||
print "Пожалуйста, уберите из текста нецензурные выражения." |
|
||||||
|
|
||||||
Источник: |
|
||||||
https://bitbucket.org/spanasik/django-matfilter |
|
||||||
""" |
|
||||||
import re |
|
||||||
|
|
||||||
PATTERNS = (ur"(\b[сs]{1}[сsц]{0,1}[uуy](?:[ч4]{0,1}[иаakк][^ц])\w*\b)", |
|
||||||
ur"(\b(?!пло|стра|[тл]и)(\w(?!(у|пло)))*[хx][уy](й|йа|[еeё]|и|я|ли|ю)(?!га)\w*\b)", |
|
||||||
ur"(\b(п[oо]|[нз][аa])*[хx][eе][рp]\w*\b)", |
|
||||||
ur"(\b[мm][уy][дd]([аa][кk]|[oо]|и)\w*\b)", |
|
||||||
ur"(\b\w*д[рp](?:[oо][ч4]|[аa][ч4])(?!л)\w*\b)", |
|
||||||
ur"(\b(?!(?:кило)?[тм]ет)(?!смо)[а-яa-z]*(?<!с)т[рp][аa][хx]\w*\b)", |
|
||||||
ur"(\b[к|k][аaoо][з3z]+[eе]?ё?л\w*\b)", |
|
||||||
ur"(\b(?!со)\w*п[еeё]р[нд](и|иc|ы|у|н|е|ы)\w*\b)", |
|
||||||
ur"(\b\w*[бп][ссз]д\w+\b)", |
|
||||||
ur"(\b([нnп][аa]?[оo]?[xх])\b)", |
|
||||||
ur"(\b([аa]?[оo]?[нnпбз][аa]?[оo]?)?([cс][pр][аa][^зжбсвм])\w*\b)", |
|
||||||
ur"(\b\w*([оo]т|вы|[рp]и|[оo]|и|[уy]){0,1}([пnрp][iиеeё]{0,1}[3zзсcs][дd])\w*\b)", |
|
||||||
ur"(\b(вы)?у?[еeё]?би?ля[дт]?[юоo]?\w*\b)", |
|
||||||
ur"(\b(?!вело|ски|эн)\w*[пpp][eеиi][дd][oaоаеeирp](?![цянгюсмйчв])[рp]?(?![лт])\w*\b)", |
|
||||||
ur"(\b(?!в?[ст]{1,2}еб)(?:(?:в?[сcз3о][тяaа]?[ьъ]?|вы|п[рp][иоo]|[уy]|р[aа][з3z][ьъ]?|к[оo]н[оo])?[её]б[а-яa-z]*)|(?:[а-яa-z]*[^хлрдв][еeё]б)\b)", |
|
||||||
ur"(\b[з3z][аaоo]л[уy]п[аaeеин]\w*\b)",) |
|
||||||
|
|
||||||
|
|
||||||
def CheckMatches(matches): |
|
||||||
if len(matches): |
|
||||||
result = [] |
|
||||||
for match in matches: |
|
||||||
if type(match) == tuple: |
|
||||||
result.append(match[0].strip()) |
|
||||||
else: |
|
||||||
result.append(match.strip()) |
|
||||||
return result |
|
||||||
return () |
|
||||||
|
|
||||||
|
|
||||||
def matfilter(text, npattern=None): |
|
||||||
"""Находит в тексте мат. |
|
||||||
|
|
||||||
Возвращает список найденных слов""" |
|
||||||
text = text.replace("\r\n", " ") |
|
||||||
text = text.replace("\n", " ") |
|
||||||
|
|
||||||
if npattern is not None: |
|
||||||
result = CheckMatches(re.findall( |
|
||||||
PATTERNS[npattern], text, |
|
||||||
re.IGNORECASE | re.VERBOSE | re.UNICODE | re.DOTALL)) |
|
||||||
if len(result): |
|
||||||
return result |
|
||||||
else: |
|
||||||
for pattern in PATTERNS: |
|
||||||
result = CheckMatches(re.findall( |
|
||||||
pattern, text, |
|
||||||
re.IGNORECASE | re.VERBOSE | re.UNICODE | re.DOTALL)) |
|
||||||
if len(result): |
|
||||||
return result |
|
||||||
|
|
||||||
return () |
|
||||||
@ -1,452 +0,0 @@ |
|||||||
# -*- 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 model 'Comment' |
|
||||||
db.create_table(u'comments_comment', ( |
|
||||||
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
|
||||||
('ip', self.gf('django.db.models.fields.GenericIPAddressField')(max_length=39, null=True, blank=True)), |
|
||||||
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
|
||||||
('hidden', self.gf('django.db.models.fields.BooleanField')(default=False)), |
|
||||||
('parent', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['comments.Comment'], null=True, blank=True)), |
|
||||||
('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User'])), |
|
||||||
('text', self.gf('django.db.models.fields.TextField')()), |
|
||||||
('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), |
|
||||||
('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), |
|
||||||
)) |
|
||||||
db.send_create_signal(u'comments', ['Comment']) |
|
||||||
|
|
||||||
|
|
||||||
def backwards(self, orm): |
|
||||||
# Deleting model 'Comment' |
|
||||||
db.delete_table(u'comments_comment') |
|
||||||
|
|
||||||
|
|
||||||
models = { |
|
||||||
u'accounts.user': { |
|
||||||
'Meta': {'ordering': "['-rating']", 'object_name': 'User'}, |
|
||||||
'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'company': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'users'", 'null': 'True', 'to': u"orm['company.Company']"}), |
|
||||||
'date_joined': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'date_registered': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '255', 'db_index': 'True'}), |
|
||||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
|
||||||
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'is_admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'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': '255'}), |
|
||||||
'organiser': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['organiser.Organiser']", 'unique': 'True', 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}), |
|
||||||
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), |
|
||||||
'position': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), |
|
||||||
'readonly': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'translator': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['translator.Translator']", 'blank': 'True', 'unique': 'True'}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'blank': 'True'}), |
|
||||||
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), |
|
||||||
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255', 'db_index': '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'city.city': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'City', 'index_together': '()'}, |
|
||||||
'code_IATA': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['directories.Iata']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'country': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cities'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'old_url': ('django.db.models.fields.CharField', [], {'max_length': '55'}), |
|
||||||
'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}) |
|
||||||
}, |
|
||||||
u'comments.comment': { |
|
||||||
'Meta': {'object_name': 'Comment'}, |
|
||||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'ip': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39', 'null': 'True', 'blank': 'True'}), |
|
||||||
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), |
|
||||||
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['comments.Comment']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'text': ('django.db.models.fields.TextField', [], {}), |
|
||||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"}) |
|
||||||
}, |
|
||||||
u'company.company': { |
|
||||||
'Meta': {'ordering': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'Company', 'index_together': '()'}, |
|
||||||
'address': ('functions.custom_fields.LocationField', [], {'blank': 'True'}), |
|
||||||
'blocked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'city': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), |
|
||||||
'country': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['country.Country']"}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'created_company'", 'null': 'True', 'to': u"orm['accounts.User']"}), |
|
||||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), |
|
||||||
'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), |
|
||||||
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'rating': ('django.db.models.fields.IntegerField', [], {'default': '100'}), |
|
||||||
'staff_number': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}), |
|
||||||
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Tag']"}), |
|
||||||
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'companies'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['theme.Theme']"}), |
|
||||||
'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'max_length': '255'}), |
|
||||||
'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
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'}) |
|
||||||
}, |
|
||||||
u'country.area': { |
|
||||||
'Meta': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Area', 'index_together': '()'}, |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) |
|
||||||
}, |
|
||||||
u'country.country': { |
|
||||||
'Meta': {'ordering': "['translations__name']", 'unique_together': '()', 'object_name': 'Country', 'index_together': '()'}, |
|
||||||
'area': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Area']"}), |
|
||||||
'big_cities': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'cities'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['city.City']"}), |
|
||||||
'capital': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'capital'", 'null': 'True', 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), |
|
||||||
'country_code': ('django.db.models.fields.CharField', [], {'max_length': '2'}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'currency': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Currency']", 'null': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'language': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['directories.Language']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'longitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'old_url': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '55'}), |
|
||||||
'phone_code': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'population': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'services': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), |
|
||||||
'teritory': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'time_delivery': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'timezone': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}) |
|
||||||
}, |
|
||||||
u'directories.currency': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'Currency', 'index_together': '()'}, |
|
||||||
'code': ('django.db.models.fields.CharField', [], {'max_length': '3'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) |
|
||||||
}, |
|
||||||
u'directories.iata': { |
|
||||||
'Meta': {'object_name': 'Iata'}, |
|
||||||
'airport': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
|
||||||
'code': ('django.db.models.fields.CharField', [], {'max_length': '4'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) |
|
||||||
}, |
|
||||||
u'directories.language': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'Language', 'index_together': '()'}, |
|
||||||
'code': ('django.db.models.fields.CharField', [], {'max_length': '2'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'language': ('django.db.models.fields.CharField', [], {'max_length': '255'}) |
|
||||||
}, |
|
||||||
u'expobanner.banner': { |
|
||||||
'Meta': {'ordering': "['sort']", 'object_name': 'Banner'}, |
|
||||||
'alt': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
|
||||||
'cookie': ('django.db.models.fields.CharField', [], {'default': "'expo_b_default_popup'", 'max_length': '30', 'null': 'True', 'blank': 'True'}), |
|
||||||
'country': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Country']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'customer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Customer']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'flash': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'fr': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2017, 1, 19, 0, 0)'}), |
|
||||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'banners'", 'null': 'True', 'to': u"orm['expobanner.BannerGroup']"}), |
|
||||||
'html': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'img': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), |
|
||||||
'link': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'often': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '1', 'null': 'True', 'blank': 'True'}), |
|
||||||
'paid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'popup': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
|
||||||
'sort': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '500'}), |
|
||||||
'stat_pswd': ('django.db.models.fields.CharField', [], {'max_length': '16'}), |
|
||||||
'text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'to': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), |
|
||||||
'urls': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'url_banners'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['expobanner.URL']"}) |
|
||||||
}, |
|
||||||
u'expobanner.bannergroup': { |
|
||||||
'Meta': {'ordering': "['name']", 'object_name': 'BannerGroup'}, |
|
||||||
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'height': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
|
||||||
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
|
||||||
'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), |
|
||||||
'speed': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '2000'}), |
|
||||||
'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}) |
|
||||||
}, |
|
||||||
u'expobanner.customer': { |
|
||||||
'Meta': {'ordering': "['name']", 'object_name': 'Customer'}, |
|
||||||
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
|
||||||
'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
u'expobanner.top': { |
|
||||||
'Meta': {'ordering': "['position']", 'object_name': 'Top'}, |
|
||||||
'base_catalog': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'catalog': ('django.db.models.fields.CharField', [], {'max_length': '16'}), |
|
||||||
'cities': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'top_in_set'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['city.City']"}), |
|
||||||
'country': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['country.Country']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'excluded_cities': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['city.City']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'excluded_tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Tag']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'fr': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2017, 1, 19, 0, 0)'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'link': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Banner']"}), |
|
||||||
'months': ('functions.custom_fields.MonthMultiSelectField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}), |
|
||||||
'position': ('django.db.models.fields.PositiveIntegerField', [], {'default': '2', 'null': 'True', 'blank': 'True'}), |
|
||||||
'stat_pswd': ('django.db.models.fields.CharField', [], {'max_length': '16'}), |
|
||||||
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'to': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'years': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
u'expobanner.url': { |
|
||||||
'Meta': {'ordering': "['-created_at']", 'object_name': 'URL'}, |
|
||||||
'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
|
||||||
'regex': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'site_urls'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['sites.Site']"}), |
|
||||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '256'}), |
|
||||||
'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'url': ('django.db.models.fields.CharField', [], {'max_length': '2048'}) |
|
||||||
}, |
|
||||||
u'file.filemodel': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'FileModel', 'index_together': '()'}, |
|
||||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']", 'null': 'True'}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'file_path': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), |
|
||||||
'file_type': ('functions.custom_fields.EnumField', [], {'default': "'PDF'", 'values': "('PDF', 'DOC', 'TXT', 'OTHER', 'JPG', 'BMP', 'PNG', 'GIF')", 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'img_height': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'img_width': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'purpose': ('functions.custom_fields.EnumField', [], {'default': "'photo'", 'values': "['photo', 'flat', 'logo', 'map', 'scheme teritory', 'diplom', 'preview', 'preview2']"}) |
|
||||||
}, |
|
||||||
u'organiser.organiser': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'Organiser', 'index_together': '()'}, |
|
||||||
'active': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), |
|
||||||
'address': ('functions.custom_fields.LocationField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'city': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['city.City']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}), |
|
||||||
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'null': 'True', 'on_delete': 'models.PROTECT', 'blank': 'True'}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), |
|
||||||
'events_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'facebook': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'foundation': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'linkedin': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}), |
|
||||||
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'place_conference': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_conference'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_conference.PlaceConference']"}), |
|
||||||
'place_exposition': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'organiser_place_exposition'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['place_exposition.PlaceExposition']"}), |
|
||||||
'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
|
||||||
'staff_number': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'tag': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Tag']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'theme': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['theme.Theme']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'twitter': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'vk': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'web_page': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
u'photologue.gallery': { |
|
||||||
'Meta': {'ordering': "['-date_added']", 'unique_together': '()', 'object_name': 'Gallery', 'index_together': '()'}, |
|
||||||
'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
|
||||||
'photos': ('sortedm2m.fields.SortedManyToManyField', [], {'blank': 'True', 'related_name': "'galleries'", 'null': 'True', 'symmetrical': 'False', 'to': u"orm['photologue.Photo']"}), |
|
||||||
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), |
|
||||||
'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
u'photologue.photo': { |
|
||||||
'Meta': {'ordering': "['sort']", 'unique_together': '()', 'object_name': 'Photo', 'index_together': '()'}, |
|
||||||
'crop_from': ('django.db.models.fields.CharField', [], {'default': "'center'", 'max_length': '10', 'blank': 'True'}), |
|
||||||
'date_added': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), |
|
||||||
'date_taken': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'effect': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'photo_related'", 'null': 'True', 'to': u"orm['photologue.PhotoEffect']"}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), |
|
||||||
'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
|
||||||
'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}), |
|
||||||
'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '200'}), |
|
||||||
'sort': ('django.db.models.fields.PositiveIntegerField', [], {'default': '10', 'null': 'True', 'db_index': 'True'}), |
|
||||||
'tags': ('photologue.models.TagField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'users': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['photologue.UserMark']", 'null': 'True', 'symmetrical': 'False'}), |
|
||||||
'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}) |
|
||||||
}, |
|
||||||
u'photologue.photoeffect': { |
|
||||||
'Meta': {'object_name': 'PhotoEffect'}, |
|
||||||
'background_color': ('django.db.models.fields.CharField', [], {'default': "'#FFFFFF'", 'max_length': '7'}), |
|
||||||
'brightness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), |
|
||||||
'color': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), |
|
||||||
'contrast': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), |
|
||||||
'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), |
|
||||||
'filters': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}), |
|
||||||
'reflection_size': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
|
||||||
'reflection_strength': ('django.db.models.fields.FloatField', [], {'default': '0.6'}), |
|
||||||
'sharpness': ('django.db.models.fields.FloatField', [], {'default': '1.0'}), |
|
||||||
'transpose_method': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
u'photologue.usermark': { |
|
||||||
'Meta': {'object_name': 'UserMark'}, |
|
||||||
'height': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'left': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), |
|
||||||
'top': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), |
|
||||||
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'marks'", 'to': u"orm['accounts.User']"}), |
|
||||||
'width': ('django.db.models.fields.PositiveSmallIntegerField', [], {}) |
|
||||||
}, |
|
||||||
u'place_conference.placeconference': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'PlaceConference', 'index_together': '()'}, |
|
||||||
'address': ('functions.custom_fields.LocationField', [], {}), |
|
||||||
'amount_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'banquet_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'catering': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'city': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place_conferences'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), |
|
||||||
'conference_call': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), |
|
||||||
'exp_hall_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'exposition_hall': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'hotel': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'multimedia_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'top': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Top']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), |
|
||||||
'total_capacity': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'translate_equipment': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'type': ('functions.custom_fields.EnumField', [], {'default': "'Convention centre'", 'values': "['Convention centre', 'Exposition centre']"}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}), |
|
||||||
'video_link': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
|
||||||
'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
u'place_exposition.placeexposition': { |
|
||||||
'Meta': {'ordering': "['-rating', 'id']", 'unique_together': '()', 'object_name': 'PlaceExposition', 'index_together': '()'}, |
|
||||||
'address': ('functions.custom_fields.LocationField', [], {}), |
|
||||||
'bank': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'business_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'cafe': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'children_room': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'city': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'place_expositions'", 'on_delete': 'models.PROTECT', 'to': u"orm['city.City']"}), |
|
||||||
'closed_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'conference_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'country': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['country.Country']", 'on_delete': 'models.PROTECT'}), |
|
||||||
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
|
||||||
'disabled_service': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), |
|
||||||
'event_in_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'fax': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'foundation_year': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
|
||||||
'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'mobile_application': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
|
||||||
'online_registration': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'open_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'parking': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'partner': ('django.db.models.fields.NullBooleanField', [], {'default': '0', 'null': 'True', 'blank': 'True'}), |
|
||||||
'phone': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'photogallery': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['photologue.Gallery']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), |
|
||||||
'press_centre': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'rating': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
|
||||||
'terminals': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'top': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['expobanner.Top']", 'null': 'True', 'on_delete': 'models.SET_NULL', 'blank': 'True'}), |
|
||||||
'total_area': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'total_halls': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'total_pavilions': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), |
|
||||||
'type': ('functions.custom_fields.EnumField', [], {'default': "'Exposition complex'", 'values': "['Exposition complex', 'Convention centre', 'Exposition centre']"}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), |
|
||||||
'views': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
|
||||||
'virtual_tour': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'web_page': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}), |
|
||||||
'wifi': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}) |
|
||||||
}, |
|
||||||
u'sites.site': { |
|
||||||
'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, |
|
||||||
'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) |
|
||||||
}, |
|
||||||
u'theme.tag': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'Tag', 'index_together': '()'}, |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), |
|
||||||
'theme': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tags'", 'on_delete': 'models.PROTECT', 'to': u"orm['theme.Theme']"}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}) |
|
||||||
}, |
|
||||||
u'theme.theme': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'Theme', 'index_together': '()'}, |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
|
||||||
'inflect': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), |
|
||||||
'main_page_conf': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), |
|
||||||
'main_page_expo': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'db_index': 'True'}), |
|
||||||
'old_url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}), |
|
||||||
'types': ('django.db.models.fields.BigIntegerField', [], {'default': 'None'}), |
|
||||||
'url': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '255'}) |
|
||||||
}, |
|
||||||
u'translator.translator': { |
|
||||||
'Meta': {'unique_together': '()', 'object_name': 'Translator', 'index_together': '()'}, |
|
||||||
'birth': ('django.db.models.fields.DateField', [], {}), |
|
||||||
'car': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), |
|
||||||
'gender': ('functions.custom_fields.EnumField', [], {'default': "'male'", 'values': "('male', 'female')"}), |
|
||||||
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
complete_apps = ['comments'] |
|
||||||
@ -1,37 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
from django.db import models |
|
||||||
from django.contrib.contenttypes.models import ContentType |
|
||||||
from django.contrib.contenttypes import generic |
|
||||||
from django.utils.translation import ugettext_lazy as _ |
|
||||||
|
|
||||||
from accounts.models import User |
|
||||||
# from core.utils import UCrypto |
|
||||||
|
|
||||||
|
|
||||||
class Comment(models.Model): |
|
||||||
|
|
||||||
class Meta: |
|
||||||
verbose_name = u'Комментарий' |
|
||||||
verbose_name_plural = u'Комментарии' |
|
||||||
get_latest_by = 'created' |
|
||||||
|
|
||||||
ip = models.GenericIPAddressField(_(u'IP address'), unpack_ipv4=True, blank=True, null=True) |
|
||||||
created = models.DateTimeField(_(u'дата создания'), auto_now_add=True) |
|
||||||
hidden = models.BooleanField(_(u'скрыть'), default=False, help_text=_(u'Будет скрыто, если отмечено')) |
|
||||||
|
|
||||||
parent = models.ForeignKey('self', verbose_name=_(u'Родительский комментарий'), null=True, blank=True) |
|
||||||
user = models.ForeignKey(User, verbose_name=_(u'Пользователь')) |
|
||||||
text = models.TextField(_(u'сообщение')) |
|
||||||
|
|
||||||
content_type = models.ForeignKey(ContentType) |
|
||||||
object_id = models.PositiveIntegerField() |
|
||||||
content_object = generic.GenericForeignKey('content_type', 'object_id') |
|
||||||
|
|
||||||
def get_name(self): |
|
||||||
return self.user.get_full_name() |
|
||||||
|
|
||||||
def get_date(self): |
|
||||||
return self.created.strftime('%d %B %Y %H:%M') |
|
||||||
|
|
||||||
def __unicode__(self): |
|
||||||
return self.get_date() |
|
||||||
@ -1,16 +0,0 @@ |
|||||||
""" |
|
||||||
This file demonstrates writing tests using the unittest module. These will pass |
|
||||||
when you run "manage.py test". |
|
||||||
|
|
||||||
Replace this with more appropriate tests for your application. |
|
||||||
""" |
|
||||||
|
|
||||||
from django.test import TestCase |
|
||||||
|
|
||||||
|
|
||||||
class SimpleTest(TestCase): |
|
||||||
def test_basic_addition(self): |
|
||||||
""" |
|
||||||
Tests that 1 + 1 always equals 2. |
|
||||||
""" |
|
||||||
self.assertEqual(1 + 1, 2) |
|
||||||
@ -1,55 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
|
|
||||||
from django.views.generic.edit import FormMixin |
|
||||||
|
|
||||||
from functions.http import JsonResponse |
|
||||||
from .forms import CommentForm |
|
||||||
|
|
||||||
|
|
||||||
class CommentMixin(FormMixin): |
|
||||||
form_class = CommentForm |
|
||||||
|
|
||||||
def get_comment_form(self): |
|
||||||
form_class = self.get_form_class() |
|
||||||
form = self.get_form(form_class) |
|
||||||
form._user = self.request.user |
|
||||||
return form |
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs): |
|
||||||
self.commentform = None |
|
||||||
if request.method == 'POST' and request.is_ajax(): |
|
||||||
self.commentform = self.get_comment_form() |
|
||||||
if self.commentform.is_valid(): |
|
||||||
self.object = self.get_object() |
|
||||||
self.save_comment() |
|
||||||
return JsonResponse({'success': True}) |
|
||||||
else: |
|
||||||
return JsonResponse({'success': False, 'errors': self.commentform.errors}) |
|
||||||
return self.get(request, *args, **kwargs) |
|
||||||
|
|
||||||
def save_comment(self): |
|
||||||
comment = self.commentform.save(commit=False) |
|
||||||
comment.user_id = self.request.user.pk |
|
||||||
comment.content_object = self.object |
|
||||||
comment.ip = self.request.META['REMOTE_ADDR'] |
|
||||||
comment.save() |
|
||||||
|
|
||||||
def get_context_data(self, **kwargs): |
|
||||||
context = super(CommentMixin, self).get_context_data(**kwargs) |
|
||||||
self.commentform = self.get_comment_form() |
|
||||||
if self.request.method == 'POST' and self.commentform.is_valid(): |
|
||||||
self.save_comment() |
|
||||||
context['commentform'] = self.commentform |
|
||||||
_comments = list(self.object.comments.filter(hidden=False)) |
|
||||||
comments = {x.pk: x for x in filter(lambda x: x.parent is None, _comments)} |
|
||||||
for comment in filter(lambda x: x.parent is not None, _comments): |
|
||||||
try: |
|
||||||
p = comments[comment.parent_id] |
|
||||||
if hasattr(p, 'childs'): |
|
||||||
p.childs.append(comment) |
|
||||||
else: |
|
||||||
p.childs = [comment] |
|
||||||
except IndexError: |
|
||||||
pass |
|
||||||
context['comments'] = comments.values() |
|
||||||
return context |
|
||||||
@ -0,0 +1,12 @@ |
|||||||
|
<div id="mc-container"></div> |
||||||
|
<script type="text/javascript"> |
||||||
|
cackle_widget = window.cackle_widget || []; |
||||||
|
cackle_widget.push({widget: 'Comment', id: 53712}); |
||||||
|
(function() { |
||||||
|
var mc = document.createElement('script'); |
||||||
|
mc.type = 'text/javascript'; |
||||||
|
mc.async = true; |
||||||
|
mc.src = ('https:' == document.location.protocol ? 'https' : 'http') + '://cackle.me/widget.js'; |
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(mc, s.nextSibling); |
||||||
|
})(); |
||||||
|
</script> |
||||||
@ -1,442 +0,0 @@ |
|||||||
{% load static i18n %} |
|
||||||
{% load thumbnail %} |
|
||||||
{% load template_filters %} |
|
||||||
|
|
||||||
{% block page_body %} |
|
||||||
|
|
||||||
<div class="m-article event-page"> |
|
||||||
<div class="item-wrap event clearfix"> |
|
||||||
<aside> |
|
||||||
{% if exposition.expohit %} |
|
||||||
<div class="hit"></div> |
|
||||||
{% endif %} |
|
||||||
<div class="i-pict"> |
|
||||||
{% with obj=exposition %} |
|
||||||
{% include 'client/includes/show_logo.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
<div class="i-stats"> |
|
||||||
{% if exposition.visitors %} |
|
||||||
<span class="visitors" title="Посетители">{{ exposition.visitors }}</span> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.members %} |
|
||||||
<span class="participants" title="Участники">{{ exposition.members }}</span> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
<div class="i-discount"> |
|
||||||
{% if exposition.discount %} |
|
||||||
<a class="discount-button" href="#">{% trans 'Скидка' %} -{{ exposition.discount }}%</a> |
|
||||||
<div class="dsc-text">{{ exposition.discount_description|safe|linebreaks }}</div> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
{% if exposition.paid_new.logo %} |
|
||||||
<div class="paid-partner-block"> |
|
||||||
<p class="partner-title">{% trans 'Организатор' %}</p> |
|
||||||
<div class="i-pict"> |
|
||||||
<img src="{{ exposition.paid_new.logo.url }}" class="pic" alt=""> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
</aside> |
|
||||||
|
|
||||||
<div class="i-info"> |
|
||||||
<header> |
|
||||||
<h1 class="i-title"> |
|
||||||
{% if exposition.main_title %} |
|
||||||
{{ exposition.name|safe }} - {{ exposition.main_title|lowfirst|safe }} |
|
||||||
{% else %} |
|
||||||
{{ exposition.name|safe }} |
|
||||||
{% endif %} |
|
||||||
</h1> |
|
||||||
</header> |
|
||||||
|
|
||||||
<div class="i-date"> |
|
||||||
{% with obj=exposition %} |
|
||||||
{% include 'client/includes/show_date_block.html' %} |
|
||||||
{% endwith %} |
|
||||||
|
|
||||||
{% include "client/includes/sharing_block.html" %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{% if exposition.place %} |
|
||||||
<div class="i-address"> |
|
||||||
<header> |
|
||||||
<div class="address"> |
|
||||||
{{ exposition.place.country }}, {{ exposition.place.city }}, |
|
||||||
{% if exposition.place.web_page %} |
|
||||||
<a href="{{ exposition.place.web_page }}" class="place_link">{{ exposition.place.name }}</a> |
|
||||||
{% else %} |
|
||||||
{{ exposition.place.name }} |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
{# <div class="show-map"><a class="toggle-map" href="#">{% trans 'Раскрыть карту' %}</a></div>#} |
|
||||||
</header> |
|
||||||
|
|
||||||
<div class="show-map"><a class="toggle-map" href="#">{% trans 'Раскрыть карту' %}</a></div> |
|
||||||
|
|
||||||
<div class="i-map"> |
|
||||||
<div class="close-map"><a class="toggle-map" href="#">{% trans 'Скрыть карту' %}</a> |
|
||||||
</div> |
|
||||||
<div class="map-canvas" id="map-canvas" data-coords="{{ exposition.place.address.lat|coord_format }},{{ exposition.place.address.lng|coord_format }}" ></div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
<div class="event_org"> |
|
||||||
<a href="#pw-event-news-subscribe" class="button pw-open new_subribe_btn"><i class="fa fa-at"></i> {% trans 'Подписаться на новости' %}</a> |
|
||||||
</div> |
|
||||||
<hr /> |
|
||||||
<div class="i-buttons clearfix"> |
|
||||||
<div class="ib-main"> |
|
||||||
{% with event=exposition user=user %} |
|
||||||
{% include 'client/includes/visit_button.html' %} |
|
||||||
{% endwith %} |
|
||||||
{% include 'client/includes/calendar_button.html' with obj=object %} |
|
||||||
{% if request.user.is_admin %} |
|
||||||
<a class="button green " href="/admin/exposition/{{ object.url }}/">{% trans 'изменить' %}</a> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.photogallery_id %} |
|
||||||
<a class="button blue icon-photo" href="{{ exposition.get_permanent_url }}photo/">{% trans 'фото' %}</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
<div class="ib-add"><a class="button blue2 icon-find" href="http://www.booking.com/searchresults.html?aid={{ book_aid }}&city={{ object.city.id }}">{% trans 'Найти отель' %}</a></div> |
|
||||||
</div> |
|
||||||
<hr /> |
|
||||||
<div class="i-divs clearfix"> |
|
||||||
<div class="i-subj"> |
|
||||||
<ul> |
|
||||||
{% with themes=exposition.theme.all %} |
|
||||||
{% for theme in themes %} |
|
||||||
<li><a href="{{ object.catalog }}theme/{{ theme.url }}/">{{ theme.name }} ({{ theme.expositions_number }})</a></li> |
|
||||||
{% endfor %} |
|
||||||
{% endwith %} |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
<div class="i-tags"> |
|
||||||
{% with tags=exposition.tag.all %} |
|
||||||
{% for tag in tags %} |
|
||||||
<a href="{{ object.catalog }}tag/{{ tag.url }}/">{{ tag.name }}</a>{% if forloop.counter != tags|length %},{% endif %} |
|
||||||
{% endfor %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<p><a href="#pw-event-news-subscribe" class="button pw-open"><i class="fa fa-at"></i> {% trans 'Подписаться на новости' %}</a> <i>{% blocktrans with name=exposition.name|safe %}Получайте актуальную информацию о выставке {{ name }} на свой email{% endblocktrans %}</i></p> |
|
||||||
|
|
||||||
<div class="i-sub-articles"> |
|
||||||
<a target="_blank" href="{{ exposition.paid_new.official.get_click_link }}" class="paid-partner-link">{% trans 'Официальный сайт выставки' %}</a> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="i-steps"> |
|
||||||
<div class="is-title">{% trans 'Посетить/участвовать в выставке' %}</div> |
|
||||||
<ul> |
|
||||||
<li class="s1"> |
|
||||||
<div class="label">{% trans 'Зарегистрируйтесь на событие' %}</div> |
|
||||||
<a class="step" |
|
||||||
href="{{ exposition.paid_new.tickets.get_click_link }}" |
|
||||||
target="_blank"> |
|
||||||
{% trans 'Билеты на выставку' %} |
|
||||||
</a> |
|
||||||
</li> |
|
||||||
|
|
||||||
<li class="s2"> |
|
||||||
<div class="label">{% trans 'Забронируйте площадь по лучшей цене' %}</div> |
|
||||||
<a class="step" href="{{ exposition.paid_new.participation.get_click_link }}" target="_blank">Заявка на участие</a> |
|
||||||
</li> |
|
||||||
|
|
||||||
<li class="s3"> |
|
||||||
<div class="label">{% trans 'Просмотрите список участников' %}</div> |
|
||||||
<a class="step" href="{{ exposition.paid_new.participants_list.get_click_link }}" target="_blank">{% trans 'Список участников' %}</a> |
|
||||||
</li> |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
{% if exposition.get_photos %} |
|
||||||
{% with photos=exposition.get_photos|slice:"5" %} |
|
||||||
<hr /> |
|
||||||
<div class="i-photo-slides"> |
|
||||||
<div class="sect-title"><a href="#">{% trans 'Фотографии с прошлой выставки' %}</a></div> |
|
||||||
<div id="ps-photo-gallery" class="ps-photo-gallery swiper-container"> |
|
||||||
<ul class="swiper-wrapper"> |
|
||||||
{% for photo in photos %} |
|
||||||
<li class="swiper-slide"> |
|
||||||
<img src="{{ photo.get_display_url }}" alt="" /> |
|
||||||
</li> |
|
||||||
{% endfor %} |
|
||||||
</ul> |
|
||||||
<div class="re-controls"> |
|
||||||
<a class="prev" href="#"><</a> |
|
||||||
<a class="next" href="#">></a> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endwith %} |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.description %} |
|
||||||
<div class="i-event-description"> |
|
||||||
<h2 class="ied-title">{% trans 'О выставке' %} {{ exposition.name|safe }}</h2> |
|
||||||
<div class="ied-text">{{ exposition.description|safe }}</div> |
|
||||||
</div> |
|
||||||
<hr /> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<div class="i-event-additional clearfix"> |
|
||||||
<div class="sect-title">{% trans 'Дополнительная информация' %}</div> |
|
||||||
<ul class="e-docs"> |
|
||||||
{% if exposition.business_program.exists %} |
|
||||||
<li><a href="{{ exposition.get_permanent_url }}program/">{% trans 'Деловая программа' %}</a></li> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<li><a href="{{ exposition.get_permanent_url }}price/">{% trans 'Условия участия' %}</a></li> |
|
||||||
{% if exposition.statistic_exists %} |
|
||||||
<li><a href="{{ exposition.get_permanent_url }}statistic/">{% trans 'Статистика' %}</a></li> |
|
||||||
{% endif %} |
|
||||||
</ul> |
|
||||||
<dl class="add-info"> |
|
||||||
{% if exposition.organiser.all|length > 0 %} |
|
||||||
<dt>{% trans 'Организатор' %}:</dt> |
|
||||||
<dd> |
|
||||||
{% with organisers=exposition.organiser.all %} |
|
||||||
{% for organiser in organisers %} |
|
||||||
{{ organiser.name }}<br /> |
|
||||||
{% endfor %} |
|
||||||
{% endwith %} |
|
||||||
</dd> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.web_page %} |
|
||||||
<dt>{% trans 'Веб-сайт' %}:</dt> |
|
||||||
<dd> |
|
||||||
<a target="_blank" href="#" data-type="href" data-hash="1qwer" data-url="{{ exposition.web_page|base64_encode }}" class="link-encode">{{ exposition.web_page }}</a> |
|
||||||
</dd> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.get_audience %} |
|
||||||
<dt>{% trans 'Аудитория' %}:</dt> |
|
||||||
<dd> |
|
||||||
{{ exposition.get_audience }} |
|
||||||
</dd> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.get_periodic %} |
|
||||||
<dt>{% trans 'Периодичность' %}:</dt> |
|
||||||
<dd>{{ exposition.get_periodic }}</dd> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.products %} |
|
||||||
<dt>{% trans 'Экспонируемые продукты' %}:</dt> |
|
||||||
<dd>{{ exposition.products|safe }}</dd> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.time %} |
|
||||||
<dt>{% trans 'Время работы' %}:</dt> |
|
||||||
<dd>{{ exposition.time|safe }}</dd> |
|
||||||
{% endif %} |
|
||||||
</dl> |
|
||||||
</div> |
|
||||||
|
|
||||||
{% include "client/includes/article/articles_in_event.html" with event=exposition news_list=news %} |
|
||||||
<hr /> |
|
||||||
|
|
||||||
<div class="i-members clearfix"> |
|
||||||
<div class="im-participants"> |
|
||||||
{% with companies=exposition.company.all|slice:":6" %} |
|
||||||
{% if companies %} |
|
||||||
{# есть участники #} |
|
||||||
<header> |
|
||||||
<div class="im-title">{% trans 'Участники' %}</div> |
|
||||||
|
|
||||||
<a class="more" href="{{ exposition.get_permanent_url }}members/">{% trans 'Все участники' %}</a> |
|
||||||
</header> |
|
||||||
<ul> |
|
||||||
{% for company in companies %} |
|
||||||
<li> |
|
||||||
<a href="{{ company.get_permanent_url }}"> |
|
||||||
<span class="imp-pict"> |
|
||||||
|
|
||||||
{% with obj=company %} |
|
||||||
{% include 'includes/show_logo.html' %} |
|
||||||
{% endwith %} |
|
||||||
</span> |
|
||||||
{{ company.name }} |
|
||||||
</a> |
|
||||||
</li> |
|
||||||
{% endfor %} |
|
||||||
</ul> |
|
||||||
{% else %} |
|
||||||
{# нет участников #} |
|
||||||
<header> |
|
||||||
<div class="im-title">{% trans 'Участники' %}</div> |
|
||||||
<p>{% trans 'Привлекайте целевых посетителей на стенд' %}</p> |
|
||||||
<p><a href="#pw-advertise" class="button icon-up pw-open" >{% trans "Рекламировать участника" %}</a></p> |
|
||||||
</header> |
|
||||||
{% endif %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
<div class="im-visitors"> |
|
||||||
{% with visitors=exposition.users.all|slice:":17" %} |
|
||||||
<header> |
|
||||||
<div class="im-title">{% trans 'Посетители' %}</div> |
|
||||||
</header> |
|
||||||
<ul id="visitors-list"> |
|
||||||
{% if visitors %} |
|
||||||
{# есть посетители #} |
|
||||||
{% for user in visitors %} |
|
||||||
{% if user == request.user %} |
|
||||||
<li class="current"><a href="{{ user.get_permanent_url }}">{{ user.get_full_name }} {% if user.company %}({{ user.company.name }}){% endif %}</a></li> |
|
||||||
{% else %} |
|
||||||
<li><a href="{{ user.get_permanent_url }}">{{ user.get_full_name }} {% if user.company %}({{ user.company.name }}){% endif %}</a></li> |
|
||||||
{% endif %} |
|
||||||
{% endfor %} |
|
||||||
{% endif %} |
|
||||||
</ul> |
|
||||||
<a id="somebody" class=" more mb-1em {% if visitors|length > 0 %}{%else%}hidden{% endif %}" href="{{ exposition.get_permanent_url }}visitors/">{% trans 'Все посетители' %}</a> |
|
||||||
{% endwith %} |
|
||||||
<p id="nobody" class=" mb-1em {% if exposition.users.all|length > 0 %}hidden{% else %}{% endif %}">{% trans 'Пока никто не отметился на событии.' %}</p> |
|
||||||
{% with event=exposition user=user %} |
|
||||||
{% include 'client/includes/visit_button.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<hr/> |
|
||||||
|
|
||||||
{% if exposition.area %} |
|
||||||
{% else %} |
|
||||||
{% if exposition.members or exposition.visitors or exposition.foundation_year %} |
|
||||||
<p class="title"> <i class="fa fa-bar-chart"> </i>{% trans 'Статистика' %}</p> |
|
||||||
{% endif %} |
|
||||||
{% endif %} |
|
||||||
{% if exposition.members or exposition.visitors or exposition.foundation_year or exposition.area %} |
|
||||||
<div class="e-num-info"> |
|
||||||
{% if exposition.area %} |
|
||||||
<div class="eni-area-wrap"> |
|
||||||
<div class="eni-title">{% trans 'Общая выставочная площадь' %}</div> |
|
||||||
<div class="eni-area"> |
|
||||||
{{ exposition.area }} {% trans 'м²' %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
<div class="eni-stats"> |
|
||||||
{% if exposition.members %} |
|
||||||
<div class="enis-item"><b>{{ exposition.members }}</b> {% trans 'участников' %}</div> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.visitors %} |
|
||||||
<div class="enis-item"><b>{{ exposition.visitors }}</b> {% trans 'посетителей' %}</div> |
|
||||||
{% endif %} |
|
||||||
{% if exposition.foundation_year %} |
|
||||||
<div class="eni-founded">{% trans 'Основано в' %} <b>{{ exposition.foundation_year }}</b> {% trans 'году' %}</div> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{% include 'client/includes/booking_block.html' with city=exposition.city place=exposition.place event=exposition %} |
|
||||||
<hr /> |
|
||||||
|
|
||||||
{% if exposition.get_nearest_events %} |
|
||||||
<div class="e-cat"> |
|
||||||
<div class="sect-title">{% trans 'Другие выставки, которые могут быть вам интересны' %}</div> |
|
||||||
<ul class="cat-list cl-exhibitions"> |
|
||||||
{% for exp in exposition.get_nearest_events %} |
|
||||||
<li class="cl-item"> |
|
||||||
<div class="cl-item-wrap clearfix"> |
|
||||||
<a href="{{ exp.get_permanent_url }}"> |
|
||||||
<div class="cli-pict"> |
|
||||||
{% with obj=exp %} |
|
||||||
{% include 'client/includes/show_logo.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
</a> |
|
||||||
<div class="cli-info"> |
|
||||||
<div class="cli-top clearfix"> |
|
||||||
{% if exp.quality_label.rsva.is_set %} |
|
||||||
<div class="cli-approved"> |
|
||||||
<img width="52" height="42" src="{% static 'client/img/rsva.jpg' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
{% if exp.quality_label.exporating.is_set %} |
|
||||||
<div class="cli-approved"> |
|
||||||
<img width="52" height="42" src="{% static 'client/img/exporating_logo.png' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
{% if exp.quality_label.ufi.is_set %} |
|
||||||
<div class="cli-approved"> |
|
||||||
<img width="52" height="42" src="{% static 'client/img/approved-logo.png' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<header> |
|
||||||
<div class="cli-title"><a href="{{ exp.get_permanent_url }}">{{ exp.name|safe }}</a></div> |
|
||||||
</header> |
|
||||||
|
|
||||||
<div class="cli-descr"> |
|
||||||
{{ exp.main_title|safe|linebreaks }} |
|
||||||
</div> |
|
||||||
<div class="cli-bot clearfix"> |
|
||||||
<div class="cli-date"> |
|
||||||
{% with obj=exp %} |
|
||||||
{% include 'client/includes/show_date_block.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
<div class="cli-place"> |
|
||||||
<a href="{{ exposition.catalog }}country/{{ exp.country.url }}/">{{ exp.country }}</a>, <a href="{{ exposition.catalog }}city/{{ exp.city.url }}/">{{ exp.city }}</a> |
|
||||||
{% if exp.place %} |
|
||||||
, <a href="{{ exp.place.get_permanent_url }}">{{ exp.place }}</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</li> |
|
||||||
{% endfor %} |
|
||||||
<li><a class="button more" href="{{ exposition.get_nearest_events_url|safe }}">{% trans 'Смотреть все' %}</a></li> |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<div class="e-cat look-also"> |
|
||||||
<div class="sect-title">{% trans 'Смотрите также:' %}</div> |
|
||||||
<a href="{{ exposition.catalog }}city/{{ exposition.city.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' and exposition.city.inflect %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a> |
|
||||||
<a href="{{ exposition.catalog }}country/{{ exposition.country.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' and exposition.country.inflect %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a> |
|
||||||
{% if exposition.theme.all %} |
|
||||||
<a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/country/{{ exposition.country.url }}/">{% trans "Выставки по тематике " %}«{{ exposition.theme.all.0.name|capfirst }}» {% if request.LANGUAGE_CODE == 'ru' and exposition.country.inflect %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a> |
|
||||||
<a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/city/{{ exposition.city.url }}/">{% trans "Выставки по тематике " %}«{{ exposition.theme.all.0.name|capfirst }}» {% if request.LANGUAGE_CODE == 'ru' and exposition.city.inflect %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block content_text %} |
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block popup %} |
|
||||||
{% include 'client/popups/advertise_member.html' with form=advertising_form %} |
|
||||||
{% include 'client/popups/event_news_subscribe.html' %} |
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block scripts %} |
|
||||||
{% if request.GET.debug == '1' %} |
|
||||||
<script src="{% static 'client/js/_modules/page.exposition.object.js' %}"></script> |
|
||||||
{% else %} |
|
||||||
<script src="{% static 'client/js_min/_modules/page.exposition.object.min.js' %}"></script> |
|
||||||
{% endif %} |
|
||||||
<script> |
|
||||||
EXPO.exposition.object.init({ |
|
||||||
visit:{ |
|
||||||
activeClass:"visit", |
|
||||||
passiveClass:"unvisit", |
|
||||||
currentHtml:'<li class="current"><a href="{{ request.user.get_permanent_url }}">{{ request.user.get_full_name }} {% if request.user.company %}({{ request.user.company.name }}){% endif %}</a></li>', |
|
||||||
visitorsListId:"visitors-list", |
|
||||||
somebodyId:"somebody", |
|
||||||
nobodyId:"nobody" |
|
||||||
}, |
|
||||||
advertise:{ |
|
||||||
id:"advert-member-form" |
|
||||||
}, |
|
||||||
event_news_subscribe:{ |
|
||||||
id: "event-news-subscribe-form" |
|
||||||
}, |
|
||||||
addCalendarText:"{% trans 'В расписание' %}", |
|
||||||
removeCalendarText:"{% trans 'Из расписания' %}" |
|
||||||
}); |
|
||||||
</script> |
|
||||||
{% endblock %} |
|
||||||
@ -1,577 +0,0 @@ |
|||||||
{% load static i18n %} |
|
||||||
{% load thumbnail %} |
|
||||||
{% load template_filters %} |
|
||||||
|
|
||||||
{% block page_body %} |
|
||||||
<div class="m-article event-page"> |
|
||||||
<div class="item-wrap event clearfix"> |
|
||||||
<aside> |
|
||||||
{% if exposition.expohit %} |
|
||||||
<div class="hit"></div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.canceled %} |
|
||||||
<div class="cancel"></div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<div class="i-pict"> |
|
||||||
{% with obj=exposition %} |
|
||||||
{% include 'client/includes/show_logo.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="i-stats"> |
|
||||||
{% if exposition.visitors %} |
|
||||||
<span class="visitors" title="{% trans 'Посетители' %}">{{ exposition.visitors }}</span> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.members %} |
|
||||||
<span class="participants" title="{% trans 'Участники' %}">{{ exposition.members }}</span> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="i-discount"> |
|
||||||
{% if exposition.discount %} |
|
||||||
<a class="discount-button" href="#">{% trans 'Скидка' %} -{{ exposition.discount }}%</a> |
|
||||||
<div class="dsc-text">{{ exposition.discount_description|safe|linebreaks }}</div> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</aside> |
|
||||||
|
|
||||||
<div class="i-info"> |
|
||||||
<header> |
|
||||||
<h1 class="i-title"> |
|
||||||
{% if exposition.main_title %} |
|
||||||
{{ exposition.name|safe }} - {{ exposition.main_title|lowfirst|safe }} |
|
||||||
{% else %} |
|
||||||
{{ exposition.name|safe }} |
|
||||||
{% endif %} |
|
||||||
</h1> |
|
||||||
</header> |
|
||||||
|
|
||||||
<div class="i-date"> |
|
||||||
{% with obj=exposition %} |
|
||||||
{% include 'client/includes/show_date_block.html' %} |
|
||||||
{% endwith %} |
|
||||||
|
|
||||||
{% if not request.GET.debug == '1' %} |
|
||||||
{% include "client/includes/sharing_block.html" %} |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{% if exposition.place %} |
|
||||||
<div class="i-address"> |
|
||||||
<header> |
|
||||||
<div class="address"> |
|
||||||
{{ exposition.place.country }}, {{ exposition.place.city }}, |
|
||||||
{% if exposition.place.web_page %} |
|
||||||
<a href="{{ exposition.place.get_permanent_url }}" class="place_link">{{ exposition.place.name }}</a> |
|
||||||
{% else %} |
|
||||||
{{ exposition.place.name }} |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
{# <div class="show-map"><a class="toggle-map" href="#">{% trans 'Раскрыть карту' %}</a></div>#} |
|
||||||
</header> |
|
||||||
|
|
||||||
<div class="show-map"><a class="toggle-map" href="#">{% trans 'Раскрыть карту' %}</a></div> |
|
||||||
|
|
||||||
<div class="i-map"> |
|
||||||
<div class="close-map"> |
|
||||||
<a class="toggle-map" href="#">{% trans 'Скрыть карту' %}</a> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="map-canvas" id="map-canvas" data-coords="{{ exposition.place.address.lat|coord_format }},{{ exposition.place.address.lng|coord_format }}" ></div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% else %} |
|
||||||
<div class="i-address"> |
|
||||||
<header> |
|
||||||
<div class="address"> |
|
||||||
{{ exposition.country.name }}, {{ exposition.city.name }}{% if exposition.place_alt %} , {{ exposition.place_alt }}{% endif %} |
|
||||||
</div> |
|
||||||
</header> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<hr /> |
|
||||||
<div class="i-buttons clearfix"> |
|
||||||
<div class="ib-main"> |
|
||||||
{% with event=exposition user=user %} |
|
||||||
{% include 'client/includes/visit_button.html' %} |
|
||||||
{% endwith %} |
|
||||||
|
|
||||||
{% include 'client/includes/calendar_button.html' with obj=exposition %} |
|
||||||
{% if request.user.is_admin %} |
|
||||||
<a target="_blank" class="button green " href="/admin/exposition/{{ object.url }}/">{% trans 'изменить' %}</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="event_org"> |
|
||||||
<a href="#pw-event-news-subscribe" class="button pw-open new_subribe_btn green"><i class="fa fa-at"></i> {% trans 'Подписаться на новости' %}</a> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<hr /> |
|
||||||
<div class="i-divs clearfix"> |
|
||||||
<div class="i-subj"> |
|
||||||
<ul> |
|
||||||
{% with themes=exposition.themes %} |
|
||||||
{% for theme in themes %} |
|
||||||
<li><a href="{{ object.catalog }}theme/{{ theme.url }}/">{{ theme.name }} ({{ theme.expositions_number }})</a></li> |
|
||||||
{% endfor %} |
|
||||||
{% endwith %} |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
<div class="i-tags grey"> |
|
||||||
{% with tags=exposition.tags %} |
|
||||||
{% for tag in tags %} |
|
||||||
<a href="{{ object.catalog }}tag/{{ tag.url }}/">{{ tag.name }}</a>{% if forloop.counter != tags|length %},{% endif %} |
|
||||||
{% endfor %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="exposition_main_image" {% if exposition.main_image %}data-background="{% thumbnail exposition.main_image '937x244' crop='center' %}"{% endif %}> |
|
||||||
<div class="buttons"> |
|
||||||
<a href="{% url 'expo_service' object.url 'tickets' %}" class="orange">{% trans 'Посетителю' %}</a> |
|
||||||
<a href="{% url 'expo_price' object.url %}" class="green">{% trans 'Экспоненту' %}</a> |
|
||||||
{% if object.paid_new_id and object.paid_new.public %} |
|
||||||
<a href="{{ object.paid_new.official.get_click_link }}" class="pink">{% trans 'Официальный сайт' %}</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
{# Описание выставки #} |
|
||||||
<div class="expo_description"> |
|
||||||
<h2>{% trans 'О выставке' %} {{ exposition.name|safe }}</h2> |
|
||||||
<aside class="right_grey_block"> |
|
||||||
{% if object.members_choice and object.visitors_choice %} |
|
||||||
<h4>{% trans 'Масштаб выставки:' %}</h4> |
|
||||||
<div class="exposition_members"> |
|
||||||
<div class="members"> |
|
||||||
<h5>{% trans 'Участники:' %}</h5> |
|
||||||
<span>{% if object.members_choice %}{{ object.members_choice }}{% else %}нет данных{% endif %}</span> |
|
||||||
</div> |
|
||||||
<div class="visitors"> |
|
||||||
<h5>{% trans 'Посетители:' %}</h5> |
|
||||||
<span>{% if object.visitors_choice %}{{ object.visitors_choice }}{% else %}нет данных{% endif %}</span> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<div class="logos"> |
|
||||||
{% if exposition.quality_label.ufi.is_set %} |
|
||||||
<div class="img_wrapper"> |
|
||||||
<img src="{% static 'client/img/approved-logo.png' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.quality_label.exporating.is_set %} |
|
||||||
<div class="img_wrapper"> |
|
||||||
<img src="{% static 'client/img/exporating_logo.png' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.quality_label.rsva.is_set %} |
|
||||||
<div class="img_wrapper"> |
|
||||||
<img src="{% static 'client/img/rsva.jpg' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</aside> |
|
||||||
|
|
||||||
<aside class="right_grey_block" id="recommended_expositions"> |
|
||||||
<h4>{% trans 'Также рекомендуем:' %}</h4> |
|
||||||
<div class="recommended_expositions"> |
|
||||||
{% for item in recommend_expos %} |
|
||||||
<div class="recommended"> |
|
||||||
<a href="{{ item.get_absolute_url }}" target="_blank">{{ item.name }}</a> |
|
||||||
<p>{{ item.city }}, {{ item.data_begin|date:'d' }}{% if item.data_end %}-{{ item.data_end|date:'d' }}{% endif %} сентября {{ item.data_begin|date:'Y' }}</p> |
|
||||||
</div> |
|
||||||
{% endfor %} |
|
||||||
</div> |
|
||||||
</aside> |
|
||||||
|
|
||||||
{% if exposition.description %} |
|
||||||
<div class="expo_description_detail"> |
|
||||||
{{ exposition.description|safe }} |
|
||||||
</div> |
|
||||||
{% elif default_description %} |
|
||||||
<div class="expo_description_detail"> |
|
||||||
{{ default_description|safe }} |
|
||||||
</div> |
|
||||||
{% else %} |
|
||||||
{% include "client/includes/exposition/default_description.html" with expo=exposition className="expo_description_detail" %} |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{% include 'client/includes/banners/expo_detail.html' %} |
|
||||||
|
|
||||||
<hr> |
|
||||||
|
|
||||||
{# Дополнительная информация #} |
|
||||||
<div id="additional" class="i-event-additional clearfix"> |
|
||||||
<div class="sect-title">{% trans 'Дополнительная информация' %}</div> |
|
||||||
|
|
||||||
<ul class="e-docs"> |
|
||||||
{% if exposition.business_program.exists %} |
|
||||||
<li><a href="{{ exposition.get_permanent_url }}program/">{% trans 'Деловая программа' %}</a></li> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<li><a href="{{ exposition.get_permanent_url }}price/">{% trans 'Условия участия' %}</a></li> |
|
||||||
|
|
||||||
{% if exposition.statistic_exists %} |
|
||||||
<li><a href="{{ exposition.get_permanent_url }}statistic/">{% trans 'Статистика' %}</a></li> |
|
||||||
{% endif %} |
|
||||||
{# TODO: ссылки #} |
|
||||||
<li><a href="#" class="find_hotel">{% trans 'Найти отель' %}</a></li> |
|
||||||
<li><a href="#" class="car_rent">{% trans 'Арендовать авто' %}</a></li> |
|
||||||
<li><a href="#" class="translator">{% trans 'Услуги переводчика' %}</a></li> |
|
||||||
</ul> |
|
||||||
|
|
||||||
<dl class="add-info"> |
|
||||||
{% if exposition.organiser.all.exists %} |
|
||||||
<dt>{% trans 'Организатор' %}:</dt> |
|
||||||
<dd> |
|
||||||
{% with organisers=exposition.organiser.all %} |
|
||||||
{% for organiser in organisers %} |
|
||||||
{{ organiser.name }}<br /> |
|
||||||
{% endfor %} |
|
||||||
{% endwith %} |
|
||||||
</dd> |
|
||||||
{% else %} |
|
||||||
{% if exposition.org %} |
|
||||||
{% for item in exposition.org_split %} |
|
||||||
<dt>{% if forloop.counter == 1 %}{% trans 'Организатор' %}:{% endif %}</dt> |
|
||||||
|
|
||||||
<dd> |
|
||||||
{{ item }} |
|
||||||
</dd> |
|
||||||
{% endfor %} |
|
||||||
|
|
||||||
{% endif %} |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.web_page %} |
|
||||||
<dt>{% trans 'Веб-сайт' %}:</dt> |
|
||||||
<dd> |
|
||||||
<a target="_blank" href="#" data-type="href" data-hash="1qwer" data-url="{{ exposition.web_page|base64_encode }}" class="link-encode">{{ exposition.web_page }}</a> |
|
||||||
</dd> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.get_audience %} |
|
||||||
<dt>{% trans 'Аудитория' %}:</dt> |
|
||||||
<dd>{{ exposition.get_audience }}</dd> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.get_periodic %} |
|
||||||
<dt>{% trans 'Периодичность' %}:</dt> |
|
||||||
<dd>{{ exposition.get_periodic }}</dd> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.products %} |
|
||||||
<dt>{% trans 'Экспонируемые продукты' %}:</dt> |
|
||||||
<dd>{{ exposition.products|safe }}</dd> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.time %} |
|
||||||
<dt>{% trans 'Время работы' %}:</dt> |
|
||||||
<dd>{{ exposition.time|safe }}</dd> |
|
||||||
{% endif %} |
|
||||||
</dl> |
|
||||||
</div> |
|
||||||
|
|
||||||
<hr> |
|
||||||
{% include 'client/includes/booking_block.html' with city=exposition.city place=exposition.place event=exposition %} |
|
||||||
|
|
||||||
{# Планируют быть #} |
|
||||||
<div class="conf_visitors"> |
|
||||||
{% with visitors=exposition.users.all|slice:":17" %} |
|
||||||
<h3>{% trans 'Планируют быть на' %} {{ exposition.name }}</h3> |
|
||||||
|
|
||||||
|
|
||||||
<ul class="visitors-list" id="visitors-list"> |
|
||||||
{% if visitors %} |
|
||||||
{# есть посетители #} |
|
||||||
{% for user in visitors %} |
|
||||||
{% if user == request.user %} |
|
||||||
<li class="current"><a href="{{ user.get_permanent_url }}">{{ user.get_full_name }} {% if user.company %}({{ user.company.name }}){% endif %}</a></li> |
|
||||||
{% else %} |
|
||||||
<li><a href="{{ user.get_permanent_url }}">{{ user.get_full_name }} {% if user.company %}({{ user.company.name }}){% endif %}</a></li> |
|
||||||
{% endif %} |
|
||||||
{% endfor %} |
|
||||||
{% endif %} |
|
||||||
</ul> |
|
||||||
|
|
||||||
<p id="nobody" class=" mb-1em {% if exposition.users.all|length > 0 %}hidden{% else %}{% endif %}">{% trans 'Пока никто не отметился на событии.' %}</p> |
|
||||||
|
|
||||||
<p><a id="somebody" class=" more mb-1em {% if visitors|length > 0 %}{%else%}hidden{% endif %}" href="{{ event.get_permanent_url }}visitors/">{% trans 'Все посетители' %}</a></p> |
|
||||||
{% endwith %} |
|
||||||
|
|
||||||
{% with event=exposition user=user %} |
|
||||||
{% include 'client/includes/visit_button.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{# Слайдер фото с прошлой выставки #} |
|
||||||
{% if exposition.get_photos %} |
|
||||||
{% with photos=exposition.get_photos %} |
|
||||||
<div class="conference_slider"> |
|
||||||
<h2><a href="{{ exposition.get_permanent_url }}photo/">{% trans 'Фотографии с прошлой конференции' %}</a></h2> |
|
||||||
<div class="last_photos_slider"> |
|
||||||
{% for photo in photos %} |
|
||||||
{% thumbnail photo.image '936x468' crop="center" as im %} |
|
||||||
<a href="{{ exposition.get_permanent_url }}photo/"><img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" alt="" /></a> |
|
||||||
{% endthumbnail %} |
|
||||||
{% endfor %} |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="last_photos_thumbs"> |
|
||||||
{% for photo in photos %} |
|
||||||
{% thumbnail photo.image '137x95' crop="center" as im %} |
|
||||||
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" alt="" /> |
|
||||||
{% endthumbnail %} |
|
||||||
{% endfor %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endwith %} |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<div class="exposition_news"> |
|
||||||
{% include "client/includes/article/articles_in_event.html" with event=exposition news_list=news %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{% if exposition.members or exposition.visitors or exposition.foundation_year or exposition.area %} |
|
||||||
<div class="e-num-info"> |
|
||||||
{% if exposition.area %} |
|
||||||
<div class="eni-area-wrap"> |
|
||||||
<div class="eni-title">{% trans 'Общая выставочная площадь' %}</div> |
|
||||||
<div class="eni-area"> |
|
||||||
{{ exposition.area }} {% trans 'м²' %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
<div class="eni-stats"> |
|
||||||
{% if exposition.members %} |
|
||||||
<div class="enis-item"><b>{{ exposition.members }}</b> {% trans 'участников' %}</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.visitors %} |
|
||||||
<div class="enis-item"><b>{{ exposition.visitors }}</b> {% trans 'посетителей' %}</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exposition.foundation_year %} |
|
||||||
<div class="eni-founded">{% trans 'Основано в' %} <b>{{ exposition.foundation_year }}</b> {% trans 'году' %}</div> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<div class="conf_comments"> |
|
||||||
<h2>{% trans 'Комментарии' %}</h2> |
|
||||||
|
|
||||||
{% for comment in comments %} |
|
||||||
<div class="comment"> |
|
||||||
<div class="comment_author"> |
|
||||||
{{ comment.user.get_full_name }} <time><i class="fa fa-calendar"></i> {{ comment.created }}</time> |
|
||||||
</div> |
|
||||||
<div class="comment_text">{{ comment.text }}</div> |
|
||||||
<a href="#" data-parent="{{ comment.pk }}" data-user="{{ comment.user.get_full_name }}" class="reply_comment"><i class="fa fa-comment"></i> <span>{% trans "Ответить на комментарий" %}</span></a> |
|
||||||
|
|
||||||
{% for answer in comment.childs %} |
|
||||||
<div class="comment"> |
|
||||||
<div class="comment_author"> |
|
||||||
{{ answer.user.get_full_name }} <time><i class="fa fa-calendar"></i> {{ answer.created }}</time> |
|
||||||
</div> |
|
||||||
<div class="comment_text">{{ answer.text }}</div> |
|
||||||
</div> |
|
||||||
{% endfor %} |
|
||||||
</div> |
|
||||||
{% endfor %} |
|
||||||
|
|
||||||
{% if user.is_authenticated %} |
|
||||||
<div class="сomment_form"> |
|
||||||
<form action="." method="post" id="comment_form"> |
|
||||||
{% csrf_token %} |
|
||||||
{# {{ commentform.as_p }}#} |
|
||||||
<h3>{% trans 'Оставьте свой отзыв:' %}</h3> |
|
||||||
<p> |
|
||||||
<label for="id_text">Сообщение:</label> |
|
||||||
<textarea id="id_text" name="text" placeholder="{% trans 'Введите текст' %}"></textarea> |
|
||||||
|
|
||||||
<button type="submit" class="button">{% trans 'Оставить отзыв' %}</button> |
|
||||||
</p> |
|
||||||
</form> |
|
||||||
</div> |
|
||||||
{% else %} |
|
||||||
<p class="no_login">{% trans 'Если вы хотите оставить отзыв или комментарий о конференции' %}, <a class="login pw-open" href="#pw-login">{% trans 'авторизуйтесь' %}.</a></p> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="conf_sharing"> |
|
||||||
{% include 'client/includes/sharing_block_full.html' %} |
|
||||||
</div> |
|
||||||
|
|
||||||
{% include 'client/includes/banners/catalog_inner_2.html' %} |
|
||||||
|
|
||||||
{% with themes=exposition.themes %} |
|
||||||
{% for theme in themes %} |
|
||||||
<li><a href="{{ object.catalog }}theme/{{ theme.url }}/">{{ theme.name }} ({{ theme.expositions_number }})</a></li> |
|
||||||
{% endfor %} |
|
||||||
{% endwith %} |
|
||||||
|
|
||||||
{% if exposition.get_nearest_events %} |
|
||||||
<div class="e-cat"> |
|
||||||
<div class="sect-title"> |
|
||||||
{% with themes=exposition.themes %} |
|
||||||
{% trans 'Ближайшие выставки по тематике' %} «{% for theme in themes %}{{ theme.name }}{% if not forloop.last %}, {% endif %}{% endfor %}» |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
<ul class="cat-list cl-exhibitions"> |
|
||||||
{% for exp in exposition.get_nearest_events %} |
|
||||||
<li class="cl-item"> |
|
||||||
<div class="cl-item-wrap clearfix"> |
|
||||||
<a href="{{ exp.get_permanent_url }}"> |
|
||||||
<div class="cli-pict"> |
|
||||||
{% with obj=exp %} |
|
||||||
{% include 'client/includes/show_logo.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
</a> |
|
||||||
<div class="cli-info"> |
|
||||||
<div class="cli-top clearfix"> |
|
||||||
{% if exp.quality_label.rsva.is_set %} |
|
||||||
<div class="cli-approved"> |
|
||||||
<img width="52" height="42" src="{% static 'client/img/rsva.jpg' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exp.quality_label.exporating.is_set %} |
|
||||||
<div class="cli-approved"> |
|
||||||
<img width="52" height="42" src="{% static 'client/img/exporating_logo.png' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% if exp.quality_label.ufi.is_set %} |
|
||||||
<div class="cli-approved"> |
|
||||||
<img width="52" height="42" src="{% static 'client/img/approved-logo.png' %}" alt="" title="Approved Event" /> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
<header> |
|
||||||
<div class="cli-title"><a href="{{ exp.get_permanent_url }}">{{ exp.name|safe }}</a></div> |
|
||||||
</header> |
|
||||||
|
|
||||||
<div class="cli-descr"> |
|
||||||
{{ exp.main_title|safe|linebreaks }} |
|
||||||
</div> |
|
||||||
<div class="cli-bot clearfix"> |
|
||||||
<div class="cli-date"> |
|
||||||
{% with obj=exp %} |
|
||||||
{% include 'client/includes/show_date_block.html' %} |
|
||||||
{% endwith %} |
|
||||||
</div> |
|
||||||
|
|
||||||
<div class="cli-place"> |
|
||||||
<a href="{{ exposition.catalog }}country/{{ exp.country.url }}/">{{ exp.country }}</a>, <a href="{{ exposition.catalog }}city/{{ exp.city.url }}/">{{ exp.city }}</a> |
|
||||||
{% if exp.place %} |
|
||||||
, <a href="{{ exp.place.get_permanent_url }}">{{ exp.place }}</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</li> |
|
||||||
{% endfor %} |
|
||||||
<li><a class="button more" href="{{ exposition.get_nearest_events_url|safe }}">{% trans 'Смотреть все' %}</a></li> |
|
||||||
</ul> |
|
||||||
</div> |
|
||||||
{% endif %} |
|
||||||
|
|
||||||
{% include 'client/includes/banners/detail_inner_3.html' %} |
|
||||||
|
|
||||||
<div class="e-cat look-also"> |
|
||||||
<div class="sect-title">{% trans 'Смотрите также:' %}</div> |
|
||||||
<a href="{{ exposition.catalog }}city/{{ exposition.city.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' and exposition.city.inflect %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a> |
|
||||||
<a href="{{ exposition.catalog }}country/{{ exposition.country.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' and exposition.country.inflect %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a> |
|
||||||
{% if exposition.theme.all %} |
|
||||||
<a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/country/{{ exposition.country.url }}/">{% trans "Выставки по тематике " %}«{{ exposition.theme.all.0.name|capfirst }}» {% if request.LANGUAGE_CODE == 'ru' and exposition.country.inflect %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a> |
|
||||||
<a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/city/{{ exposition.city.url }}/">{% trans "Выставки по тематике " %}«{{ exposition.theme.all.0.name|capfirst }}» {% if request.LANGUAGE_CODE == 'ru' and exposition.city.inflect %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a> |
|
||||||
{% endif %} |
|
||||||
</div> |
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block content_text %} |
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block popup %} |
|
||||||
{% include 'client/popups/advertise_member.html' with form=advertising_form %} |
|
||||||
{% include 'client/popups/event_news_subscribe.html' %} |
|
||||||
{% endblock %} |
|
||||||
|
|
||||||
{% block scripts %} |
|
||||||
{% if request.GET.debug == '1' %} |
|
||||||
<script src="{% static 'client/js/_modules/page.exposition.object.js' %}"></script> |
|
||||||
{% else %} |
|
||||||
<script src="{% static 'client/js_min/_modules/page.exposition.object.min.js' %}"></script> |
|
||||||
{% endif %} |
|
||||||
<script> |
|
||||||
EXPO.exposition.object.init({ |
|
||||||
visit:{ |
|
||||||
activeClass:"visit", |
|
||||||
passiveClass:"unvisit", |
|
||||||
currentHtml:'<li class="current"><a href="{{ request.user.get_permanent_url }}">{{ request.user.get_full_name }} {% if request.user.company %}({{ request.user.company.name }}){% endif %}</a></li>', |
|
||||||
visitorsListId:"visitors-list", |
|
||||||
somebodyId:"somebody", |
|
||||||
nobodyId:"nobody" |
|
||||||
}, |
|
||||||
advertise:{ |
|
||||||
id:"advert-member-form" |
|
||||||
}, |
|
||||||
event_news_subscribe:{ |
|
||||||
id: "event-news-subscribe-form" |
|
||||||
}, |
|
||||||
addCalendarText:"{% trans 'В расписание' %}", |
|
||||||
removeCalendarText:"{% trans 'Из расписания' %}" |
|
||||||
}); |
|
||||||
</script> |
|
||||||
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.js"></script> |
|
||||||
<script> |
|
||||||
$(window).load(function () { |
|
||||||
$('.last_photos_slider').slick({ |
|
||||||
slidesToShow: 1, |
|
||||||
slidesToScroll: 1, |
|
||||||
fade: true, |
|
||||||
asNavFor: '.last_photos_thumbs' |
|
||||||
}); |
|
||||||
|
|
||||||
$('.last_photos_thumbs').slick({ |
|
||||||
slidesToShow: 5, |
|
||||||
slidesToScroll: 1, |
|
||||||
asNavFor: '.last_photos_slider', |
|
||||||
dots: false, |
|
||||||
variableWidth: true, |
|
||||||
focusOnSelect: true |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
$(function() { |
|
||||||
var $recommended = $('#recommended_expositions'), |
|
||||||
$text = $('.expo_description_detail'), |
|
||||||
$main_image = $('.exposition_main_image'); |
|
||||||
|
|
||||||
$recommended |
|
||||||
.insertBefore($text.find('>*').eq(-2)) |
|
||||||
.show(); |
|
||||||
|
|
||||||
if ($main_image.data('background')) { |
|
||||||
$main_image.css('background', 'url(' + $main_image.data('background') + ')'); |
|
||||||
} |
|
||||||
}) |
|
||||||
</script> |
|
||||||
{% endblock %} |
|
||||||
Loading…
Reference in new issue