trademark update

master
fefa4ka 9 years ago
parent ad5df5e35f
commit 838530bb88
  1. 3
      app/settings.py
  2. 9
      trademark/lib/poiskznakov.py
  3. 82
      trademark/models.py
  4. 139
      trademark/templates/trademark/form.html
  5. 14
      trademark/templates/trademark/nice_block_busy.html
  6. 2
      trademark/templates/trademark/registration.html
  7. 24
      trademark/templates/trademark/search_detail.html
  8. 8
      trademark/templates/trademark/search_list_item.html
  9. 55
      trademark/templates/trademark/trademark_detail.html
  10. 1
      trademark/urls.py
  11. 39
      trademark/views.py
  12. 157
      zsite/static/js/trademarks.js
  13. 49
      zsite/static/less/search.less

@ -112,7 +112,8 @@ PIPELINE_JS = {
'js/app.js', 'js/app.js',
'js/forms.js', 'js/forms.js',
'js/snippets.js', 'js/snippets.js',
'js/nice.js' 'js/nice.js',
'js/trademarks.js',
), ),
'output_filename': 'js/zuykov.js', 'output_filename': 'js/zuykov.js',
}, },

@ -86,13 +86,8 @@ class TrademarkSearchAPI():
'marks': ids, 'marks': ids,
'access_keys': keys 'access_keys': keys
} }
data = self.send_request(request)
try: return data['records_list']['21']['records']
data = self.send_request(request)
return data['records_list']['21']['records']
except:
return None
class SearchResultsThread(threading.Thread): class SearchResultsThread(threading.Thread):

@ -11,7 +11,6 @@ from unidecode import unidecode
from django.template.defaultfilters import slugify from django.template.defaultfilters import slugify
# from .cms_appconfig import TrademarkConfig # from .cms_appconfig import TrademarkConfig
TrademarkAPI = TrademarkSearchAPI() TrademarkAPI = TrademarkSearchAPI()
class Owner(models.Model): class Owner(models.Model):
@ -47,24 +46,71 @@ class Nice(models.Model):
return self.title return self.title
class Product(models.Model):
title = models.TextField()
nice = models.ForeignKey(Nice)
class Meta:
verbose_name = _('product')
verbose_name_plural = _('products')
def __unicode__(self): # Python 3: def __str__(self):
return self.title
def __str__(self):
return self.title
@property
def cap_title(self):
line = self.title.strip().replace('[', '(').replace(']', ')')
if line[-1] == ".":
cap_line = line[0].upper() + line[1:-1]
else:
cap_line = line[0].upper() + line[1:]
return cap_line
@property
def titles(self):
titles = self.title.split(';')
try:
if len(titles) > 1:
capitalized = []
for line in titles:
line = line.strip().replace('[', '(').replace(']', ')')
if line[-1] == ".":
cap_line = line[0].upper() + line[1:-1]
else:
cap_line = line[0].upper() + line[1:]
capitalized.append(cap_line)
return capitalized
else:
return []
except:
return []
class Trademark(models.Model): class Trademark(models.Model):
title = models.CharField(max_length=255) title = models.CharField(max_length=255, null=True)
ext_id = models.CharField(max_length=20, unique=True) ext_id = models.CharField(max_length=20, unique=True)
application_id = models.IntegerField() application_id = models.CharField(max_length=12, null=True)
cert_id = models.IntegerField() cert_id = models.CharField(max_length=12, null=True)
owner = models.TextField() owner = models.TextField(null=True)
image_url = models.URLField(blank=True) image_url = models.URLField(null=True)
nices = models.ManyToManyField(Nice) nices = models.ManyToManyField(Nice)
products = models.ManyToManyField(Product)
status = models.CharField(max_length=20) status = models.CharField(max_length=20)
source_url = models.URLField(blank=True) source_url = models.URLField(null=True)
application_at = models.DateField(blank=True) application_at = models.DateField(null=True)
registration_at = models.DateField(blank=True) registration_at = models.DateField(null=True)
expiration_at = models.DateField(blank=True) expiration_at = models.DateField(null=True)
renewed_at = models.DateField(blank=True) renewed_at = models.DateField(null=True)
priority_at = models.DateField(blank=True) priority_at = models.DateField(null=True)
access_key = models.CharField(max_length=20) access_key = models.CharField(max_length=20, null=True)
class Meta: class Meta:
verbose_name = _('trademark') verbose_name = _('trademark')
@ -156,7 +202,6 @@ class Search(models.Model):
def get_results(self): def get_results(self):
results, status = TrademarkAPI.get_results(self.search_id) results, status = TrademarkAPI.get_results(self.search_id)
# print status['search_status']
if status['search_status'] == 'failed': if status['search_status'] == 'failed':
self.send_request self.send_request
return return
@ -202,7 +247,7 @@ class Search(models.Model):
trademark_ids = [ext_id for ext_id in self.results.values_list('ext_id', flat=True)] trademark_ids = [ext_id for ext_id in self.results.values_list('ext_id', flat=True)]
trademark_keys = [str(key) for key in self.results.values_list('access_key', flat=True)] trademark_keys = [key for key in self.results.values_list('access_key', flat=True)]
if len(trademark_ids) == 0: if len(trademark_ids) == 0:
return return
@ -219,9 +264,12 @@ class Search(models.Model):
instance.expiration_at = trademark.get('dateexp', '') instance.expiration_at = trademark.get('dateexp', '')
instance.renewed_at = trademark.get('renewed', '') instance.renewed_at = trademark.get('renewed', '')
instance.save() for nice_id, nice_description in trademark['icgs'].iteritems():
nice_obj, created = Nice.objects.get_or_create(nice_id=nice_id)
product, created = Product.objects.get_or_create(nice=nice_obj, title=nice_description)
instance.products.add(product)
instance.save()
class SearchResult(models.Model): class SearchResult(models.Model):

@ -70,144 +70,5 @@
</ul> </ul>
</div> </div>
</div> </div>
<script type="text/javascript">
$(function(){ // I use jQuery in this example
function send () {
var request = $("#trademark-search-request").val(),
$form = $('.trademark-search-form'),
$loading = $('.trademark-search-loading'),
$status_list = $('.trademark-search-loading-status'),
$count = $('#trademark-search-count'),
$title = $('#trademark-search-request-value'),
$sending = $('#trademark-search-sending'),
$identity = $('#trademark-search-identity'),
$contains = $('#trademark-search-contains'),
$similar = $('#trademark-search-similar'),
$wait = $('#trademark-search-wait'),
slug = '',
iteration = 0;
function update_status(data) {
var identity = data['identity'],
contains = data['contains'],
similar = data['similar'],
completed = identity['status'] == 'finished' && contains['status'] == 'finished' && similar['status'] == 'finished',
almost_completed = identity['status'] == 'finished' && contains['status'] == 'finished' && identity['count'] > 0,
show_link = identity['status'] == 'finished' || contains['status'] == 'finished' || similar['status'] == 'finished',
tm_url = '/ru/trademarks/online-search/results/' + slug + '/';
if(identity['status'] == 'finished') {
var count = identity['count'];
if(count > 0) {
$identity.text(GetNoun(count, 'Найден', 'Найдены', 'Найдено') + ' '+ count + ' ' + GetAdj(count, 'такой', 'таких') + ' ' + GetNoun(count, 'знак', 'знака', 'знаков')+ ' в ' + identity['nices'] + ' ' + GetNoun(identity['nices'], 'классе', 'классах', 'классах'));
} else {
$identity.text('Точно таких же знаков не найдено');
}
}
if(contains['status'] == 'finished') {
var count = contains['count'];
if(count > 0) {
$contains.text(GetNoun(count, 'Обнаружен', 'Обнаружены', 'Обнаружено') + ' ' + count + ' ' + GetAdj(count, 'похожий', 'похожих') + ' ' + GetNoun(count, 'знак', 'знака', 'знаков'));
} else {
$contains.text('Похожих знаков не обнаружено');
}
}
if(similar['status'] == 'finished') {
var count = similar['count'];
if(count > 0) {
$similar.text(GetNoun(count, 'Подобран', 'Подобраны', 'Подобрано') + ' ' + count + ' ' + GetAdj(count, 'производный', 'производных') + ' ' + GetNoun(count, 'знак', 'знака', 'знаков'));
} else {
$similar.text('Не удалось подобрать производных знаков');
}
}
if(iteration > 3) {
$wait.show(500);
}
if(show_link && iteration > 5) {
var href = ''
$wait.html('<a href="' + tm_url + '">Остановить поиск и перейти к результатам</a>');
} else {
console.log(iteration);
}
if(completed || almost_completed) {
yaCounter950321.reachGoal('TrademarkSearchResults');
ga('send', 'event', 'TrademarkSearch', 'results', document.title);
document.location.href = tm_url;
} else {
iteration += 1;
setTimeout(function () {
get_status(slug);
}, 10000);
}
}
function get_status(slug) {
try {
$.get("/ru/trademarks/online-search/request/" + slug + "/").done(function(data) {
update_status(data);
});
} catch (err) {
setTimeout(function () {
get_status(slug);
}, 5000);
}
}
yaCounter950321.reachGoal('TrademarkSearchClick');
ga('send', 'event', 'TrademarkSearch', 'click', document.title);
// Show Loading Block
$title.text(request);
$form.hide();
$loading.show();
$sending.show();
$.post("/ru/trademarks/online-search/request/",
{ 'keyword': request}).done(function(data) {
var tm_count = Math.floor(Math.random() * (3000000 - 1000000) + 1000000);
$('.trademark-search-count').text(tm_count.toLocaleString() + ' знаков')
$count.show(500);
$identity.delay(3000).show(500);
$contains.delay(6000).show(500);
$similar.delay(12000).show(500);
slug = data['slug'];
update_status(data);
})
.fail(function(data) {
console.log( "error " );
console.log(data);
})
.always(function(data) {
console.log( "finished" );
console.log(data);
$sending.hide()
});
}
$('#trademark-search-example').click(function(event) {
event.preventDefault();
$("#trademark-search-request").val('Yandex');
});
$('#trademark-search-request').keypress(function (e) {
if (e.which == 13) {
send();
return false; //<---- Add this line
}
});
$('#trademark-search-submit').click(function(){
send();
});
});
</script>
{% endblock %} {% endblock %}

@ -1,10 +1,16 @@
<div class="trademark-search-nice-busy"> <div class="trademark-search-nice-busy">
<h2>«{{ keyword|title }}» нельзя использовать в следующих сферах</h2> <h2>«{{ keyword|title }}» уже используется в следующих сферах</h2>
<ul class="trademark-search-available-classes list-unstyled"> <ul class="list-unstyled">
{% for class in nice_busy %} {% for product in products_busy %}
<li> <button class="btn btn-xs btn-default">{{ class.nice_id }}</button> {{ class.title }}</li> {% if product.titles %}
<li class="trademark-search-nice-busy-product"><button class="btn btn-xs btn-default" popover="{% if product.nice.description %}{{ product.nice.description }}{% else %}{{ product.nice.title }}{% endif %}" popover-title="{{ product.nice.title }}" popover-trigger="mouseenter" popover-placement="bottom">{{ product.nice.nice_id }} класс</button> <button class="btn btn-xs btn-default trademark-search-show-products" product-id="{{ product.id }}">{{ product.titles|length }} категорий <span class="caret"> </span></button> {{ product.nice.title }}</li>
<ul class="trademark-search-nice-busy-products row" style="display: none;" product-id="{{ product.id }}">{% for title in product.titles %}<li class="col-xs-6">{{ title }}</li>{% endfor %}</ul>
{% else %}
<li class="trademark-search-nice-busy-product"><button class="btn btn-xs btn-default" popover="{% if product.nice.description %}{{ product.nice.description }}{% else %}{{ product.nice.title }}{% endif %}" popover-title="{{ product.nice.title }}" popover-trigger="mouseenter" popover-placement="bottom">{{ product.nice.nice_id }} класс</button> {{ product.cap_title }}</li>
{% endif %}
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>

@ -1,6 +1,6 @@
{% if nice_available.count > 0 %} {% if nice_available.count > 0 %}
<div class="trademark-register-block"> <div class="trademark-register-block">
<h1>Зарегистрируйте товарный знак <nobr>«{{ keyword.request|title }}»</nobr></h1> <h1>Зарегистрируйте знак «{{ trademark_title|title }}»</h1>
<div class="description"> <div class="description">
<p> <p>
Регистрация доступна в {{ nice_available.count }} классах товаров и услуг.</p> Регистрация доступна в {{ nice_available.count }} классах товаров и услуг.</p>

@ -12,7 +12,7 @@
<ul class="trademark-search-results list-inline list-unstyled"> <ul class="trademark-search-results list-inline list-unstyled">
{% for tm in identity %} {% for tm in identity %}
<li class="trademark-search-result-identity"> <li class="trademark-search-result-identity trademark-search-result" trademark-id='{{ tm.id }}'>
<div class='trademark-search-result-image' style="background-image: url({{ tm.image_url }});"> <div class='trademark-search-result-image' style="background-image: url({{ tm.image_url }});">
{% if not tm.image_url %} {% if not tm.image_url %}
<h4>{{ tm.title|title }}</h4> <h4>{{ tm.title|title }}</h4>
@ -42,7 +42,7 @@
</ul> </ul>
{% if nice_busy.count < 45 %} {% if nice_busy.count < 45 %}
{% include 'trademark/nice_block_busy.html' with keyword=keyword.request nice_busy=nice_busy %} {% include 'trademark/nice_block_busy.html' with keyword=keyword.request nice_busy=nice_busy products_busy=products_busy %}
{% endif %} {% endif %}
{% else %} {% else %}
@ -73,14 +73,7 @@
<h2>Похожие на «{{ keyword.request|title }}» торговые марки</h2> <h2>Похожие на «{{ keyword.request|title }}» торговые марки</h2>
<ul class="trademark-search-results list-inline list-unstyled"> <ul class="trademark-search-results list-inline list-unstyled">
{% for tm in contains %} {% for tm in contains %}
<li class="trademark-search-result-contains"> {% include 'trademark/search_list_item.html' with tm=tm %}
<div class='trademark-search-result-image' style="background-image: url({{ tm.image_url }});">
{% if not tm.image_url %}
<h4>{{ tm.title|title }}</h4>
{% endif %}
</div>
<p>{{ tm.title|title }}</p>
</li>
{% endfor %} {% endfor %}
</ul> </ul>
{% endif %} {% endif %}
@ -89,16 +82,11 @@
<h2>Знаки включающие в себя части от «{{ keyword.request|title }}»</h2> <h2>Знаки включающие в себя части от «{{ keyword.request|title }}»</h2>
<ul class="trademark-search-results list-inline list-unstyled"> <ul class="trademark-search-results list-inline list-unstyled">
{% for tm in similar %} {% for tm in similar %}
<li class="trademark-search-result-contains"> {% include 'trademark/search_list_item.html' with tm=tm %}
<div class='trademark-search-result-image' style="background-image: url({{ tm.image_url }});">
{% if not tm.image_url %}
<h4>{{ tm.title|title }}</h4>
{% endif %}
</div>
<p>{{ tm.title|title }}</p>
</li>
{% endfor %} {% endfor %}
</ul> </ul>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

@ -0,0 +1,8 @@
<li class="trademark-search-result-contains trademark-search-result" trademark-id='{{ tm.id }}'>
<div class='trademark-search-result-image' style="background-image: url({{ tm.image_url }});">
{% if not tm.image_url %}
<h4>{{ tm.title|title }}</h4>
{% endif %}
</div>
<p>{{ tm.title|title }}</p>
</li>

@ -0,0 +1,55 @@
{% extends "trademark/base.html" %}
{% block trademark_content %}
<div class="row">
<div class="col-xs-12 col-sm-8">
<h1>Товарный знак «{{ tm.title }}»</h1>
<ul class="list-unstyled row">
<li class='col-xs-4'>
<h2>Подана заявка <nobr>{{ tm.application_at }}</nobr></h2>
<p>Номер <nobr>№ {{ tm.application_id }}</nobr></p>
</li>
<li class='col-xs-2 trademark-detail-arrow'>
</li>
<li class='col-xs-6'>
<h2>Регистрация <nobr>{{ tm.registration_at }}</nobr></h2>
<p>Номер свидетельства № {{ tm.cert_id }}</p>
</li>
</ul>
<div class="trademark-detail-description row">
<div class="col-xs-6 trademark-detail-description-visual">
<h4>Изобразительный знак:</h3>
<img src="{{ tm.image_url }}"/>
</div>
<div class="col-xs-6 trademark-detail-text">
<h4>Правообладатель:</h3>
<p>{{ tm.owner }}</p>
</div>
</div>
{% include 'trademark/nice_block_busy.html' with keyword=tm.title nice_busy=tm.nices.all products_busy=tm.products.all %}
<h4>Данные ФИПС <small>Федеральной службы по интеллектуальной собственности</small></h4>
<small>{{ tm.source_url }}</small>
<div class="trademark-detail-fips-wrap">
<iframe class="frame" src="{{ tm.source_url }}"></iframe>
</div>
</div>
<div class="col-xs-12 col-sm-4">
<div class="trademark-search-block">
<h2>Попробуйте проверить другой товарный знак</h2>
{% include 'trademark/form.html' %}
</div>
{% if nice_available.count > 0 %}
{% include 'trademark/registration.html' with trademark_title=tm.title nice_available=nice_available nice_busy=tm.nices %}
{% endif %}
</div>
</div>
{% endblock %}

@ -7,6 +7,7 @@ from . import views
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name='index'), url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^results/(?P<slug>[\w-]+)/$', views.SearchDetailView.as_view(), name='search-detail'), url(r'^results/(?P<slug>[\w-]+)/$', views.SearchDetailView.as_view(), name='search-detail'),
url(r'^trademark/(?P<pk>[\w-]+)/$', views.TrademarkDetailView.as_view(), name='trademark-detail'),
url(r'^request/(?P<slug>[\w-]+)/$', views.Search.as_view(), name='search-detail'), url(r'^request/(?P<slug>[\w-]+)/$', views.Search.as_view(), name='search-detail'),
url(r'^request/$', views.Search.as_view(), name='search'), url(r'^request/$', views.Search.as_view(), name='search'),
) )

@ -29,19 +29,52 @@ class SearchDetailView(generic.DetailView):
nice_busy_ids = identity_results.values_list('nices__nice_id', flat=True).distinct() nice_busy_ids = identity_results.values_list('nices__nice_id', flat=True).distinct()
contains = self.get_object().searches.filter(similarity=100)[0] contains = self.get_object().searches.filter(similarity=100)[0]
contains_results = contains.results.all().exclude(id__in=identity_ids) contains_results = contains.results.filter(title__isnull=False).exclude(id__in=identity_ids)
context['contains'] = contains_results context['contains'] = contains_results[:30]
contains_ids = contains_results.values_list('id', flat=True) contains_ids = contains_results.values_list('id', flat=True)
similar = self.get_object().searches.filter(similarity=97)[0] similar = self.get_object().searches.filter(similarity=97)[0]
context['similar'] = similar.results.all().exclude(id__in=contains_ids | identity_ids) context['similar'] = similar.results.all().exclude(id__in=contains_ids | identity_ids)[:30]
context['nice_busy'] = Nice.objects.filter(nice_id__in=nice_busy_ids).order_by('nice_id') context['nice_busy'] = Nice.objects.filter(nice_id__in=nice_busy_ids).order_by('nice_id')
context['products_busy'] = Product.objects.filter(id__in=identity_results.values_list('products__id')).order_by('nice__nice_id')
context['nice_available'] = Nice.objects.filter(nice_id__in=[x for x in range(1,46) if x not in nice_busy_ids]).order_by('nice_id') context['nice_available'] = Nice.objects.filter(nice_id__in=[x for x in range(1,46) if x not in nice_busy_ids]).order_by('nice_id')
return context return context
class TrademarkDetailView(generic.DetailView):
model = Trademark
context_object_name = 'trademark'
template_name = 'trademark/trademark_detail.html'
view_url_name = 'trademark:trademark-detail'
def get_context_data(self, **kwargs):
context = super(TrademarkDetailView, self).get_context_data(**kwargs)
tm = self.get_object()
context['tm'] = tm
context['nice_available'] = Nice.objects.filter(nice_id__in=[x for x in range(1,46) if x not in tm.nices.values_list('nice_id', flat=True)]).order_by('nice_id')
# identity = self.get_object().searches.filter(similarity=146)[0]
# identity_results = identity.results.all()
# context['identity'] = identity_results
# identity_ids = identity_results.values_list('id', flat=True)
# nice_busy_ids = identity_results.values_list('nices__nice_id', flat=True).distinct()
# contains = self.get_object().searches.filter(similarity=100)[0]
# contains_results = contains.results.filter(title__isnull=False).exclude(id__in=identity_ids)
# context['contains'] = contains_results[:30]
# contains_ids = contains_results.values_list('id', flat=True)
# similar = self.get_object().searches.filter(similarity=97)[0]
# context['similar'] = similar.results.all().exclude(id__in=contains_ids | identity_ids)[:30]
# context['nice_busy'] = Nice.objects.filter(nice_id__in=nice_busy_ids).order_by('nice_id')
# context['products_busy'] = Product.objects.filter(id__in=identity_results.values_list('products__id')).order_by('nice__nice_id')
return context
class IndexView(generic.ListView): class IndexView(generic.ListView):
template_name = 'trademark/index.html' template_name = 'trademark/index.html'
context_object_name = 'trademarks' context_object_name = 'trademarks'

@ -0,0 +1,157 @@
$(function(){
// SearchForm
function send () {
var request = $("#trademark-search-request").val(),
$form = $('.trademark-search-form'),
$loading = $('.trademark-search-loading'),
$status_list = $('.trademark-search-loading-status'),
$count = $('#trademark-search-count'),
$title = $('#trademark-search-request-value'),
$sending = $('#trademark-search-sending'),
$identity = $('#trademark-search-identity'),
$contains = $('#trademark-search-contains'),
$similar = $('#trademark-search-similar'),
$wait = $('#trademark-search-wait'),
slug = '',
iteration = 0;
function update_status(data) {
var identity = data['identity'],
contains = data['contains'],
similar = data['similar'],
completed = identity['status'] == 'finished' && contains['status'] == 'finished' && similar['status'] == 'finished',
almost_completed = identity['status'] == 'finished' && contains['status'] == 'finished' && identity['count'] > 0,
show_link = identity['status'] == 'finished' || contains['status'] == 'finished' || similar['status'] == 'finished',
tm_url = '/ru/trademarks/online-search/results/' + slug + '/';
if(identity['status'] == 'finished') {
var count = identity['count'];
if(count > 0) {
$identity.text(GetNoun(count, 'Найден', 'Найдены', 'Найдено') + ' '+ count + ' ' + GetAdj(count, 'такой', 'таких') + ' ' + GetNoun(count, 'знак', 'знака', 'знаков')+ ' в ' + identity['nices'] + ' ' + GetNoun(identity['nices'], 'классе', 'классах', 'классах'));
} else {
$identity.text('Точно таких же знаков не найдено');
}
}
if(contains['status'] == 'finished') {
var count = contains['count'];
if(count > 0) {
$contains.text(GetNoun(count, 'Обнаружен', 'Обнаружены', 'Обнаружено') + ' ' + count + ' ' + GetAdj(count, 'похожий', 'похожих') + ' ' + GetNoun(count, 'знак', 'знака', 'знаков'));
} else {
$contains.text('Похожих знаков не обнаружено');
}
}
if(similar['status'] == 'finished') {
var count = similar['count'];
if(count > 0) {
$similar.text(GetNoun(count, 'Подобран', 'Подобраны', 'Подобрано') + ' ' + count + ' ' + GetAdj(count, 'производный', 'производных') + ' ' + GetNoun(count, 'знак', 'знака', 'знаков'));
} else {
$similar.text('Не удалось подобрать производных знаков');
}
}
if(iteration > 3) {
$wait.show(500);
}
if(show_link && iteration > 5) {
var href = ''
$wait.html('<a href="' + tm_url + '">Остановить поиск и перейти к результатам</a>');
} else {
console.log(iteration);
}
if(completed || almost_completed) {
yaCounter950321.reachGoal('TrademarkSearchResults');
ga('send', 'event', 'TrademarkSearch', 'results', document.title);
document.location.href = tm_url;
} else {
iteration += 1;
setTimeout(function () {
get_status(slug);
}, 10000);
}
}
function get_status(slug) {
try {
$.get("/ru/trademarks/online-search/request/" + slug + "/").done(function(data) {
update_status(data);
});
} catch (err) {
setTimeout(function () {
get_status(slug);
}, 5000);
}
}
yaCounter950321.reachGoal('TrademarkSearchClick');
ga('send', 'event', 'TrademarkSearch', 'click', document.title);
// Show Loading Block
$title.text(request);
$form.hide();
$loading.show();
$sending.show();
$.post("/ru/trademarks/online-search/request/",
{ 'keyword': request}).done(function(data) {
var tm_count = Math.floor(Math.random() * (3000000 - 1000000) + 1000000);
$('.trademark-search-count').text(tm_count.toLocaleString() + ' знаков')
$count.show(500);
$identity.delay(3000).show(500);
$contains.delay(6000).show(500);
$similar.delay(12000).show(500);
slug = data['slug'];
update_status(data);
})
.fail(function(data) {
console.log( "error " );
console.log(data);
})
.always(function(data) {
console.log( "finished" );
console.log(data);
$sending.hide()
});
}
$('#trademark-search-example').click(function(event) {
event.preventDefault();
$("#trademark-search-request").val('Yandex');
});
$('#trademark-search-request').keypress(function (e) {
if (e.which == 13) {
send();
return false; //<---- Add this line
}
});
$('#trademark-search-submit').click(function(){
send();
});
// Results
$('.trademark-search-show-products').each(function() {
var product_id = $(this).attr('product-id')
$(this).click(function () {
var $list = $('');
$('.trademark-search-nice-busy-products[product-id=' + product_id + ']').slideToggle('slow');
});
});
$('.trademark-search-result').click(function() {
var tm_id = $(this).attr('trademark-id');
document.location.href = '/ru/trademarks/online-search/trademark/' + tm_id + '/';
});
});

@ -89,6 +89,22 @@
margin-left: -15px; margin-left: -15px;
margin-top: 10px; margin-top: 10px;
.trademark-search-nice-busy-product {
margin-top: 10px;
}
.trademark-search-nice-busy-products {
font-size: 11px;
margin-top: 5px;
li {
margin-bottom: 5px;
padding-left: 0;
}
}
.description { .description {
margin: 5px 0; margin: 5px 0;
} }
@ -206,3 +222,36 @@
-webkit-transform: scaleY(1.0); -webkit-transform: scaleY(1.0);
} }
} }
// Trademark detail
.trademark-detail-fips-wrap { width: 100%; padding: 0; overflow: hidden; float: left;
.frame { width: 120%; height: 900px; border: 1px solid black}
.frame {
// zoom: 0.25;
-moz-transform: scale(0.8);
-moz-transform-origin: 0 0;
-o-transform: scale(0.8);
-o-transform-origin: 0 0;
-webkit-transform: scale(0.8);
-webkit-transform-origin: 0 0;
}
}
.trademark-detail-arrow {
font-size: 40px;
}
.trademark-detail-description {
.trademark-detail-description-visual {
img {
width: 100%;
}
}
}
Loading…
Cancel
Save