parent
0319e0d9da
commit
0ee734eb98
59 changed files with 10091 additions and 88 deletions
@ -0,0 +1,10 @@ |
||||
from django.conf.urls import url, patterns |
||||
from views import NewPage, PageList, EditPage, DeletePage, PageDetailed |
||||
|
||||
urlpatterns = patterns('', |
||||
url(r'^new/$', NewPage.as_view(), name='new_page' ), |
||||
url(r'^all/$', PageList.as_view(), name = 'page_list'), |
||||
url(r'^edit/(?P<url>.*)/$', EditPage.as_view(), name='edit_page'), |
||||
url(r'^delete/(?P<url>.*)/$', DeletePage.as_view(), name='delete_page'), |
||||
url(r'^(?P<url>.*)/$', PageDetailed.as_view(), name='page_view'), |
||||
) |
||||
@ -0,0 +1,76 @@ |
||||
# -*- coding: utf-8 -*- |
||||
|
||||
import xlwt |
||||
import datetime |
||||
|
||||
from exposition.models import Exposition |
||||
from conference.models import Conference |
||||
|
||||
from django.core.exceptions import ObjectDoesNotExist |
||||
|
||||
HEADER_STYLE = xlwt.easyxf('font: bold on') |
||||
DEFAULT_STYLE = xlwt.easyxf() |
||||
CELL_STYLE_MAP = ( |
||||
(datetime.date, xlwt.easyxf(num_format_str='DD/MM/YYYY')), |
||||
(datetime.time, xlwt.easyxf(num_format_str='HH:MM')), |
||||
(bool, xlwt.easyxf(num_format_str='BOOLEAN')), |
||||
) |
||||
|
||||
def multi_getattr(obj, attr, default=None): |
||||
attributes = attr.split(".") |
||||
for i in attributes: |
||||
try: |
||||
obj = getattr(obj, i) |
||||
except AttributeError: |
||||
if default: |
||||
return default |
||||
else: |
||||
return '-' |
||||
return obj |
||||
|
||||
|
||||
def get_column_cell(obj, name): |
||||
try: |
||||
attr = multi_getattr(obj, name) |
||||
except ObjectDoesNotExist: |
||||
return '' |
||||
if hasattr(attr, '_meta'): |
||||
# A Django Model (related object) |
||||
return unicode(attr).strip() |
||||
elif hasattr(attr, 'all'): |
||||
# A Django queryset (ManyRelatedManager) |
||||
return ', '.join(unicode(x).strip() for x in attr.all()) |
||||
return attr |
||||
|
||||
def queryset_to_workbook(queryset, columns, header_style=None, default_style=None, cell_style_map=None): |
||||
workbook = xlwt.Workbook() |
||||
report_date = datetime.date.today() |
||||
sheet_name = 'Export {0}'.format(report_date.strftime('%Y-%m-%d')) |
||||
sheet = workbook.add_sheet(sheet_name) |
||||
|
||||
if not header_style: |
||||
header_style = HEADER_STYLE |
||||
if not default_style: |
||||
default_style = DEFAULT_STYLE |
||||
if not cell_style_map: |
||||
cell_style_map = CELL_STYLE_MAP |
||||
|
||||
obj = queryset[0] |
||||
|
||||
for y, column in enumerate(columns): |
||||
header_list=[u'Название события',u'Страна',u'Город',u'Место проведения', u'Дата начала', u'Дата окончания'] |
||||
|
||||
sheet.write(0, y, header_list[y], header_style) |
||||
|
||||
for x, obj in enumerate(queryset, start=1): |
||||
for y, column in enumerate(columns): |
||||
value = get_column_cell(obj, column) |
||||
style = default_style |
||||
for value_type, cell_style in cell_style_map: |
||||
if isinstance(value, value_type): |
||||
style = cell_style |
||||
sheet.write(x, y, value, style) |
||||
|
||||
return workbook |
||||
|
||||
|
||||
@ -0,0 +1,74 @@ |
||||
# -*- coding: utf-8 -*- |
||||
from django.views.generic import TemplateView, CreateView, ListView, UpdateView |
||||
from django.conf import settings |
||||
from expobanner.models import URL, BannerGroup, Banner |
||||
from expobanner.forms import UrlCreateForm, BannerCreateGroupForm, BannerCreateForm, BannerGroupUpdateForm |
||||
|
||||
|
||||
class BannersControl(TemplateView): |
||||
template_name = 'admin/expobanner/banners_control.html' |
||||
|
||||
# CREATE VIEWS |
||||
class AbstractCreate(CreateView): |
||||
template_name = 'admin/expobanner/default_form.html' |
||||
success_url = '/admin/expobanners/banners/control/' |
||||
|
||||
|
||||
class CreateUrl(AbstractCreate): |
||||
model = URL |
||||
form_class = UrlCreateForm |
||||
|
||||
|
||||
class CreateBannerGroup(AbstractCreate): |
||||
model = BannerGroup |
||||
form_class = BannerCreateGroupForm |
||||
|
||||
|
||||
class CreateBanner(AbstractCreate): |
||||
model = Banner |
||||
form_class = BannerCreateForm |
||||
|
||||
|
||||
# LISTS VIEWS |
||||
class AbstractList(ListView): |
||||
paginate_by = settings.ADMIN_PAGINATION |
||||
template_name = 'admin/expobanner/default_list.html' |
||||
|
||||
def get_context_data(self, **kwargs): |
||||
context = super(AbstractList, self).get_context_data(**kwargs) |
||||
context['verbose'] = self.verbose |
||||
return context |
||||
|
||||
class UrlList(AbstractList): |
||||
model = URL |
||||
verbose = u'Список урлов' |
||||
|
||||
|
||||
class BannerGroupList(AbstractList): |
||||
model = BannerGroup |
||||
verbose = u'Список груп' |
||||
|
||||
|
||||
class BannerList(AbstractList): |
||||
model = Banner |
||||
verbose = u'Список банеров' |
||||
|
||||
# UPDATE VIEWS |
||||
class AbstractUpdate(UpdateView): |
||||
template_name = 'admin/expobanner/default_form.html' |
||||
success_url = '/admin/expobanners/banners/control/' |
||||
|
||||
|
||||
class UrlUpdate(AbstractUpdate): |
||||
model = URL |
||||
form_class = UrlCreateForm |
||||
|
||||
|
||||
class BannerGroupUpdate(AbstractUpdate): |
||||
model = BannerGroup |
||||
form_class = BannerGroupUpdateForm |
||||
|
||||
|
||||
class BannerUpdate(AbstractUpdate): |
||||
model = Banner |
||||
form_class = BannerCreateForm |
||||
@ -0,0 +1,21 @@ |
||||
# -*- coding: utf-8 -*- |
||||
from django.conf.urls import patterns, url |
||||
from expobanner.admin import * |
||||
|
||||
urlpatterns = patterns('expobanner.admin', |
||||
url(r'^banners/control/$', BannersControl.as_view(), name='expobanner-baneers_control'), |
||||
|
||||
url(r'^banners/url/$', CreateUrl.as_view(), name='expobanner-create_url'), |
||||
url(r'^banners/group/$', CreateBannerGroup.as_view(), name='expobanner-create_group'), |
||||
url(r'^banners/banner/$', CreateBanner.as_view(), name='expobanner-create_banner'), |
||||
|
||||
url(r'^banners/url/list/$', UrlList.as_view(), name='expobanner-list_url'), |
||||
url(r'^banners/group/list/$', BannerGroupList.as_view(), name='expobanner-list_group'), |
||||
url(r'^banners/banner/list/$', BannerList.as_view(), name='expobanner-list_banner'), |
||||
|
||||
url(r'^banners/url/(?P<pk>\d+)/edit/$', UrlUpdate.as_view(), name='expobanner-update_url'), |
||||
url(r'^banners/group/(?P<pk>\d+)/edit/$', BannerGroupUpdate.as_view(), name='expobanner-update_group'), |
||||
url(r'^banners/banner/(?P<pk>\d+)/edit/$', BannerUpdate.as_view(), name='expobanner-update_banner'), |
||||
|
||||
|
||||
) |
||||
@ -0,0 +1,76 @@ |
||||
# -*- coding: utf-8 -*- |
||||
from django import forms |
||||
from expobanner.models import URL, BannerGroup, Banner |
||||
from country.models import Country |
||||
from city.models import City |
||||
from theme.models import Theme, Tag |
||||
|
||||
|
||||
class UrlCreateForm(forms.ModelForm): |
||||
verbose = u'Создать урл' |
||||
class Meta: |
||||
model = URL |
||||
exclude = ['created_at', 'updated_at', 'sites'] |
||||
|
||||
|
||||
class BannerCreateGroupForm(forms.ModelForm): |
||||
verbose = u'Создать групу' |
||||
class Meta: |
||||
model = BannerGroup |
||||
exclude = ['created_at', 'updated_at', 'speed'] |
||||
|
||||
class BannerGroupUpdateForm(BannerCreateGroupForm): |
||||
verbose = u'Изменить групу' |
||||
class Meta: |
||||
model = BannerGroup |
||||
exclude = ['created_at', 'updated_at', 'slug', 'speed'] |
||||
|
||||
|
||||
class BannerCreateForm(forms.ModelForm): |
||||
verbose = u'Создать банер' |
||||
country = forms.ChoiceField(label=u'Страна', choices=[('', ' ')] + [(c.id, c.name) for c in Country.objects.all()], required=False) |
||||
theme = forms.ChoiceField(label=u'Тематика', required=False, |
||||
choices=[('', ' ')] + [(item.id, item.name) for item in Theme.objects.language().all()]) |
||||
city = forms.CharField(label=u'Город', widget=forms.HiddenInput(), required=False) |
||||
tag = forms.CharField(label=u'Тег', widget=forms.HiddenInput(), required=False) |
||||
|
||||
|
||||
class Meta: |
||||
model = Banner |
||||
exclude = ['created_at', 'updated_at', 'often', 'paid'] |
||||
|
||||
def clean_theme(self): |
||||
theme = self.cleaned_data['theme'] |
||||
if not theme: |
||||
return None |
||||
try: |
||||
return Theme.objects.filter(id=theme) |
||||
except Theme.DoesNotExist: |
||||
return None |
||||
|
||||
def clean_country(self): |
||||
country = self.cleaned_data['country'] |
||||
if not country: |
||||
return None |
||||
try: |
||||
return Country.objects.get(id=country) |
||||
except Country.DoesNotExist: |
||||
return None |
||||
|
||||
def clean_tag(self): |
||||
tag = self.cleaned_data['tag'] |
||||
if not tag: |
||||
return None |
||||
try: |
||||
return Tag.objects.get(id=tag) |
||||
except Tag.DoesNotExist: |
||||
return None |
||||
|
||||
def clean_city(self): |
||||
city = self.cleaned_data['city'] |
||||
if not city: |
||||
return None |
||||
try: |
||||
return City.objects.get(id=city) |
||||
except City.DoesNotExist: |
||||
return None |
||||
@ -0,0 +1,32 @@ |
||||
# -*- coding: utf-8 -* |
||||
from random import choice, shuffle |
||||
from django.db import models |
||||
from django.core.cache import cache |
||||
|
||||
|
||||
class BiasedManager(models.Manager): |
||||
def by_time(self, **kwargs): |
||||
all = super(BiasedManager, self).get_query_set().filter(**kwargs) |
||||
result = [] |
||||
for i in all: |
||||
for j in range(i.often): |
||||
result.append(i) |
||||
return result |
||||
|
||||
def one(self, **kwargs): |
||||
return choice(self.by_time(**kwargs)) |
||||
|
||||
def by_often(self, **kwargs): |
||||
result = self.by_time(**kwargs) |
||||
shuffle(result) |
||||
return result |
||||
|
||||
class BannerGroupCached(models.Manager): |
||||
def all(self): |
||||
key = 'banner_group_all' |
||||
result = cache.get(key) |
||||
if not result: |
||||
result = list(self.filter()) |
||||
cache.set(key, result, 90) |
||||
return result |
||||
|
||||
@ -0,0 +1,236 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import hashlib |
||||
from datetime import datetime, date |
||||
|
||||
from django.db import models |
||||
from django.utils.translation import ugettext_lazy as _ |
||||
from django.conf import settings |
||||
from django.contrib.sites.models import Site |
||||
|
||||
from .managers import BiasedManager, BannerGroupCached |
||||
|
||||
|
||||
class URL(models.Model): |
||||
title = models.CharField(verbose_name=u'Заголовок', max_length=256) |
||||
url = models.CharField(verbose_name=u'URL or URL RegEx', max_length=2048) |
||||
regex = models.BooleanField(verbose_name=u'RegEx', default=False) |
||||
sites = models.ManyToManyField(Site, related_name='site_urls', verbose_name=_('Sites'), null=True, blank=True) |
||||
|
||||
public = models.BooleanField(verbose_name=u'Активный', default=True) |
||||
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) |
||||
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) |
||||
|
||||
def __unicode__(self): |
||||
return self.title |
||||
|
||||
class Meta: |
||||
ordering = ['-created_at'] |
||||
verbose_name = _('URL') |
||||
verbose_name_plural = _('URLs') |
||||
|
||||
def get_admin_url(self): |
||||
return '/admin/expobanners/banners/url/%d/edit/'%self.id |
||||
|
||||
|
||||
class BannerGroup (models.Model): |
||||
name = models.CharField(verbose_name=u'Имя', max_length=255) |
||||
slug = models.SlugField(verbose_name=u'URL', unique=True) |
||||
width = models.PositiveSmallIntegerField(verbose_name=u'Ширина', default=0) |
||||
height = models.PositiveSmallIntegerField(verbose_name=u'Высота', default=0) |
||||
speed = models.PositiveSmallIntegerField(verbose_name=u'Скорость отображения', default=2000) |
||||
|
||||
public = models.BooleanField(verbose_name=u'Активная', default=True) |
||||
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) |
||||
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) |
||||
cached = BannerGroupCached() |
||||
|
||||
def size(self): |
||||
return '%sx%s' % (self.width, self.height) |
||||
|
||||
def __unicode__(self): |
||||
return '%s - [%s x %s]' % (self.name, self.width, self.height) |
||||
|
||||
class Meta: |
||||
ordering = ['name'] |
||||
verbose_name = _('Banner Group') |
||||
verbose_name_plural = _('Banner Groups') |
||||
|
||||
def get_admin_url(self): |
||||
return '/admin/expobanners/banners/group/%d/edit/'%self.id |
||||
|
||||
|
||||
class Banner(models.Model): |
||||
objects = BiasedManager() |
||||
|
||||
title = models.CharField(verbose_name=u'Заголовок', max_length=255, blank=True) |
||||
alt = models.CharField(verbose_name=_('Alt'), max_length=255) |
||||
|
||||
text = models.TextField(verbose_name=u'Текст', blank=True, null=True) |
||||
img = models.FileField(verbose_name=u'Картинка', upload_to='expo_upload', blank=True, null=True) |
||||
url = models.CharField(verbose_name=u'URL', max_length=1024) |
||||
|
||||
sort = models.PositiveSmallIntegerField(verbose_name=u'Сорт', default=500) |
||||
|
||||
group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=u'Место', null=True, blank=True) |
||||
often = models.PositiveSmallIntegerField( |
||||
verbose_name=_('Often'), |
||||
help_text=_('A ten will display 10 times more often that a one.'), |
||||
choices=[[i, i] for i in range(11)] |
||||
) |
||||
urls = models.ManyToManyField(URL, related_name='url_banners', verbose_name=_('URLs'), null=True, blank=True) |
||||
|
||||
html = models.BooleanField(verbose_name=_('HTML?'), default=False) |
||||
flash = models.BooleanField(verbose_name=_('Flash?'), default=False) |
||||
paid = models.BooleanField(verbose_name=_('Is Paid event link?'), default=False) |
||||
|
||||
|
||||
public = models.BooleanField(verbose_name=u'Активный', default=True) |
||||
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) |
||||
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) |
||||
|
||||
theme = models.ForeignKey('theme.Theme', blank=True, null=True, verbose_name=u'Тематика') |
||||
tag = models.ForeignKey('theme.Tag', blank=True, null=True, verbose_name=u'Тег') |
||||
country = models.ForeignKey('country.Country', blank=True, null=True, verbose_name=u'Страна') |
||||
city = models.ForeignKey('city.City', blank=True, null=True, verbose_name=u'Город') |
||||
|
||||
|
||||
def get_admin_url(self): |
||||
return '/admin/expobanners/banners/banner/%d/edit/'%self.id |
||||
|
||||
|
||||
def key(slef): |
||||
if hasattr(settings, 'SECRET_KEY'): |
||||
key = str(datetime.now()) + settings.SECRET_KEY |
||||
else: |
||||
key = str(datetime.now()) |
||||
return hashlib.md5(key).hexdigest() |
||||
|
||||
def log(self, request, type, key): |
||||
log = { |
||||
'type': type, |
||||
'key': key, |
||||
'banner': self, |
||||
'group': self.group, |
||||
'ip': request.META.get('REMOTE_ADDR'), |
||||
'user_agent': request.META.get('HTTP_USER_AGENT'), |
||||
'page': request.META.get('HTTP_REFERER'), |
||||
} |
||||
|
||||
if request.user.is_authenticated(): |
||||
log['user'] = request.user |
||||
return Log.objects.create(**log) |
||||
|
||||
@models.permalink |
||||
def image(self): |
||||
return ('banner_view', (), {'banner_id': self.pk, 'key': self.key()}) |
||||
|
||||
def impressions(self): |
||||
return Log.objects.filter(banner=self.pk, type=0).count() |
||||
|
||||
def views(self): |
||||
return Log.objects.filter(banner=self.pk, type=1).count() |
||||
|
||||
def clicks(self): |
||||
return Log.objects.filter(banner=self.pk, type=2).count() |
||||
|
||||
def __unicode__(self): |
||||
return self.title or self.alt |
||||
|
||||
def get_absolute_url(self): |
||||
if self.url == '#': |
||||
return self.url |
||||
else: |
||||
@models.permalink |
||||
def get_absolute_url(self): |
||||
return ('banner_click', (), {'banner_id': self.pk, 'key': self.key()}) |
||||
return get_absolute_url(self) |
||||
|
||||
class Meta: |
||||
ordering = ['sort'] |
||||
verbose_name = _('Banner') |
||||
verbose_name_plural = _('Banners') |
||||
|
||||
|
||||
class Log(models.Model): |
||||
banner = models.ForeignKey(Banner, related_name='banner_logs') |
||||
group = models.ForeignKey(BannerGroup, related_name='group_logs', verbose_name=_('Group'), blank=True) |
||||
urls = models.ManyToManyField(URL, related_name='url_logs', verbose_name=_('URLs'), blank=True) |
||||
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='users', verbose_name=_('User')) |
||||
datetime = models.DateTimeField(verbose_name=_('Clicked At'), auto_now_add=True) |
||||
ip = models.IPAddressField(verbose_name=_('IP'), null=True, blank=True) |
||||
user_agent = models.CharField(verbose_name=_('User Agent'), max_length=1024, null=True, blank=True) |
||||
page = models.URLField(verbose_name=_('Page'), null=True, blank=True) |
||||
key = models.CharField(verbose_name=_('User Agent'), max_length=32, null=True, blank=True) |
||||
TYPE_CHOICES = ( |
||||
(0, 'impressions'), |
||||
(1, 'view'), |
||||
(2, 'click') |
||||
) |
||||
|
||||
type = models.PositiveSmallIntegerField(verbose_name=_('Type'), max_length=1, default=0, choices=TYPE_CHOICES) |
||||
|
||||
def __unicode__(self): |
||||
return '%s - (%s)' % (self.banner, self.datetime) |
||||
|
||||
|
||||
class LogStat(models.Model): |
||||
banner = models.ForeignKey(Banner, related_name='banner_stat', verbose_name=_('Banner'), blank=True) |
||||
group = models.ForeignKey(BannerGroup, related_name='group_stat', verbose_name=_('Group'), blank=True) |
||||
urls = models.ManyToManyField(URL, related_name='url_bloks', verbose_name=_('URLs'), null=True, blank=True) |
||||
|
||||
date = models.DateField(verbose_name=_('Data')) |
||||
view = models.PositiveIntegerField(verbose_name=_('Views')) |
||||
click = models.PositiveIntegerField(verbose_name=_('Clicks')) |
||||
unique_click = models.PositiveIntegerField(verbose_name=_('Unique Views'), blank=True, null=True) |
||||
unique_view = models.PositiveIntegerField(verbose_name=_('Unique Clicks')) |
||||
|
||||
def __unicode__(self): |
||||
return '%s - (%s)' % (self.banner, self.date) |
||||
|
||||
|
||||
# ------------------ |
||||
class Paid(models.Model): |
||||
tickets = models.ForeignKey(Banner, related_name='paid_tickets') |
||||
participation = models.ForeignKey(Banner, related_name='paid_participation') |
||||
official = models.ForeignKey(Banner, related_name='paid_official') |
||||
logo = models.ImageField(upload_to='/')# !!!!! |
||||
organiser = models.CharField(max_length=100) |
||||
active = models.BooleanField(default=True) |
||||
stat_pswd = models.CharField(max_length=16) |
||||
created = models.DateTimeField(auto_now_add=True) |
||||
modified = models.DateTimeField(auto_now=True) |
||||
|
||||
|
||||
class PaidStat(models.Model): |
||||
paid = models.ForeignKey(Paid) |
||||
date = models.DateField(verbose_name=_('Date')) |
||||
page_views = models.PositiveIntegerField(default=0) |
||||
price_views = models.PositiveIntegerField(default=0) |
||||
catalog_views = models.PositiveIntegerField(default=0) |
||||
catalog_clicks = models.PositiveIntegerField(default=0) |
||||
|
||||
|
||||
class Top(models.Model): |
||||
catalog = models.CharField(max_length=16) |
||||
position = models.PositiveIntegerField(blank=True, null=True) |
||||
theme = models.ManyToManyField('theme.Theme', blank=True, null=True) |
||||
excluded_tags = models.ManyToManyField('theme.Tag', blank=True, null=True) |
||||
country = models.ManyToManyField('country.Country', blank=True, null=True) |
||||
excluded_cities = models.ManyToManyField('city.City', blank=True, null=True) |
||||
fr = models.DateField(default=date.today()) |
||||
to = models.DateField(blank=True, null=True) |
||||
stat_pswd = models.CharField(max_length=16) |
||||
|
||||
class Meta: |
||||
ordering = ['position'] |
||||
|
||||
|
||||
class TopStat(models.Model): |
||||
date = models.DateField() |
||||
theme = models.ForeignKey('theme.Theme', blank=True, null=True) |
||||
tag = models.ForeignKey('theme.Tag', blank=True, null=True) |
||||
country = models.ForeignKey('country.Country', blank=True, null=True) |
||||
city = models.ForeignKey('city.City', blank=True, null=True) |
||||
views = models.PositiveIntegerField(default=0) |
||||
clicks = models.PositiveIntegerField(default=0) |
||||
@ -0,0 +1,159 @@ |
||||
/* |
||||
************************** |
||||
* =COMMON |
||||
************************** |
||||
*/ |
||||
.b-slider { |
||||
position: relative; |
||||
display: block; |
||||
overflow: hidden; |
||||
margin: 0; |
||||
padding: 0; |
||||
width: 725px; |
||||
height: 360px; |
||||
} |
||||
|
||||
.b-slider-list { |
||||
position: absolute; |
||||
display: block; |
||||
overflow: hidden; |
||||
margin: 0; |
||||
padding: 0; |
||||
width: 725px; |
||||
height: 360px; |
||||
list-style: none; |
||||
} |
||||
|
||||
.b-slider-item { |
||||
position: absolute; |
||||
z-index: 50; |
||||
float: left; |
||||
overflow: hidden; |
||||
margin: 0; |
||||
padding: 0; |
||||
width: 725px; |
||||
height: 360px; |
||||
} |
||||
|
||||
.m-slider-current { |
||||
z-index: 100; |
||||
} |
||||
|
||||
.b-slider-item__img, |
||||
.b-slider-item__title, |
||||
.b-slider-item__text { |
||||
position: absolute; |
||||
} |
||||
|
||||
.b-slider-item__img { |
||||
top: 0; |
||||
left: 0; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.b-slider-item__link { |
||||
|
||||
} |
||||
|
||||
.b-slider-item__title { |
||||
bottom: 10px; |
||||
left: 10px; |
||||
width: 500px; |
||||
color: #333; |
||||
text-transform: uppercase; |
||||
text-shadow: 0 0 3px #fff, 0 0 2px #fff, 0 0 1px #fff; |
||||
letter-spacing: -5px; |
||||
font-size: 65px; |
||||
font-family: Calibri; |
||||
line-height: 0.8em; |
||||
} |
||||
|
||||
.b-slider-item__text { |
||||
position: absolute; |
||||
top: 150px; |
||||
left: 300px; |
||||
display: inline-block; |
||||
display: none; |
||||
margin: -10px; |
||||
padding: 10px; |
||||
max-width: 300px; |
||||
border-radius: 10px; |
||||
background: rgba(255, 255, 255, 0.5); |
||||
box-shadow: 0 0 5px #fff; |
||||
color: #555; |
||||
line-height: 1.5em; |
||||
} |
||||
|
||||
|
||||
/* |
||||
************************** |
||||
* =NAV |
||||
************************** |
||||
*/ |
||||
.b-slider-nav { |
||||
position: absolute; |
||||
width: 100%; |
||||
top: 10px; |
||||
height: 30px; |
||||
left: 0; |
||||
z-index: 500; |
||||
display: block; |
||||
margin: 0; |
||||
padding: 0; |
||||
list-style-type: none; |
||||
text-align: center; |
||||
} |
||||
|
||||
.b-slider-nav-button { |
||||
display: inline-block; |
||||
margin: 5px; |
||||
width: 16px; |
||||
height: 16px; |
||||
border-radius: 8px; |
||||
background: #ddd; |
||||
color: transparent; |
||||
text-align: center; |
||||
font-weight: bold; |
||||
font-size: 8px; |
||||
line-height: 16px; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.b-slider-nav-button:hover { |
||||
background: #eee; |
||||
} |
||||
|
||||
.m-slider-nav-current_button { |
||||
background: #fff; |
||||
} |
||||
|
||||
.b-slider-nav-prev, |
||||
.b-slider-nav-next { |
||||
position: absolute; |
||||
top: 0; |
||||
z-index: 500; |
||||
padding-right: 20px; |
||||
padding-left: 20px; |
||||
color: #000; |
||||
text-shadow: 0 0 3px #fff, 0 0 2px #fff, 0 0 1px #fff; |
||||
font-size: 50px; |
||||
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; |
||||
line-height: 360px; |
||||
opacity: 0.5; |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.b-slider-nav-prev:hover, |
||||
.b-slider-nav-next:hover { |
||||
opacity: 0.8; |
||||
} |
||||
|
||||
.b-slider-nav-prev { |
||||
left: 0; |
||||
padding-left: 0; |
||||
} |
||||
|
||||
.b-slider-nav-next { |
||||
right: 0; |
||||
padding-right: 0; |
||||
} |
||||
@ -0,0 +1,10 @@ |
||||
|
||||
$(document).ready(function() { |
||||
$('.b-banner-click').on('click', function(){ |
||||
$.get($(this).data('url')); |
||||
}); |
||||
|
||||
$(".b-banner").on('load', function() { |
||||
$.get($(this).data('view')); |
||||
}); |
||||
}); |
||||
@ -0,0 +1,71 @@ |
||||
$.fn.bannersSlider = function(options) { |
||||
$this = this; |
||||
var settings = $.extend( { |
||||
'auto_play': false, |
||||
'effect': 'fade', |
||||
'speed' : 3000 |
||||
}, options); |
||||
|
||||
$this.current = 1; |
||||
$this.old = 1; |
||||
$this.len = $this.find('.b-slider-list li').length; |
||||
|
||||
$this.find('.b-slider-item').hide(); |
||||
$this.find('.m-slider-item-1').show(); |
||||
|
||||
$this.fadeTo = function(new_num) { |
||||
old_num = $this.old; |
||||
if (new_num != old_num) { |
||||
$this.find('.m-slider-item-' + new_num).hide(); |
||||
$this.find('.m-slider-item-' + new_num).fadeIn(1000); |
||||
$this.find('.m-slider-current').fadeOut(1000); |
||||
$this.find('.m-slider-current').removeClass('m-slider-current'); |
||||
$this.find('.m-slider-item-' + new_num).addClass('m-slider-current'); |
||||
|
||||
$this.find('.b-slider-nav-button').removeClass('m-slider-nav-current_button'); |
||||
|
||||
$this.find('.b-slider-nav-button[data-slide=' + new_num + ']').addClass('m-slider-nav-current_button'); |
||||
} |
||||
}; |
||||
|
||||
$this.prev = function() { |
||||
prev = ($this.current != 1) ? $this.current - 1 : $this.len; |
||||
$this.old = $this.current; |
||||
$this.current = prev; |
||||
|
||||
$this.fadeTo(prev); |
||||
}; |
||||
|
||||
$this.next = function() { |
||||
next = ($this.current != $this.len) ? $this.current + 1 : 1; |
||||
$this.old = $this.current; |
||||
$this.current = next; |
||||
|
||||
$this.fadeTo(next); |
||||
}; |
||||
|
||||
$this.children('.b-slider-nav-prev').on('click', function(){ |
||||
$this.prev(); |
||||
}); |
||||
|
||||
$this.children('.b-slider-nav-next').on('click', function(){ |
||||
$this.next(); |
||||
}); |
||||
|
||||
$this.find('.b-slider-nav-button').on('click', function(){ |
||||
to_slide = $(this).data('slide'); |
||||
|
||||
$this.old = $this.current; |
||||
$this.current = to_slide; |
||||
|
||||
$this.fadeTo(to_slide); |
||||
}); |
||||
|
||||
if (settings.auto_play) { |
||||
setInterval(function() { |
||||
$this.next(); |
||||
}, settings.speed); |
||||
} |
||||
|
||||
return $this; |
||||
}; |
||||
@ -0,0 +1,55 @@ |
||||
{% if banner.html %} |
||||
{% load banner %} |
||||
<div id='banner_{{ banner.id }}' class='b-banner b-banner-{{ group.slug }} m-banner__html'> |
||||
{% render banner.text %} |
||||
</div> |
||||
{% elif banner.flash %} |
||||
<div id='banner_{{ banner.id }}' class='b-banner b-banner-{{ group.slug }} m-banner__flash'> |
||||
<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' |
||||
codebase='http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' |
||||
width='{{ banner.group.width }}' height='{{ banner.group.height }}'> |
||||
<param name='movie' value='{{ banner.img.url }}' /> |
||||
<param name='quality' value='high'> |
||||
<param name='play' value='true'> |
||||
<param name='loop' value='true'> |
||||
<param name='wmode' value='transparent'> |
||||
<embed src='{{ banner.img.url }}' |
||||
quality='high' |
||||
bgcolor='#d0f' |
||||
width='{{ banner.group.width }}' |
||||
height='{{ banner.group.height }}' |
||||
name='banner_{{ banner.id }}' |
||||
type='application/x-shockwave-flash' |
||||
play='true' |
||||
loop='true' |
||||
wmode='transparent' |
||||
pluginspage='http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' |
||||
> |
||||
</embed> |
||||
</object> |
||||
</div> |
||||
|
||||
<script> |
||||
$('#banner_{{ banner.id }}').mousedown(function() { |
||||
// alert('mouse down'); |
||||
}); |
||||
</script> |
||||
{% else %} |
||||
<a href='{{ banner.url }}' id='banner_{{ banner.id }}' class='b-banner b-banner-{{ group.slug }}'> |
||||
<img src='{{ banner.img.url }}' alt='{{ banner.alt }}' title='{{ banner.title }}'> |
||||
</a> |
||||
{% endif %} |
||||
|
||||
<style> |
||||
.b-banner { |
||||
display: block; |
||||
padding: 0; |
||||
margin: 0; |
||||
/*border: 1px solid silver;*/ |
||||
} |
||||
|
||||
.b-banner-{{ group.slug }} { |
||||
width: {{ banner.group.width }}px; |
||||
height: {{ banner.group.height }}px; |
||||
} |
||||
</style> |
||||
@ -0,0 +1,32 @@ |
||||
{% load banner %} |
||||
|
||||
<div class="b-banner-group"> |
||||
{% for banner in banners %} |
||||
{% banner_one banner.id %} |
||||
{% endfor %} |
||||
</div> |
||||
|
||||
<style type="text/css"> |
||||
.b-banner-group { |
||||
display: block; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.b-banner { |
||||
display: block; |
||||
padding: 0; |
||||
margin: 0; |
||||
/*border: 1px solid silver;*/ |
||||
} |
||||
|
||||
.b-banner-{{ group.slug }} { |
||||
width: {{ banner.group.width }}px; |
||||
height: {{ banner.group.height }}px; |
||||
float: left; |
||||
} |
||||
|
||||
.b-banner-{{ group.slug }} img { |
||||
width: 100%; |
||||
height: 100%; |
||||
} |
||||
</style> |
||||
@ -0,0 +1,30 @@ |
||||
{% load banner %} |
||||
|
||||
<div class="b-banner-group"> |
||||
{% for banner in banners %} |
||||
{% banner_one banner.id %} |
||||
{% endfor %} |
||||
<script> |
||||
var arr = []; |
||||
{% for banner in banners %} |
||||
arr[{{ forloop.counter }}] = {'id': {{ banner.id }}, 'often': {{ banner.often }}}; |
||||
{% endfor %} |
||||
|
||||
var length = arr.length - 1; |
||||
|
||||
var i = 1; |
||||
var speed = {{ group.speed }}; |
||||
|
||||
$('.b-banner-{{ group.slug }}').hide(); |
||||
$('#banner_' + arr[i]['id']).show(); |
||||
total_speed = speed * arr[i]['often']; |
||||
setInterval(function () { |
||||
if (i < length) i++; else i = 1; |
||||
|
||||
total_speed = speed * arr[i]['often']; |
||||
console.log (total_speed, arr[i]); |
||||
$('.b-banner-{{ group.slug }}').hide(); |
||||
$('#banner_' + arr[i]['id']).show(); |
||||
}, speed); |
||||
</script> |
||||
</div> |
||||
@ -0,0 +1,74 @@ |
||||
{% load thumbnail %} |
||||
|
||||
{% if banners %} |
||||
|
||||
<div class="b-slider m-{{ group.slug }}" id="slider-{{ group.slug }}"> |
||||
<ul class='b-slider-list'> |
||||
{% for banner in banners %} |
||||
<li data-url='{{ banner.get_absolute_url }}' |
||||
class=' |
||||
b-slider-item |
||||
m-slider-item-{{ forloop.counter }} |
||||
{% if forloop.counter == 1 %} |
||||
m-slider-current |
||||
{% endif %} |
||||
' |
||||
data-slide='{{ forloop.counter }}' |
||||
> |
||||
|
||||
<a href='{{ banner.get_absolute_url }}' class='b-slider-item__link'> |
||||
{% thumbnail banner.img group.size crop="top" as im %} |
||||
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" alt="{{ banner.alt }}" title="{{ banner.title }}" class='b-slider-item__img' data-view='{{ banner.image }}'> |
||||
{% endthumbnail %} |
||||
|
||||
<div class="b-slider-item__info_cover"> |
||||
<span class='b-slider-item__title'>{{ banner.title|safe }}</span> |
||||
<span class='b-slider-item__text'>{{ banner.text|safe }}</span> |
||||
</div> |
||||
</a> |
||||
</li> |
||||
{% endfor %} |
||||
</ul> |
||||
|
||||
<ul class="b-slider-nav"> |
||||
{% for banner in banners %} |
||||
<li class="b-slider-nav-button |
||||
{% if forloop.counter == 1 %} |
||||
m-slider-nav-current_button |
||||
{% endif %} |
||||
" data-slide='{{ forloop.counter }}'> |
||||
{{ forloop.counter }} |
||||
</li> |
||||
{% endfor %} |
||||
</ul> |
||||
|
||||
<span data-direction="prev" class='b-slider-nav-prev'>〈 </span> |
||||
<span data-direction="next" class='b-slider-nav-next'> 〉</span> |
||||
|
||||
</div> |
||||
|
||||
<script> |
||||
(function() { |
||||
$('.m-{{ group.slug }}').bannersSlider({'auto_play': {{ group.speed }}, 'speed': {{ group.speed }}}); |
||||
})(); |
||||
</script> |
||||
|
||||
<style> |
||||
.m-{{ group.slug }} { |
||||
width: {{ group.width }}px; |
||||
height: {{ group.height }}px; |
||||
} |
||||
|
||||
.m-{{ group.slug }} .b-slider-nav-prev, |
||||
.m-{{ group.slug }} .b-slider-nav-next { |
||||
line-height: {{ group.height }}px; |
||||
} |
||||
|
||||
.m-{{ group.slug }} .b-slider-item, |
||||
.m-{{ group.slug }} .b-slider-list { |
||||
width: {{ group.width }}px; |
||||
height: {{ group.height }}px; |
||||
} |
||||
</style> |
||||
|
||||
{% endif %} |
||||
@ -0,0 +1,74 @@ |
||||
from ..models import Banner |
||||
from ..models import BannerGroup |
||||
from ..models import URL |
||||
|
||||
from django import template |
||||
|
||||
# For render tag |
||||
from django.template import Context |
||||
from django.template import Template |
||||
|
||||
import re |
||||
|
||||
register = template.Library() |
||||
|
||||
|
||||
@register.simple_tag(takes_context=True) |
||||
def banner_group(context, group, tpl='group.html'): |
||||
try: |
||||
page_url = context['request'].path_info |
||||
site = context['request'].site |
||||
group = BannerGroup.objects.get(slug=group) |
||||
good_urls = [] |
||||
for url in URL.objects.filter(public=True, sites__in=[site]): |
||||
if url.regex: |
||||
url_re = re.compile(url.url) |
||||
if url_re.findall(page_url): |
||||
good_urls.append(url) |
||||
elif page_url == url.url: |
||||
good_urls.append(url) |
||||
banners = Banner.objects.filter(public=True, group=group, urls__in=good_urls) |
||||
except: |
||||
banners = False |
||||
group = False |
||||
if(banners and group): |
||||
context['banners'] = banners |
||||
context['group'] = group |
||||
|
||||
t = template.loader.get_template(tpl) |
||||
return t.render(template.Context(context)) |
||||
|
||||
|
||||
@register.simple_tag(takes_context=True) |
||||
def banner_one(context, banner_id, tpl='banner.html'): |
||||
try: |
||||
page_url = context['request'].path_info |
||||
site = context['request'].site |
||||
good_urls = [] |
||||
for url in URL.objects.filter(public=True, sites__in=[site]): |
||||
if url.regex: |
||||
url_re = re.compile(url.url) |
||||
if url_re.findall(page_url): |
||||
good_urls.append(url) |
||||
elif page_url == url.url: |
||||
good_urls.append(url) |
||||
|
||||
banner = Banner.objects.get(id=banner_id, public=True, urls__in=good_urls) |
||||
except: |
||||
banner = False |
||||
|
||||
context['banner'] = banner |
||||
|
||||
t = template.loader.get_template(tpl) |
||||
return t.render(template.Context(context)) |
||||
|
||||
|
||||
# block render |
||||
@register.simple_tag(takes_context=True) |
||||
def render(context, content): |
||||
try: |
||||
tpl = Template(content) |
||||
content = Context(context) |
||||
return tpl.render(content) |
||||
except: |
||||
return 'Render Error' |
||||
@ -0,0 +1,16 @@ |
||||
""" |
||||
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) |
||||
@ -0,0 +1,11 @@ |
||||
from django.conf.urls import url |
||||
|
||||
from . import views |
||||
|
||||
urlpatterns = [ |
||||
url(r'^click/(?P<banner_id>\d{1,4})/(?P<key>[-\w]+)/$', views.click, name='banner_click'), |
||||
url(r'^view/(?P<banner_id>\d+)/(?P<key>[-\w]+)/$', views.view, name='banner_view'), |
||||
|
||||
# |
||||
url(r'^get-banners/$', views.get_banners), |
||||
] |
||||
@ -0,0 +1,46 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import json |
||||
from django.http import HttpResponse |
||||
from django.shortcuts import redirect, get_object_or_404 |
||||
from .models import Banner, BannerGroup |
||||
|
||||
|
||||
def click(request, banner_id, key): |
||||
banner = get_object_or_404(Banner, pk=banner_id) |
||||
banner.log(request, 2, key) |
||||
return redirect(banner.url) |
||||
|
||||
|
||||
def view(request, banner_id, key): |
||||
banner = get_object_or_404(Banner, pk=banner_id) |
||||
banner.log(request, 1, key) |
||||
return redirect(banner.img.url) |
||||
|
||||
|
||||
def get_client_ip(request): |
||||
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') |
||||
if x_forwarded_for: |
||||
ip = x_forwarded_for.split(',')[0] |
||||
else: |
||||
ip = request.META.get('REMOTE_ADDR') |
||||
return ip |
||||
|
||||
def get_banners(request): |
||||
url = request.GET.get('url', '/') |
||||
theme = request.GET.get('theme') |
||||
country = request.GET.get('country') |
||||
city = request.GET.get('city') |
||||
tag = request.GET.get('tag') |
||||
ip = get_client_ip(request) |
||||
params = {'url': url, |
||||
'theme': theme, |
||||
'tag': tag, |
||||
'country': country, |
||||
'city': city, |
||||
'ip': ip} |
||||
b = Banner.objects.get(id=1) |
||||
result = [{'url': b.url, 'id': 'expo_b_%d'%b.id, 'is_html': b.html, |
||||
'is_flash': b.flash, 'is_img': True, 'html': b.text, 'img': b.img.url}] |
||||
return HttpResponse(json.dumps(result, indent=4), content_type='application/json') |
||||
|
||||
|
||||
@ -0,0 +1,16 @@ |
||||
2015-07-28 12:23:39,172 [DEBUG] django.db.backends: (0.001) SHOW TABLES; args=() |
||||
2015-07-28 12:23:39,175 [DEBUG] django.db.backends: (0.000) SELECT `service_service`.`id`, `service_service`.`url`, `service_service`.`currency`, `service_service`.`price`, `service_service`.`params`, `service_service`.`template`, `service_service`.`type`, `service_service`.`sort`, `service_service`.`main_page`, `service_service`.`meta_id` FROM `service_service`; args=() |
||||
2015-07-28 12:23:39,200 [DEBUG] django.db.backends: (0.002) SHOW TABLES; args=() |
||||
2015-07-28 12:23:39,201 [DEBUG] django.db.backends: (0.000) SELECT `service_service`.`id`, `service_service`.`url`, `service_service`.`currency`, `service_service`.`price`, `service_service`.`params`, `service_service`.`template`, `service_service`.`type`, `service_service`.`sort`, `service_service`.`main_page`, `service_service`.`meta_id` FROM `service_service`; args=() |
||||
2015-07-28 12:23:39,232 [DEBUG] django.db.backends: (0.001) SHOW TABLES; args=() |
||||
2015-07-28 12:23:39,233 [DEBUG] django.db.backends: (0.000) SELECT `service_service`.`id`, `service_service`.`url`, `service_service`.`currency`, `service_service`.`price`, `service_service`.`params`, `service_service`.`template`, `service_service`.`type`, `service_service`.`sort`, `service_service`.`main_page`, `service_service`.`meta_id` FROM `service_service`; args=() |
||||
2015-07-28 12:23:39,247 [DEBUG] django.db.backends: (0.001) SHOW TABLES; args=() |
||||
2015-07-28 12:23:39,248 [DEBUG] django.db.backends: (0.000) SELECT `service_service`.`id`, `service_service`.`url`, `service_service`.`currency`, `service_service`.`price`, `service_service`.`params`, `service_service`.`template`, `service_service`.`type`, `service_service`.`sort`, `service_service`.`main_page`, `service_service`.`meta_id` FROM `service_service`; args=() |
||||
2015-07-28 12:23:39,284 [DEBUG] django.db.backends: (0.001) SHOW TABLES; args=() |
||||
2015-07-28 12:23:39,285 [DEBUG] django.db.backends: (0.000) SELECT `service_service`.`id`, `service_service`.`url`, `service_service`.`currency`, `service_service`.`price`, `service_service`.`params`, `service_service`.`template`, `service_service`.`type`, `service_service`.`sort`, `service_service`.`main_page`, `service_service`.`meta_id` FROM `service_service`; args=() |
||||
2015-07-28 12:23:39,304 [DEBUG] django.db.backends: (0.001) SHOW TABLES; args=() |
||||
2015-07-28 12:23:39,305 [DEBUG] django.db.backends: (0.000) SELECT `service_service`.`id`, `service_service`.`url`, `service_service`.`currency`, `service_service`.`price`, `service_service`.`params`, `service_service`.`template`, `service_service`.`type`, `service_service`.`sort`, `service_service`.`main_page`, `service_service`.`meta_id` FROM `service_service`; args=() |
||||
2015-07-28 12:23:39,460 [DEBUG] root: Using default logger |
||||
2015-07-28 12:23:39,460 [DEBUG] root: Using default logger |
||||
2015-07-28 12:24:17,361 [DEBUG] django.db.backends: (0.001) SELECT `accounts_user`.`id`, `accounts_user`.`password`, `accounts_user`.`last_login`, `accounts_user`.`is_superuser`, `accounts_user`.`email`, `accounts_user`.`username`, `accounts_user`.`first_name`, `accounts_user`.`last_name`, `accounts_user`.`rating`, `accounts_user`.`url`, `accounts_user`.`is_active`, `accounts_user`.`is_staff`, `accounts_user`.`is_admin`, `accounts_user`.`date_joined`, `accounts_user`.`date_registered`, `accounts_user`.`date_modified`, `accounts_user`.`organiser_id`, `accounts_user`.`translator_id`, `accounts_user`.`company_id`, `accounts_user`.`position` FROM `accounts_user` WHERE `accounts_user`.`email` = 'vaniakov95@gmail.com' ; args=('vaniakov95@gmail.com',) |
||||
2015-07-28 12:24:25,526 [DEBUG] django.db.backends: (0.000) SELECT `accounts_user`.`id`, `accounts_user`.`password`, `accounts_user`.`last_login`, `accounts_user`.`is_superuser`, `accounts_user`.`email`, `accounts_user`.`username`, `accounts_user`.`first_name`, `accounts_user`.`last_name`, `accounts_user`.`rating`, `accounts_user`.`url`, `accounts_user`.`is_active`, `accounts_user`.`is_staff`, `accounts_user`.`is_admin`, `accounts_user`.`date_joined`, `accounts_user`.`date_registered`, `accounts_user`.`date_modified`, `accounts_user`.`organiser_id`, `accounts_user`.`translator_id`, `accounts_user`.`company_id`, `accounts_user`.`position` FROM `accounts_user` WHERE `accounts_user`.`email` = 'vaniakov95@gmail.com' ; args=('vaniakov95@gmail.com',) |
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,16 @@ |
||||
from functools import wraps |
||||
|
||||
from django.template import RequestContext |
||||
from django.shortcuts import render_to_response |
||||
|
||||
|
||||
def render_to(tpl): |
||||
def decorator(func): |
||||
@wraps(func) |
||||
def wrapper(request, *args, **kwargs): |
||||
out = func(request, *args, **kwargs) |
||||
if isinstance(out, dict): |
||||
out = render_to_response(tpl, out, RequestContext(request)) |
||||
return out |
||||
return wrapper |
||||
return decorator |
||||
@ -0,0 +1,33 @@ |
||||
{% extends 'base.html' %} |
||||
|
||||
|
||||
{% block body %} |
||||
<div class="row-fluid sortable ui-sortable"> |
||||
<div class="box span6"> |
||||
<div class="box-header well" data-original-title=""> |
||||
<h2><i class="icon-th"></i> Создание</h2> |
||||
</div> |
||||
<div class="box-content"> |
||||
<div class="row-fluid"> |
||||
<div class="span4"><h6><a href="{% url 'expobanner-create_url' %}">Урла</a></h6></div> |
||||
<div class="span4"><h6><a href="{% url 'expobanner-create_group' %}">Групы</a></h6></div> |
||||
<div class="span4"><h6><a href="{% url 'expobanner-create_banner' %}">Банера</a></h6></div> |
||||
</div> |
||||
</div> |
||||
</div><!--/span--> |
||||
|
||||
<div class="box span6"> |
||||
<div class="box-header well" data-original-title=""> |
||||
<h2><i class="icon-th"></i> Список</h2> |
||||
|
||||
</div> |
||||
<div class="box-content"> |
||||
<div class="row-fluid"> |
||||
<div class="span4"><h6><a href="{% url 'expobanner-list_url' %}">Урлов</a></h6></div> |
||||
<div class="span4"><h6><a href="{% url 'expobanner-list_group' %}">Груп</a></h6></div> |
||||
<div class="span4"><h6><a href="{% url 'expobanner-list_banner' %}">Банеров</a></h6></div> |
||||
</div> |
||||
</div> |
||||
</div><!--/span--> |
||||
</div> |
||||
{% endblock %} |
||||
@ -0,0 +1,59 @@ |
||||
{% extends 'base.html' %} |
||||
{% load static %} |
||||
|
||||
{% block scripts %} |
||||
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> |
||||
<script src="{% static 'js/select/select2.js' %}"></script> |
||||
<script> |
||||
$(function(){ |
||||
$('#id_tag').select2({ |
||||
placeholder: "Тег", |
||||
width: '200px', |
||||
ajax: { |
||||
url: "/admin/theme/tag/search-without-theme/", |
||||
dataType: "json", |
||||
quietMillis: 200, |
||||
multiple: true, |
||||
|
||||
data: function(term, page){ |
||||
|
||||
return {term: term, |
||||
page: page}; |
||||
}, |
||||
|
||||
results: function (data) { |
||||
return {results: data}; |
||||
} |
||||
} |
||||
}); |
||||
}) |
||||
</script> |
||||
{% endblock %} |
||||
|
||||
{% block body %} |
||||
<form method="post" class="form-horizontal" name="form2" id="form2" enctype="multipart/form-data"> {% csrf_token %} |
||||
<fieldset> |
||||
|
||||
<div class="box span8"> |
||||
<div class="box-header well"> |
||||
<h2><i class="icon-pencil"></i>{{ form.verbose }}</h2> |
||||
</div> |
||||
<div class="box-content"> |
||||
{% for field in form %} |
||||
<div class="control-group {% if field.errors %}error{% endif %}"> |
||||
<label class="control-label">{% if field.field.required %}<b>{{ field.label }}:</b>{% else %}{{ field.label }}{% endif %}</label> |
||||
<div class="controls">{{ field }} |
||||
<span class="help-inline">{{ field.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{% endfor %} |
||||
</div> |
||||
</div> |
||||
</fieldset> |
||||
|
||||
<div class="controls"> |
||||
<input class="btn btn-large btn-primary" type="submit" value="Готово"> |
||||
<input class="btn btn-large" type="reset" value="Отмена"> |
||||
</div> |
||||
</form> |
||||
{% endblock %} |
||||
@ -0,0 +1,34 @@ |
||||
{% extends 'base.html' %} |
||||
|
||||
{% block body %} |
||||
|
||||
<div class="box span8"> |
||||
<div class="box-header well"> |
||||
<h2><i class="icon-arrow-down"></i>{{ verbose }}</h2> |
||||
</div> |
||||
<div class="box-content"> |
||||
{% block list_table %} |
||||
<table class="table table-hover"> |
||||
|
||||
<thead> |
||||
<tr> |
||||
<th>Объект</th> |
||||
<th> </th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for item in object_list %} |
||||
<tr> |
||||
<td>{{ item }}</td> |
||||
<td><a href="{{ item.get_admin_url }}">Изменить</a> </td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
{% endblock %} |
||||
</div> |
||||
{# pagination #} |
||||
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} |
||||
</div> |
||||
|
||||
{% endblock %} |
||||
@ -0,0 +1,63 @@ |
||||
{% extends 'base.html' %} |
||||
{% load static %} |
||||
{# Displays article form #} |
||||
|
||||
{% block scripts %} |
||||
|
||||
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> |
||||
{# selects #} |
||||
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> |
||||
<script src="{% static 'js/select/select2.js' %}"></script> |
||||
<script src="{% static 'custom_js/make_select.js' %}"></script> |
||||
{# ajax #} |
||||
<script src="{% static 'custom_js/file_post_ajax.js' %}"></script> |
||||
<script src="{% static 'custom_js/select_tag.js' %}"></script> |
||||
|
||||
{% endblock %} |
||||
|
||||
{% block body %} |
||||
{{ request.LANGUAGE_CODE }} |
||||
<form method="post" class="form-horizontal" > {% csrf_token %} |
||||
<fieldset> |
||||
<div class="box span8"> |
||||
<div class="box-header well"> |
||||
<h2><i class="icon-pencil"></i> Основная информация</h2> |
||||
</div> |
||||
<div class="box-content"> |
||||
{# url/slug #} |
||||
<div class="control-group {% if form.url.errors %}error{% endif %}"> |
||||
<label class="control-label"><b>{{ form.url.label }}:</b></label> |
||||
<div class="controls"> |
||||
{{ form.langs }} |
||||
{{ form.url }} |
||||
<span class="help-inline">{{ form.url.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{# title #} |
||||
<div class="control-group {% if form.title.errors %}error{% endif %}"> |
||||
<label class="control-label">{{ form.title.label }}:</label> |
||||
<div class="controls"> |
||||
{{ form.title }} |
||||
<span class="help-inline">{{ form.title.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{# body #} |
||||
<div class="control-group {% if form.body.errors %}error{% endif %}"> |
||||
<label class="control-label">{{ form.body.label }}:</label> |
||||
<div class="controls"> |
||||
{{ form.body }} |
||||
<span class="help-inline">{{ form.body.errors }}</span> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="controls"> |
||||
|
||||
<input class="btn btn-large btn-primary" type="submit" {% if request.path == '/admin/meta/seo/new/' %} value="Добавить" {% else %} value='Изменить' {% endif %}/> |
||||
<input class="btn btn-large" type="reset" value="Отмена"> |
||||
</div> |
||||
</fieldset> |
||||
</form> |
||||
|
||||
{% endblock %} |
||||
@ -0,0 +1,54 @@ |
||||
{% extends 'base.html' %} |
||||
{% block body %} |
||||
<div class="box span8"> |
||||
<div class="box-header well"> |
||||
<h2><i class="icon-arrow-down"></i>Список seo-текстов</h2> |
||||
</div> |
||||
<div class="box-content"> |
||||
<table class="table table-hover"> |
||||
<thead> |
||||
<tr> |
||||
|
||||
<th>Аддрес страници</th> |
||||
<th>Заголовок</th> |
||||
<th> </th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for item in object_list %} |
||||
<tr> |
||||
|
||||
<td><a href = "{{ item.url }}/">{{ item.url }}</a></td> |
||||
<td>{{ item.title }}</td> |
||||
<td class="center sorting_1"> |
||||
<a class="btn-small btn-info" href='{% url "seo_edit" item.id %}'> |
||||
Изменить |
||||
</a> |
||||
</td> |
||||
|
||||
<td> |
||||
<a class="btn-small btn-danger delete" href='{% url "seo_delete" item.id %}'> |
||||
Удалить |
||||
</a> |
||||
</td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
<a class="btn btn-success" href='{% url "seo_new" %}'> |
||||
<i class="icon-plus-sign icon-white"></i> Добавить seo-текст </a> |
||||
</div> |
||||
|
||||
<div class="pagination pagination-centered"> |
||||
<ul> |
||||
{% if page_obj.has_previous %} |
||||
<li> <a href="?page={{ page_obj.previous_page_number }}">←</a></li> |
||||
{% endif %} |
||||
|
||||
{% if page_obj.has_next %} |
||||
<li><a href="?page={{ page_obj.next_page_number }}">→</a></li> |
||||
{% endif %} |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
||||
@ -0,0 +1,11 @@ |
||||
{% extends 'base.html' %} |
||||
{% block sidebar %}{% endblock %} |
||||
{% block body %} |
||||
<form action="" method="post">{% csrf_token %} |
||||
<div class="controls"> |
||||
<p>Вы точно хотите удалить seo-текст "{{ object.title }}" для страницы <a href = "{{ object.url }}"></a> ?</p> |
||||
<input class="btn btn-large btn-danger delete" type="submit" value="Да" /> |
||||
<a class="btn btn-large btn-primary" href = {% url 'seo_all' %}>Нет</a> |
||||
</div> |
||||
</form> |
||||
{% endblock %} |
||||
@ -0,0 +1,90 @@ |
||||
{% extends 'base.html' %} |
||||
{% load static %} |
||||
{# Displays article form #} |
||||
|
||||
{% block scripts %} |
||||
|
||||
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script> |
||||
{# selects #} |
||||
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/> |
||||
<script src="{% static 'js/select/select2.js' %}"></script> |
||||
<script src="{% static 'custom_js/make_select.js' %}"></script> |
||||
{# ajax #} |
||||
<script src="{% static 'custom_js/file_post_ajax.js' %}"></script> |
||||
<script src="{% static 'custom_js/select_tag.js' %}"></script> |
||||
|
||||
{% endblock %} |
||||
|
||||
{% block body %} |
||||
|
||||
{# Uses multilang.html template for translated fields #} |
||||
<form method="post" class="form-horizontal" > {% csrf_token %} |
||||
<fieldset> |
||||
<div class="box span8"> |
||||
<div class="box-header well"> |
||||
<h2><i class="icon-pencil"></i> Основная информация</h2> |
||||
</div> |
||||
<div class="box-content"> |
||||
{# url/slug #} |
||||
{% if request.path == '/admin/page/new/' %} |
||||
<div class="control-group {% if form.url.errors %}error{% endif %}"> |
||||
<label class="control-label"><b>{{ form.url.label }}:</b></label> |
||||
<div class="controls"> |
||||
{{ form.langs }} |
||||
{{ form.url }} |
||||
<span class="help-inline">{{ form.url.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
{# h1 #} |
||||
<div class="control-group {% if form.h1.errors %}error{% endif %} "> |
||||
<label class="control-label"><b>{{ form.h1.label }}:</b></label> |
||||
<div class="controls"> |
||||
{{ form.h1 }} |
||||
<span class="help-inline">{{ form.h1.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{# title #} |
||||
<div class="control-group {% if form.title.errors %}error{% endif %}"> |
||||
<label class="control-label">{{ form.title.label }}:</label> |
||||
<div class="controls"> |
||||
{{ form.title }} |
||||
<span class="help-inline">{{ form.title.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{# description #} |
||||
<div class="control-group {% if form.descriptions.errors %}error{% endif %}"> |
||||
<label class="control-label">{{ form.descriptions.label }}:</label> |
||||
<div class="controls"> |
||||
{{ form.descriptions }} |
||||
<span class="help-inline">{{ form.descriptions.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{# keywords #} |
||||
<div class="control-group {% if form.keywords.errors %}error{% endif %}"> |
||||
<label class="control-label">{{ form.keywords.label }}:</label> |
||||
<div class="controls"> |
||||
{{ form.keywords }} |
||||
<span class="help-inline">{{ form.keywords.errors }}</span> |
||||
</div> |
||||
</div> |
||||
{# body #} |
||||
<div class="control-group {% if form.body.errors %}error{% endif %}"> |
||||
<label class="control-label">{{ form.body.label }}:</label> |
||||
<div class="controls"> |
||||
{{ form.body }} |
||||
<span class="help-inline">{{ form.body.errors }}</span> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="controls"> |
||||
|
||||
<input class="btn btn-large btn-primary" type="submit" {% if request.path == '/admin/page/new/' %} value="Добавить" {% else %} value='Изменить' {% endif %}/> |
||||
<input class="btn btn-large" type="reset" value="Отмена"> |
||||
</div> |
||||
</fieldset> |
||||
</form> |
||||
|
||||
{% endblock %} |
||||
@ -0,0 +1,58 @@ |
||||
{% extends 'base.html' %} |
||||
{% block body %} |
||||
<div class="box span8"> |
||||
<div class="box-header well"> |
||||
<h2><i class="icon-arrow-down"></i>Список страниц</h2> |
||||
</div> |
||||
<div class="box-content"> |
||||
<table class="table table-hover"> |
||||
<thead> |
||||
<tr> |
||||
|
||||
<th>Название</th> |
||||
<th>Заголовок</th> |
||||
<th>Адресс</th> |
||||
<th>Создана</th> |
||||
<th> </th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{% for item in object_list %} |
||||
<tr> |
||||
|
||||
<td>{{ item.title }}</td> |
||||
<td>{{ item.h1 }}</td> |
||||
<td><a href = "/admin/page/{{ item.url }}/">{{ item.url }}</a></td> |
||||
<td> {{ item.created|date:"Y-m-d H:i" }}</td> |
||||
<td class="center sorting_1"> |
||||
<a class="btn-small btn-info" href="/admin/page/edit/{{ item.url }}"> |
||||
Изменить |
||||
</a> |
||||
</td> |
||||
|
||||
<td> |
||||
<a class="btn-small btn-danger delete" href="/admin/page/delete/{{ item.url }}/"> |
||||
Удалить |
||||
</a> |
||||
</td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
<a class="btn btn-success" href="/admin/page/new/"> |
||||
<i class="icon-plus-sign icon-white"></i> Добавить страницу </a> |
||||
</div> |
||||
|
||||
<div class="pagination pagination-centered"> |
||||
<ul> |
||||
{% if page_obj.has_previous %} |
||||
<li> <a href="?page={{ page_obj.previous_page_number }}">←</a></li> |
||||
{% endif %} |
||||
|
||||
{% if page_obj.has_next %} |
||||
<li><a href="?page={{ page_obj.next_page_number }}">→</a></li> |
||||
{% endif %} |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
{% endblock %} |
||||
@ -0,0 +1,11 @@ |
||||
{% extends 'base.html' %} |
||||
{% block sidebar %}{% endblock %} |
||||
{% block body %} |
||||
<form action="" method="post">{% csrf_token %} |
||||
<div class="controls"> |
||||
<p>Вы точно хотите удалить страницу "{{ object }}"?</p> |
||||
<input class="btn btn-large btn-danger delete" type="submit" value="Да" /> |
||||
<a class="btn btn-large btn-primary" href = {% url 'page_list' %}>Нет</a> |
||||
</div> |
||||
</form> |
||||
{% endblock %} |
||||
@ -0,0 +1,31 @@ |
||||
{% extends 'base_catalog.html' %} |
||||
|
||||
{% block content_list %} |
||||
|
||||
<div class="page-title"> |
||||
<h1>Запрашиваемая страница не найдена</h1> |
||||
</div> |
||||
<div class="m-article error-404"> |
||||
<span class="figure">404:</span> |
||||
<p class="title">Возможно у нее изменился адрес или же она была удалена.<br> Воспользуйтесь поиском по названию, расширенной формой поиска или каталогом событий.</p> |
||||
<div class="clearfix"></div> |
||||
<hr/> |
||||
<section> |
||||
<h2>Каталог выставок</h2> |
||||
<ul class="items-list"> |
||||
{% for item in expo_themes %} |
||||
<li><i class="fa fa-circle"></i><a href="/expo/theme/{{ item.url }}/">{{ item.name }} ({{ item.expo_count }})</a></li> |
||||
{% endfor %} |
||||
</ul> |
||||
</section> |
||||
<hr/> |
||||
<section > |
||||
<h2>Каталог конференций</h2> |
||||
<ul class="items-list"> |
||||
{% for item in conf_themes %} |
||||
<li><i class="fa fa-circle"></i><a href="/conference/theme/{{ item.url }}/">{{ item.name }} ({{ item.conference_count }})</a></li> |
||||
{% endfor %} |
||||
</ul> |
||||
</section> |
||||
</div> |
||||
{% endblock %} |
||||
@ -0,0 +1,7 @@ |
||||
{% extends 'client/blank.html' %} |
||||
{% block main_part %} |
||||
<form method="post" action="{% url "require_email" %}">{% csrf_token %} |
||||
{{ form }} |
||||
<input type="submit" value="Send"> |
||||
</form> |
||||
{% endblock %} |
||||
@ -0,0 +1,113 @@ |
||||
{% extends 'blank.html' %} |
||||
|
||||
{% load static %} |
||||
{% load i18n %} |
||||
{% load template_filters %} |
||||
|
||||
|
||||
{% block main_part %} |
||||
<section class="layout main-part"> |
||||
<div class="layout-wrap"> |
||||
<aside> |
||||
<div class="sbg"></div> |
||||
{% include 'menu.html' %} |
||||
<hr/> |
||||
|
||||
{% include 'client/includes/feedback.html' %} |
||||
<hr /> |
||||
|
||||
{% include 'client/includes/online_consult.html' %} |
||||
|
||||
{% block aside_banner1 %} |
||||
{% if theme_for_filter.id == 27 or theme_for_filter.id == 9 or theme_for_filter.id == 48 %} |
||||
<div class="sbnr"> |
||||
<div class="sbnr-wrap"> |
||||
<a href="/redirect/redirect/11/" target="_blank"> |
||||
<img src="{% static 'client/img/partners/ipsa_.gif' %}" alt="" /> |
||||
</a> |
||||
</div> |
||||
</div> |
||||
{% endif %} |
||||
{% endblock %} |
||||
|
||||
{% include 'client/includes/services.html' %} |
||||
<hr /> |
||||
|
||||
{% include 'client/includes/announces.html' %} |
||||
|
||||
{% block asside_banner2 %} |
||||
|
||||
<!-- task EXPO-145--> |
||||
{% comment %} |
||||
<div class="sbnr"> |
||||
<div class="sbnr-wrap"> |
||||
<a href="/redirect/redirect/11/"> |
||||
<img src="{% static 'client/img/partners/imgo.jpg' %}" alt="" /> |
||||
</a> |
||||
</div> |
||||
</div> |
||||
{% endcomment %} |
||||
|
||||
|
||||
{% endblock %} |
||||
{% include 'client/includes/side_confs.html' %} |
||||
<hr /> |
||||
<div class="s-news-list"> |
||||
{% include 'client/includes/news.html' with news=news_list %} |
||||
</div> |
||||
|
||||
{% block aside_vk %} |
||||
<div class="vk-widget"> |
||||
{% include 'client/includes/social_widjet.html' %} |
||||
</div> |
||||
{% endblock %} |
||||
</aside> |
||||
|
||||
<div class="mcl"> |
||||
{% with search_form=search_form %} |
||||
{% include 'client/includes/catalog_search.html' %} |
||||
{% endwith %} |
||||
{% block under_search_baner %} |
||||
{% include 'client/includes/banners/under_search.html' %} |
||||
{% endblock %} |
||||
|
||||
{% block bread_scrumbs %} |
||||
|
||||
{% endblock %} |
||||
|
||||
<div class="page-title"> |
||||
{% block page_title %} |
||||
|
||||
{% endblock %} |
||||
</div> |
||||
|
||||
{% block page_filter %} |
||||
{% endblock %} |
||||
|
||||
{% block page_body %} |
||||
<div class="page-body clearfix"> |
||||
{% block content_list %} |
||||
{% endblock %} |
||||
|
||||
{% block paginator %} |
||||
|
||||
|
||||
{% endblock %} |
||||
|
||||
{% block content_footer_banner %} |
||||
{% endblock %} |
||||
</div> |
||||
|
||||
{% block content_text %} |
||||
{% comment %} |
||||
{% with filter=filter %} |
||||
{% include 'includes/event_list_description.html' %} |
||||
{% endwith %} |
||||
{% endcomment %} |
||||
|
||||
{% endblock %} |
||||
{% endblock %} |
||||
</div> |
||||
</div> |
||||
</section> |
||||
{% endblock %} |
||||
@ -0,0 +1,3 @@ |
||||
<div class="so-text"> |
||||
<h2>{{ object.title }}</h2>{{ object.body|safe }} |
||||
</div> |
||||
@ -0,0 +1,19 @@ |
||||
{% extends 'base_page.html' %} |
||||
{% load static %} |
||||
{% load i18n %} |
||||
|
||||
{% block bread_scrumbs %} |
||||
<div class="bread-crumbs"> |
||||
<a href="/">{% trans 'Главная страница' %}</a> |
||||
<strong>{{ object.main_title }}</strong> |
||||
</div> |
||||
{% endblock %} |
||||
|
||||
{% block page_title %} |
||||
<h1>{{ object.h1 }}</h1> |
||||
{% endblock %} |
||||
{% block page_body %} |
||||
|
||||
{{ object.body|safe|striptags}} |
||||
|
||||
{% endblock %} |
||||
@ -0,0 +1,24 @@ |
||||
{% load static %} |
||||
{% load i18n %} |
||||
<div id="acq_email" class="popup-window pw-login"> |
||||
<header class="clearfix"> |
||||
<div class="pw-title">{% trans 'Введите email' %}</div> |
||||
</header> |
||||
<div class="pw-body clearfix"> |
||||
{# <form method="post" id="log_form" class="pw-form validate" enctype="application/x-www-form-urlencoded" action="{% url "social:complete" backend=backend %}">{% csrf_token %}#} |
||||
{# <div class="pwf-line">#} |
||||
{# <div class="pwf-field">#} |
||||
{# <input id="id_email" name="email" placeholder="{% trans 'Ваш адрес электронной почты' %}" type="text">#} |
||||
{# </div>#} |
||||
{# <div class="pwf-msg err-message-box"></div>#} |
||||
{# </div>#} |
||||
{# <div class="pwf-buttons-line">#} |
||||
{# <div class="pwf-field">#} |
||||
{# <button type="submit" class="icon-check">{% trans 'Подтвердить' %}</button>#} |
||||
{# </div>#} |
||||
{##} |
||||
{# </div>#} |
||||
{# </form>#} |
||||
</div> |
||||
|
||||
</div> |
||||
@ -0,0 +1,274 @@ |
||||
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ |
||||
.fancybox-wrap, |
||||
.fancybox-skin, |
||||
.fancybox-outer, |
||||
.fancybox-inner, |
||||
.fancybox-image, |
||||
.fancybox-wrap iframe, |
||||
.fancybox-wrap object, |
||||
.fancybox-nav, |
||||
.fancybox-nav span, |
||||
.fancybox-tmp |
||||
{ |
||||
padding: 0; |
||||
margin: 0; |
||||
border: 0; |
||||
outline: none; |
||||
vertical-align: top; |
||||
} |
||||
|
||||
.fancybox-wrap { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
z-index: 8020; |
||||
} |
||||
|
||||
.fancybox-skin { |
||||
position: relative; |
||||
background: #f9f9f9; |
||||
color: #444; |
||||
text-shadow: none; |
||||
-webkit-border-radius: 4px; |
||||
-moz-border-radius: 4px; |
||||
border-radius: 4px; |
||||
} |
||||
|
||||
.fancybox-opened { |
||||
z-index: 8030; |
||||
} |
||||
|
||||
.fancybox-opened .fancybox-skin { |
||||
-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); |
||||
-moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); |
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); |
||||
} |
||||
|
||||
.fancybox-outer, .fancybox-inner { |
||||
position: relative; |
||||
} |
||||
|
||||
.fancybox-inner { |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.fancybox-type-iframe .fancybox-inner { |
||||
-webkit-overflow-scrolling: touch; |
||||
} |
||||
|
||||
.fancybox-error { |
||||
color: #444; |
||||
font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; |
||||
margin: 0; |
||||
padding: 15px; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.fancybox-image, .fancybox-iframe { |
||||
display: block; |
||||
width: 100%; |
||||
height: 100%; |
||||
} |
||||
|
||||
.fancybox-image { |
||||
max-width: 100%; |
||||
max-height: 100%; |
||||
} |
||||
|
||||
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { |
||||
background-image: url('../img/fancybox/fancybox_sprite.png'); |
||||
} |
||||
|
||||
#fancybox-loading { |
||||
position: fixed; |
||||
top: 50%; |
||||
left: 50%; |
||||
margin-top: -22px; |
||||
margin-left: -22px; |
||||
background-position: 0 -108px; |
||||
opacity: 0.8; |
||||
cursor: pointer; |
||||
z-index: 8060; |
||||
} |
||||
|
||||
#fancybox-loading div { |
||||
width: 44px; |
||||
height: 44px; |
||||
background: url('../img/fancybox/fancybox_loading.gif') center center no-repeat; |
||||
} |
||||
|
||||
.fancybox-close { |
||||
position: absolute; |
||||
top: -18px; |
||||
right: -18px; |
||||
width: 36px; |
||||
height: 36px; |
||||
cursor: pointer; |
||||
z-index: 8040; |
||||
} |
||||
|
||||
.fancybox-nav { |
||||
position: absolute; |
||||
top: 0; |
||||
width: 40%; |
||||
height: 100%; |
||||
cursor: pointer; |
||||
text-decoration: none; |
||||
background: transparent url('../img/fancybox/blank.gif'); /* helps IE */ |
||||
-webkit-tap-highlight-color: rgba(0,0,0,0); |
||||
z-index: 8040; |
||||
} |
||||
|
||||
.fancybox-prev { |
||||
left: 0; |
||||
} |
||||
|
||||
.fancybox-next { |
||||
right: 0; |
||||
} |
||||
|
||||
.fancybox-nav span { |
||||
position: absolute; |
||||
top: 50%; |
||||
width: 36px; |
||||
height: 34px; |
||||
margin-top: -18px; |
||||
cursor: pointer; |
||||
z-index: 8040; |
||||
visibility: hidden; |
||||
} |
||||
|
||||
.fancybox-prev span { |
||||
left: 10px; |
||||
background-position: 0 -36px; |
||||
} |
||||
|
||||
.fancybox-next span { |
||||
right: 10px; |
||||
background-position: 0 -72px; |
||||
} |
||||
|
||||
.fancybox-nav:hover span { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.fancybox-tmp { |
||||
position: absolute; |
||||
top: -99999px; |
||||
left: -99999px; |
||||
visibility: hidden; |
||||
max-width: 99999px; |
||||
max-height: 99999px; |
||||
overflow: visible !important; |
||||
} |
||||
|
||||
/* Overlay helper */ |
||||
|
||||
.fancybox-lock { |
||||
overflow: hidden !important; |
||||
width: auto; |
||||
} |
||||
|
||||
.fancybox-lock body { |
||||
overflow: hidden !important; |
||||
} |
||||
|
||||
.fancybox-lock-test { |
||||
overflow-y: hidden !important; |
||||
} |
||||
|
||||
.fancybox-overlay { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
overflow: hidden; |
||||
display: none; |
||||
z-index: 8010; |
||||
background: url('../img/fancybox/fancybox_overlay.png'); |
||||
} |
||||
|
||||
.fancybox-overlay-fixed { |
||||
position: fixed; |
||||
bottom: 0; |
||||
right: 0; |
||||
} |
||||
|
||||
.fancybox-lock .fancybox-overlay { |
||||
overflow: auto; |
||||
overflow-y: scroll; |
||||
} |
||||
|
||||
/* Title helper */ |
||||
|
||||
.fancybox-title { |
||||
visibility: hidden; |
||||
font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif; |
||||
position: relative; |
||||
text-shadow: none; |
||||
z-index: 8050; |
||||
} |
||||
|
||||
.fancybox-opened .fancybox-title { |
||||
visibility: visible; |
||||
} |
||||
|
||||
.fancybox-title-float-wrap { |
||||
position: absolute; |
||||
bottom: 0; |
||||
right: 50%; |
||||
margin-bottom: -35px; |
||||
z-index: 8050; |
||||
text-align: center; |
||||
} |
||||
|
||||
.fancybox-title-float-wrap .child { |
||||
display: inline-block; |
||||
margin-right: -100%; |
||||
padding: 2px 20px; |
||||
background: transparent; /* Fallback for web browsers that doesn't support RGBa */ |
||||
background: rgba(0, 0, 0, 0.8); |
||||
-webkit-border-radius: 15px; |
||||
-moz-border-radius: 15px; |
||||
border-radius: 15px; |
||||
text-shadow: 0 1px 2px #222; |
||||
color: #FFF; |
||||
font-weight: bold; |
||||
line-height: 24px; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.fancybox-title-outside-wrap { |
||||
position: relative; |
||||
margin-top: 10px; |
||||
color: #fff; |
||||
} |
||||
|
||||
.fancybox-title-inside-wrap { |
||||
padding-top: 10px; |
||||
} |
||||
|
||||
.fancybox-title-over-wrap { |
||||
position: absolute; |
||||
bottom: 0; |
||||
left: 0; |
||||
color: #fff; |
||||
padding: 10px; |
||||
background: #000; |
||||
background: rgba(0, 0, 0, .8); |
||||
} |
||||
|
||||
/*Retina graphics!*/ |
||||
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), |
||||
only screen and (min--moz-device-pixel-ratio: 1.5), |
||||
only screen and (min-device-pixel-ratio: 1.5){ |
||||
|
||||
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span { |
||||
background-image: url('../img/fancybox/fancybox_sprite@2x.png'); |
||||
background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/ |
||||
} |
||||
|
||||
#fancybox-loading div { |
||||
background-image: url('../img/fancybox/fancybox_loading@2x.gif'); |
||||
background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/ |
||||
} |
||||
} |
||||
@ -0,0 +1,7 @@ |
||||
/** |
||||
* Created by kotzilla on 17/07/15. |
||||
*/ |
||||
$(function () { |
||||
|
||||
console.log('banners'); |
||||
}); |
||||
@ -0,0 +1,46 @@ |
||||
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ |
||||
(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0<a.indexOf("%")},l=function(a,d){var e=parseInt(a,10)||0;d&&E(a)&&(e*=b.getViewport()[d]/100);return Math.ceil(e)},w=function(a,b){return l(a,b)+"px"};f.extend(b,{version:"2.1.5",defaults:{padding:15,margin:20, |
||||
width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!s,fitToView:!0,aspectRatio:!1,topRatio:0.5,leftRatio:0.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"}, |
||||
keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+ |
||||
(I?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, |
||||
openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, |
||||
isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, |
||||
c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& |
||||
k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| |
||||
b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= |
||||
setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index<b.group.length-1))b.player.isActive=!0,p.bind({"onCancel.player beforeClose.player":c,"onUpdate.player":e,"beforeLoad.player":d}),e(),b.trigger("onPlayStart")}else c()},next:function(a){var d=b.current;d&&(q(a)||(a=d.direction.next),b.jumpto(d.index+1,a,"next"))},prev:function(a){var d=b.current; |
||||
d&&(q(a)||(a=d.direction.prev),b.jumpto(d.index-1,a,"prev"))},jumpto:function(a,d,e){var c=b.current;c&&(a=l(a),b.direction=d||c.direction[a>=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d= |
||||
a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")), |
||||
b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('<div id="fancybox-loading"><div></div></div>').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(), |
||||
y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement; |
||||
if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1<a.group.length&&k[c]!==v)return b[d](k[c]),e.preventDefault(),!1;if(-1<f.inArray(c,k))return b[d](),e.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(d,c,k,g){for(var h=f(d.target||null),j=!1;h.length&&!j&&!h.is(".fancybox-skin")&&!h.is(".fancybox-wrap");)j=h[0]&&!(h[0].style.overflow&&"hidden"===h[0].style.overflow)&& |
||||
(h[0].clientWidth&&h[0].scrollWidth>h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1<b.group.length&&!a.canShrink){if(0<g||0<k)b.prev(0<g?"down":"left");else if(0>g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0, |
||||
{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1, |
||||
mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio= |
||||
!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href"); |
||||
"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload= |
||||
this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href); |
||||
f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload, |
||||
e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin, |
||||
outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("<div>").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}", |
||||
g);break;case "swf":e='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',h="",f.each(a.swf,function(a,b){e+='<param name="'+a+'" value="'+b+'"></param>';h+=" "+a+'="'+b+'"'}),e+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+h+"></embed></object>"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll": |
||||
"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside? |
||||
h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth|| |
||||
h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),c<m&&(c=m,j=l(c/D)),j<u&&(j=u,c=l(j*D))):(c=Math.max(m,Math.min(c,n)),h.autoHeight&& |
||||
"iframe"!==h.type&&(g.width(c),j=g.height()),j=Math.max(u,Math.min(j,p)));if(h.fitToView)if(g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height(),h.aspectRatio)for(;(a>z||y>r)&&(c>m&&j>u)&&!(19<d++);)j=Math.max(u,Math.min(p,j-10)),c=l(j*D),c<m&&(c=m,j=l(c/D)),c>n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&j<A&&c+x+q<z)&&(c+=q);g.width(c).height(j);e.width(c+x);a=e.width(); |
||||
y=e.height();e=(a>z||y>r)&&c>m&&j>u;c=h.aspectRatio?c<F&&j<B&&c<C&&j<A:(c<F||j<B)&&(c<C||j<A);f.extend(h,{dim:{width:w(a),height:w(y)},origWidth:C,origHeight:A,canShrink:e,canExpand:c,wPadding:x,hPadding:v,wrapSpace:y-k.outerHeight(!0),skinSpace:k.height()-j});!H&&(h.autoHeight&&j>u&&j<p&&!c)&&g.height("auto")},_getPosition:function(a){var d=b.current,e=b.getViewport(),c=d.margin,f=b.wrap.width()+c[1]+c[3],g=b.wrap.height()+c[0]+c[2],c={position:"absolute",top:c[0],left:c[3]};d.autoCenter&&d.fixed&& |
||||
!a&&g<=e.h&&f<=e.w?c.position="fixed":d.locked||(c.top+=e.y,c.left+=e.x);c.top=w(Math.max(c.top,c.top+(e.h-g)*d.topRatio));c.left=w(Math.max(c.left,c.left+(e.w-f)*d.leftRatio));return c},_afterZoomIn:function(){var a=b.current;a&&(b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened"),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(d){!f(d.target).is("a")&&!f(d.target).parent().is("a")&&(d.preventDefault(), |
||||
b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),!a.loop&&a.index===a.group.length-1?b.play(!1):b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=!1,b.play()))},_afterZoomOut:function(a){a= |
||||
a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,d=a.element,e=a.orig,c={},f=50,g=50,h=a.hPadding,j=a.wPadding,m=b.getViewport();!e&&(a.isDom&&d.is(":visible"))&&(e=d.find("img:first"),e.length||(e=d));t(e)?(c=e.offset(),e.is("img")&&(f=e.outerWidth(),g=e.outerHeight())): |
||||
(c.top=m.y+(m.h-g)*a.topRatio,c.left=m.x+(m.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)c.top-=m.y,c.left-=m.x;return c={top:w(c.top-h*a.topRatio),left:w(c.left-j*a.leftRatio),width:w(f+j),height:w(g+h)}},step:function(a,d){var e,c,f=d.prop;c=b.current;var g=c.wrapSpace,h=c.skinSpace;if("width"===f||"height"===f)e=d.end===d.start?1:(a-d.start)/(d.end-d.start),b.isClosing&&(e=1-e),c="width"===f?c.wPadding:c.hPadding,c=a-c,b.skin[f](l("width"===f?c:c-g*e)),b.inner[f](l("width"=== |
||||
f?c:c-g*e-h*e))},zoomIn:function(){var a=b.current,d=a.pos,e=a.openEffect,c="elastic"===e,k=f.extend({opacity:1},d);delete k.position;c?(d=this.getOrigPosition(),a.openOpacity&&(d.opacity=0.1)):"fade"===e&&(d.opacity=0.1);b.wrap.css(d).animate(k,{duration:"none"===e?0:a.openSpeed,easing:a.openEasing,step:c?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,d=a.closeEffect,e="elastic"===d,c={opacity:0.1};e&&(c=this.getOrigPosition(),a.closeOpacity&&(c.opacity=0.1));b.wrap.animate(c, |
||||
{duration:"none"===d?0:a.closeSpeed,easing:a.closeEasing,step:e?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,d=a.nextEffect,e=a.pos,c={opacity:1},f=b.direction,g;e.opacity=0.1;"elastic"===d&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(e[g]=w(l(e[g])-200),c[g]="+=200px"):(e[g]=w(l(e[g])+200),c[g]="-=200px"));"none"===d?b._afterZoomIn():b.wrap.css(e).animate(c,{duration:a.nextSpeed,easing:a.nextEasing,complete:b._afterZoomIn})},changeOut:function(){var a= |
||||
b.previous,d=a.prevEffect,e={opacity:0.1},c=b.direction;"elastic"===d&&(e["down"===c||"up"===c?"top":"left"]=("up"===c||"left"===c?"-":"+")+"=200px");a.wrap.animate(e,{duration:"none"===d?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!s,fixed:!0},overlay:null,fixed:!1,el:f("html"),create:function(a){a=f.extend({},this.defaults,a);this.overlay&&this.close();this.overlay= |
||||
f('<div class="fancybox-overlay"></div>').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive? |
||||
b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth), |
||||
p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"=== |
||||
f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d= |
||||
b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('<div class="fancybox-title fancybox-title-'+c+'-wrap">'+e+"</div>");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d, |
||||
e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+ |
||||
":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('<div style="position:fixed;top:20px;"></div>').appendTo("body");var e=20=== |
||||
d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("<style type='text/css'>.fancybox-margin{margin-right:"+(d-a)+"px;}</style>").appendTo("head")})})(window,document,jQuery); |
||||
@ -0,0 +1,218 @@ |
||||
{% extends 'client/base_catalog.html' %} |
||||
|
||||
{% block content_list %} |
||||
{{ form.errors }} |
||||
<div class="page-body clearfix"> |
||||
<div class="set-sect p-form adm-form"> |
||||
<div class="set-sect-title clearfix"> |
||||
{{ wizard.form.media }} |
||||
<h3>Шаг {{ wizard.steps.step1 }}. Основная информация</h3> |
||||
</div> |
||||
<form action="" enctype="multipart/form-data" method="post">{% csrf_token %} |
||||
{{ wizard.management_form }} |
||||
{# {% if wizard.form.forms %}#} |
||||
{# {{ wizard.form.management_form }}#} |
||||
{# {% for form in wizard.form.forms %}#} |
||||
{# {{ form }}#} |
||||
{# {% endfor %}#} |
||||
{# {% else %}#} |
||||
{% with wizard.form as form %} |
||||
<div class="adm-form-body"> |
||||
<div class="mf-line "> |
||||
<div class="mf-field"> |
||||
<label>Тематика:</label> |
||||
{{ form.theme }} |
||||
</div> |
||||
<div class="mf-field"> |
||||
<label>Теги:</label> |
||||
{{ form.tag }} |
||||
</div> |
||||
</div> |
||||
<hr/> |
||||
|
||||
<h2>Описание выставки</h2> |
||||
|
||||
<div class="mf-line"> |
||||
<div class="mf-field"> |
||||
{{ form.name }} |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-line full-width"> |
||||
<div class="mf-field"> |
||||
{{ form.main_title }} |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-line full-width"> |
||||
<div class="mf-field"> |
||||
{{ form.description }} |
||||
</div> |
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
<div id="dates-range" class="mf-line"> |
||||
<label class="h2">Даты проведения:</label> |
||||
|
||||
<div class="mf-field"> |
||||
<div class="period"> |
||||
<div class="pwf-field"> |
||||
<label>с</label> |
||||
{{ form.date_start }} |
||||
</div> |
||||
<div class="pwf-field"> |
||||
<label>по</label> |
||||
{{ form.date_end }} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
<div class="mfs-location"> |
||||
|
||||
<h2>Локация</h2> |
||||
|
||||
<div class="mf-line"> |
||||
<div class="mf-field"> |
||||
<h3>Место проведения:</h3> |
||||
{{ form.place }} |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-line"> |
||||
<div class="mf-field"> |
||||
<h3>Страна:</h3> |
||||
{{ form.country }} |
||||
</div> |
||||
|
||||
<div class="mf-field"> |
||||
<h3>Город:</h3> |
||||
{{ form.city }} |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
<hr/> |
||||
|
||||
<div class="mfs-additional"> |
||||
<h2>Дополнительная информация</h2> |
||||
|
||||
<div class="mf-line mf-targets"> |
||||
<label>Аудитория:</label> |
||||
|
||||
<div class="mf-field"> |
||||
|
||||
<div class="clearfix"> |
||||
<div class="mff-col"> |
||||
<label class="check">{{ form.audience1 }}специалисты</label> |
||||
<label class="check">{{ form.audience2 }}специалисты и |
||||
потребители</label> |
||||
<label class="check">{{ form.audience3 }}широкая публика</label> |
||||
</div> |
||||
|
||||
<div class="mff-col"> |
||||
{{ form.periodic }} |
||||
</div> |
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-line mf-membership"> |
||||
<label>Членства и знаки качества:</label> |
||||
|
||||
<div class="mf-field"> |
||||
<label class="check">{{ form.membership1 }}Exporating</label> |
||||
<label class="check">{{ form.membership2 }}RSVA</label> |
||||
<label class="check">{{ form.membership3 }}UFI</label> |
||||
<hr/> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-line mf-prod"> |
||||
<div class="mf-field"> |
||||
{{ form.web_site }} |
||||
|
||||
{{ form.products }} |
||||
|
||||
<hr/> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-line mf-time"> |
||||
<label>Время работы:</label> |
||||
|
||||
<div id="work-time" class="mf-field"> |
||||
<div class="w-time"> |
||||
{# <div class="w-time-day">#} |
||||
{# <select name="d01">#} |
||||
{# <option value="12.04.2014">12.04.2014</option>#} |
||||
{# </select>#} |
||||
{# </div>#} |
||||
|
||||
<div class="w-time-wrap"> |
||||
<label>c</label> |
||||
{{ form.time_start }} |
||||
</div> |
||||
|
||||
<div class="w-time-wrap"> |
||||
<label>до</label> |
||||
{{ form.time_end }} |
||||
</div> |
||||
|
||||
{# <label class="check"><input type="checkbox" class="w-time-switcher" name="c05" checked />Один график на все дни</label>#} |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
<hr/> |
||||
|
||||
<div class="mf-line mf-logo"> |
||||
<label class="h2">Логотип:</label> |
||||
|
||||
<div class="mf-field"> |
||||
<div class="input-file clearfix"> |
||||
{{ form.logo }} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<hr/> |
||||
</div> |
||||
<div class="a-bot-buttons-line clearfix"> |
||||
|
||||
<div class="abb-right"> |
||||
<input class="button big orange a-more" type="submit" value="Дале >"/> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</form> |
||||
|
||||
{% endwith %} |
||||
</div> |
||||
|
||||
<div class="set-sect p-form adm-form not-active"> |
||||
<div class="set-sect-title clearfix"> |
||||
<h3>Шаг 2. Статистика и условия участия</h3> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="set-sect p-form adm-form not-active"> |
||||
<div class="set-sect-title clearfix"> |
||||
<h3>Шаг 3. Добавление фото</h3> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
<hr/> |
||||
{# {% endif %}#} |
||||
{% endblock %} |
||||
@ -0,0 +1,310 @@ |
||||
{% extends 'client/base_catalog.html' %} |
||||
|
||||
{% block content_list %} |
||||
{{ form.errors }} |
||||
<div class="page-title"> |
||||
<h1>Добавить событие</h1> |
||||
</div> |
||||
<div class="page-body clearfix"> |
||||
{{ wizard.form.media }} |
||||
<div class="set-sect p-form adm-form passed"> |
||||
<div class="set-sect-title clearfix"> |
||||
<h3>Шаг 1. Основная информация</h3> |
||||
|
||||
<div class="afh-right"> |
||||
|
||||
<a class="button icon-edit" href="#">изменить</a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<div class="set-sect p-form adm-form"> |
||||
<div class="set-sect-title clearfix"> |
||||
<h3>Шаг 2. Статистика и условия участия</h3> |
||||
|
||||
<div class="afh-right"> |
||||
<div class="sst-info"><b>+ 0,9 баллов</b> к рейтингу</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<form action="" method="post">{% csrf_token %} |
||||
{{ wizard.management_form }} |
||||
{% if wizard.form.forms %} |
||||
{{ wizard.form.management_form }} |
||||
{% for form in wizard.form.forms %} |
||||
{{ form }} |
||||
{% endfor %} |
||||
{% else %} |
||||
{% with wizard.form as form %} |
||||
<hr/> |
||||
|
||||
<div class="mfs-additional mf-stat"> |
||||
|
||||
<div class="mf-line mf-prod mf-short-input"> |
||||
<label>Год основания:</label> |
||||
{{ form.found_year }} |
||||
<div class="mf-field"> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-stat-item"> |
||||
|
||||
<hr/> |
||||
|
||||
<div class="mf-line mf-prod"> |
||||
<label class="h3">Статистика за</label> |
||||
|
||||
<div class="mf-field"> |
||||
|
||||
<div class="mf-year"> |
||||
{{ form.statistic_year }} |
||||
</div> |
||||
|
||||
<div class="mf-stat-data"> |
||||
|
||||
<div class="sd-visitors"> |
||||
{{ form.visitors }} |
||||
</div> |
||||
|
||||
<div class="sd-participants"> |
||||
{{ form.partisipants }} |
||||
</div> |
||||
|
||||
<div class="sd-area"> |
||||
{{ form.square }} |
||||
м² |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
<div class="mf-line mf-prod mf-stat-countries"> |
||||
<label>Страны:</label> |
||||
|
||||
<div class="mf-field"> |
||||
|
||||
<div class="csb-selected-items"></div> |
||||
<div class="csb-menu-wrap"> |
||||
<div class="scroll-container csb-menu"> |
||||
<div class="scroll-content clearfix"> |
||||
{{ form.countries }} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<div class="mf-stat-add-button"> |
||||
<a class="button big icon-add" href="#">добавить данные за другой период</a> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
<h2>Стоимость посещения и участия</h2> |
||||
|
||||
<div class="e-price-wrap"> |
||||
<div class="epr-layout"> |
||||
|
||||
<div class="eprl-col"> |
||||
<div class="eprl-col-wrap"> |
||||
|
||||
<div class="epr-subtitle">Стоимость билетов</div> |
||||
|
||||
<div class="tp-wrap"> |
||||
|
||||
<ul class="pr-list"> |
||||
|
||||
<li> |
||||
{{ form.one_day }} |
||||
<select name="oneDayCurrency1"> |
||||
<option value="rur">руб</option> |
||||
<option value="usd">usd</option> |
||||
<option value="eur">eur</option> |
||||
</select> |
||||
</li> |
||||
|
||||
<li> |
||||
{{ form.all_days }} |
||||
<select name="allDaysCurrency1"> |
||||
<option value="rur">руб</option> |
||||
<option value="usd">usd</option> |
||||
<option value="eur">eur</option> |
||||
</select> |
||||
</li> |
||||
|
||||
</ul> |
||||
|
||||
<div class="tp-descr">Предварительная регистрация</div> |
||||
|
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
<div class="tp-wrap"> |
||||
|
||||
<ul class="pr-list"> |
||||
|
||||
<li> |
||||
{{ form.pre_one_day }} |
||||
<select name="oneDayCurrency2"> |
||||
<option value="1">руб</option> |
||||
<option value="2">usd</option> |
||||
<option value="3">eur</option> |
||||
</select> |
||||
</li> |
||||
|
||||
<li> |
||||
{{ form.pre_all_days }} |
||||
<select name="allDaysCurrency2"> |
||||
<option value="1">руб</option> |
||||
<option value="2">usd</option> |
||||
<option value="3">eur</option> |
||||
</select> |
||||
</li> |
||||
|
||||
</ul> |
||||
|
||||
<div class="tp-descr grey">Регистрация на стойке</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<div class="eprl-col"> |
||||
<div class="eprl-col-wrap"> |
||||
|
||||
<div class="epr-subtitle">Стоимость аренды 1м²</div> |
||||
|
||||
<ul class="pr-list"> |
||||
|
||||
<li> |
||||
{{ form.equiped }} |
||||
<select name="areaCurrency1"> |
||||
<option value="1">руб</option> |
||||
<option value="2">usd</option> |
||||
<option value="3">eur</option> |
||||
</select> |
||||
</li> |
||||
|
||||
<li> |
||||
{{ form.unequiped }} |
||||
<select name="areaCurrency2"> |
||||
<option value="1">руб</option> |
||||
<option value="2">usd</option> |
||||
<option value="3">eur</option> |
||||
</select> |
||||
</li> |
||||
|
||||
<li> |
||||
{{ form.open_square }} |
||||
<select name="areaCurrency3"> |
||||
<option value="1">руб</option> |
||||
<option value="2">usd</option> |
||||
<option value="3">eur</option> |
||||
</select> |
||||
</li> |
||||
|
||||
</ul> |
||||
|
||||
<hr/> |
||||
|
||||
<div class="mf-line mf-min-area"> |
||||
<label>Минимальная площадь:</label> |
||||
|
||||
<div class="mf-field"> |
||||
{{ form.min_square }} |
||||
м² |
||||
</div> |
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
<div class="mf-line mf-reg-payment"> |
||||
<label>Регистрационный взнос:</label> |
||||
|
||||
<div class="mf-field"> |
||||
{{ form.registration_depos }} |
||||
<select name="areaCurrency3"> |
||||
<option value="1">руб</option> |
||||
<option value="2">usd</option> |
||||
<option value="3">eur</option> |
||||
</select> |
||||
</div> |
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
<div class="mf-line mf-deadline"> |
||||
<label>Крайний срок подачи заявки:</label> |
||||
|
||||
<div class="mf-field"> |
||||
<div class="period"> |
||||
<div class="pwf-field"> |
||||
{{ form.deadline_date }} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
<hr/> |
||||
|
||||
<div class="a-bot-buttons-line clearfix"> |
||||
|
||||
<div class="abb-left"> |
||||
<div class="mfpl-button-line"> |
||||
<div class="mfpl-button"> |
||||
<a class="button big grey a-more" href="#">пропустить этот шаг</a> |
||||
</div> |
||||
|
||||
<div class="mfpl-text"> |
||||
<p>более полная информация повышает рейтинг вашего мероприятия и позволяет ранжировать |
||||
его выше других</p> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
{% if wizard.steps.prev %} |
||||
<button class="button big orange a-more" name="wizard_goto_step" type="submit" |
||||
value="{{ wizard.steps.first }}">"first step" |
||||
</button> |
||||
<button class="button big orange a-more" name="wizard_goto_step" type="submit" |
||||
value="{{ wizard.steps.prev }}"> "prev step" |
||||
</button> |
||||
{% endif %} |
||||
<button class="button big orange a-more" type="submit" >Дале</button> |
||||
|
||||
</div> |
||||
</form> |
||||
|
||||
</div> |
||||
<div class="set-sect p-form adm-form passed"> |
||||
<div class="set-sect-title clearfix"> |
||||
<h3>Шаг 3. Добавление фото</h3> |
||||
|
||||
<div class="afh-right"> |
||||
<a class="button icon-edit" href="#">изменить</a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endwith %} |
||||
{% endif %} |
||||
|
||||
{% endblock %} |
||||
@ -0,0 +1,23 @@ |
||||
{% extends 'client/base_catalog.html' %} |
||||
{% block content_list %} |
||||
{{ wizard.form.media }} |
||||
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p> |
||||
<form action="" method="post">{% csrf_token %} |
||||
<table> |
||||
{{ wizard.management_form }} |
||||
{% if wizard.form.forms %} |
||||
{{ wizard.form.management_form }} |
||||
{% for form in wizard.form.forms %} |
||||
{{ form }} |
||||
{% endfor %} |
||||
{% else %} |
||||
{{ wizard.form }} |
||||
{% endif %} |
||||
</table> |
||||
{% if wizard.steps.prev %} |
||||
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}"> "first step" </button> |
||||
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}"> "prev step"</button> |
||||
{% endif %} |
||||
<input type="submit" value= "submit"/> |
||||
</form> |
||||
{% endblock %} |
||||
@ -0,0 +1 @@ |
||||
{{form_data}} |
||||
@ -0,0 +1,27 @@ |
||||
{% extends "client/base_page.html" %} |
||||
|
||||
{% block title %}Email confirmation{% endblock %} |
||||
|
||||
{% block page_body %} |
||||
|
||||
<h1>Enter your email</h1> |
||||
|
||||
{% if form.errors %} |
||||
<p class="error">Please correct the errors below:</p> |
||||
{% endif %} |
||||
<form class="form-inline" action="{% url "social:complete" backend=backend %}" method="post" role="form">{% csrf_token %} |
||||
<div class="form-group"> |
||||
<div class="input-group"> |
||||
<label class="control-label" for="id_email">Email address:</label> |
||||
<input class="form-control" id="id_email" type="email" name="email" placeholder="E-mail"/> |
||||
{# <input type="hidden" name="valid" value="no">#} |
||||
</div> |
||||
</div> |
||||
<button class="btn btn-default" type="submit">Submit</button> |
||||
</form> |
||||
|
||||
{% endblock %} |
||||
|
||||
{% block content-related %} |
||||
<p>Please enter your valid email, to activate account we will send you an email on this e-mail address</p> |
||||
{% endblock %} |
||||
@ -0,0 +1,8 @@ |
||||
{% extends "client/base_page.html" %} |
||||
|
||||
{% block title %}Registration complete{% endblock %} |
||||
|
||||
{% block page_body %} |
||||
<h1>Check your email</h1> |
||||
<p>An activation link has been sent to the email address you supplied, along with instructions for activating your account.</p> |
||||
{% endblock %} |
||||
@ -0,0 +1,65 @@ |
||||
# -*- coding: utf-8 -*- |
||||
from django import forms |
||||
from theme.models import Theme, Tag |
||||
from place_exposition.models import PlaceExposition |
||||
from city.models import City |
||||
from country.models import Country |
||||
|
||||
choices = ((0, ''), (1.0, u'Ежегодно'), (2.0, u'2 раза в год'), (3.0, u'3 раза в год'), (4.0, u'4 раза в год'), |
||||
(5.0, u'5 раз в год'), (0.5, u'Раз в 2 года'), ( |
||||
0.33, u'Раз в 3 года'), (0.25, u'Раз в 4 года')) |
||||
|
||||
|
||||
class ExpoForm1(forms.Form): |
||||
""" |
||||
main information about exposition |
||||
""" |
||||
theme = forms.ModelChoiceField(queryset=Theme.objects.filter(id=50)) |
||||
tag = forms.ModelChoiceField(queryset=Tag.objects.filter(id=50)) |
||||
name = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'placeholder': "Введите название выставки"})) |
||||
main_title = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'placeholder': "Краткое описание выставки (необязательно)"})) |
||||
description = forms.CharField(widget=forms.Textarea(attrs={'placeholder': "Полное описание выставки", 'cols':30, 'rows':10})) |
||||
date_start = forms.DateField(widget=forms.TextInput(attrs={'class':'data dateFrom', 'placeholder':'дд.мм.гг'})) |
||||
date_end = forms.DateField(widget=forms.TextInput(attrs={'class':'data dateTo','placeholder':'дд.мм.гг'})) |
||||
country = forms.ModelChoiceField(queryset=Country.objects.filter(id=50)) |
||||
city = forms.ModelChoiceField(queryset=City.objects.language('ru').filter(id=900052419)) |
||||
place = forms.ModelChoiceField(queryset=PlaceExposition.objects.filter(id=50)) |
||||
audience1 = forms.BooleanField(required=False) |
||||
audience2 = forms.BooleanField(required=False) |
||||
audience3 = forms.BooleanField(required=False) |
||||
periodic = forms.ChoiceField(choices=choices) |
||||
membership1= forms.BooleanField(required=False) |
||||
membership2= forms.BooleanField(required=False) |
||||
membership3= forms.BooleanField(required=False) |
||||
web_site = forms.URLField(required=False, widget=forms.TextInput(attrs={'placeholder': "Веб-сайт (необязательно)"})) |
||||
products = forms.CharField(widget=forms.Textarea(attrs={'placeholder': "Экспонируемые продукты", 'cols':30, 'rows':10})) |
||||
time_start = forms.TimeField() |
||||
time_end = forms.TimeField() |
||||
logo = forms.ImageField(widget=forms.FileInput(attrs={'class':"button big icon-clip"}), required=False) |
||||
|
||||
|
||||
class ExpoForm2(forms.Form): |
||||
""" |
||||
statistics |
||||
""" |
||||
found_year = forms.IntegerField() |
||||
statistic_year = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder':'введите год'})) |
||||
visitors = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder':'количество посетителей'})) |
||||
partisipants = forms.IntegerField(widget=forms.TextInput(attrs={'placeholder':'количество учасников'})) |
||||
square = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'площадь'})) |
||||
countries = forms.ModelChoiceField(queryset=Country.objects.filter(id=50)) |
||||
|
||||
# ticket price |
||||
pre_one_day = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'на один день'})) |
||||
pre_all_days = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'на все дни'})) |
||||
one_day = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'на один день'})) |
||||
all_days = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'на все дни'})) |
||||
|
||||
# rent price |
||||
equiped = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'оборудованная площадь'})) |
||||
unequiped = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'необорудованная площадь'})) |
||||
open_square = forms.FloatField(widget=forms.TextInput(attrs={'placeholder':'открытая площадь'})) |
||||
min_square = forms.FloatField() |
||||
registration_depos = forms.FloatField() |
||||
deadline_date = forms.DateField(widget=forms.TextInput(attrs={'placeholder':'дд.мм.гг'})) |
||||
|
||||
@ -0,0 +1,3 @@ |
||||
from django.db import models |
||||
|
||||
# Create your models here. |
||||
@ -0,0 +1,16 @@ |
||||
""" |
||||
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) |
||||
@ -0,0 +1,8 @@ |
||||
from django.conf.urls import patterns |
||||
|
||||
from wizard.forms import ExpoForm1, ExpoForm2 |
||||
from wizard.views import ExpoWizard |
||||
|
||||
urlpatterns = patterns('', |
||||
(r'^$', ExpoWizard.as_view([ExpoForm1, ExpoForm2])) |
||||
) |
||||
@ -0,0 +1,89 @@ |
||||
from django.shortcuts import render_to_response |
||||
from django.contrib.formtools.wizard.views import SessionWizardView |
||||
from django.core.files.storage import default_storage, FileSystemStorage |
||||
import os |
||||
from proj import settings |
||||
from wizard import forms |
||||
from exposition.models import Exposition, Statistic |
||||
from functions.form_check import translit_with_separator |
||||
|
||||
|
||||
# defining different template for every form |
||||
TEMPLATES = {'0':'client/wizard/first_step.html', '1':'client/wizard/second_step.html'} |
||||
|
||||
|
||||
|
||||
class ExpoWizard(SessionWizardView): |
||||
location=os.path.join(settings.MEDIA_ROOT, 'temp', 'files') |
||||
file_storage = FileSystemStorage(location, settings.MEDIA_URL) |
||||
|
||||
def done(self, form_list, **kwargs): |
||||
upload_file = form_list[0].cleaned_data['logo'] |
||||
data = self.get_all_cleaned_data() |
||||
expo = Exposition.objects.language('ru').create( |
||||
name = data.get('name'), |
||||
data_begin = data.get('date_start'), |
||||
data_end = data.get('date_end'), |
||||
main_title = data.get('main_title'), |
||||
description = data.get('description'), |
||||
products = data.get('products'), |
||||
country = data.get('country', 1), |
||||
city = data.get('city', 1), |
||||
place = data.get('place', 1), |
||||
periodic = data.get('periodic'), |
||||
web_page = data.get('web_site'), |
||||
logo = data.get('logo'), |
||||
|
||||
foundation_year = data.get('found_year'), |
||||
area = data.get('square'), |
||||
price_day = '%i %s'%(data.get('one_day'), self.request.POST['oneDayCurrency1']), |
||||
price_all = '%i %s'%(data.get('all_days'), self.request.POST['allDaysCurrency1']), |
||||
price_day_bar = '%i %s'%(data.get('pre_one_day'),self.request.POST['oneDayCurrency1']), |
||||
price_all_bar = '%i %s'%(data.get('pre_all_days'),self.request.POST['allDaysCurrency1']), |
||||
|
||||
min_area = data.get('min_square'), |
||||
registration_payment = data.get('registration_depos'), |
||||
application_deadline = data.get('deadline_date'), |
||||
min_closed_area = data.get('unequiped'), |
||||
min_open_area = data.get('open_square'), |
||||
min_closed_equipped_area = data.get('equiped'), |
||||
url = translit_with_separator(data.get('name')), |
||||
quality_label= 0, |
||||
audience = 0 |
||||
) |
||||
expo.tag = [data.get('tag')] |
||||
expo.theme = [data.get('theme')] |
||||
if data['membership1']: |
||||
expo.quality_label = (expo.quality_label| Exposition.quality_label.exporating) |
||||
if data['membership2']: |
||||
expo.quality_label = (expo.quality_label| Exposition.quality_label.rsva) |
||||
if data['membership3']: |
||||
expo.quality_label = (expo.quality_label| Exposition.quality_label.ufi) |
||||
|
||||
if data['audience1']: |
||||
expo.audience = (expo.audience | Exposition.audience.experts) |
||||
if data['audience2']: |
||||
expo.audience = expo.audience | getattr(Exposition.audience, 'experts and consumers') |
||||
if data['audience3']: |
||||
expo.audience = expo.audience | (getattr(Exposition.audience, 'general public')) |
||||
|
||||
expo.save() |
||||
|
||||
Statistic.objects.language().create( |
||||
exposition = expo, |
||||
year = data.get('statistic_year'), |
||||
visitors = data.get('visitors'), |
||||
members = data.get('partisipants'), |
||||
countries = data.get('countries'), |
||||
area = data.get('square') |
||||
) |
||||
|
||||
if upload_file: |
||||
self.file_storage.delete(upload_file.name) |
||||
return render_to_response('done.html', { |
||||
'form_data': [form.cleaned_data for form in form_list], |
||||
}) |
||||
|
||||
def get_template_names(self): |
||||
return [TEMPLATES[self.steps.current]] |
||||
|
||||
Loading…
Reference in new issue