parent
8e9fbcc0b6
commit
ef6b5ba86f
36 changed files with 1377 additions and 548 deletions
@ -0,0 +1,136 @@ |
||||
var trademarkSearchFilter = []; |
||||
|
||||
var TrademarkSearch = (function(searchContainer){ |
||||
function send () { |
||||
var request = $(searchContainer + " .trademark-search-request").val(), |
||||
$form = $(searchContainer + ' .trademark-search-form'), |
||||
$loading = $(searchContainer + ' .trademark-search-loading'), |
||||
$status_list = $(searchContainer + ' .trademark-search-loading-status'), |
||||
$count = $(searchContainer + ' .trademark-search-count'), |
||||
$title = $(searchContainer + ' .trademark-search-request-value'), |
||||
$sending = $(searchContainer + ' .trademark-search-sending'), |
||||
$identity = $(searchContainer + ' .trademark-search-identity'), |
||||
$contains = $(searchContainer + ' .trademark-search-contains'), |
||||
$similar = $(searchContainer + ' .trademark-search-similar'), |
||||
$wait = $(searchContainer + ' .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 { |
||||
|
||||
} |
||||
|
||||
if(completed || almost_completed) { |
||||
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); |
||||
} |
||||
} |
||||
|
||||
// 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); |
||||
$(searchContainer + ' .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) { |
||||
|
||||
}) |
||||
.always(function(data) { |
||||
|
||||
$sending.hide() |
||||
}); |
||||
} |
||||
|
||||
$(searchContainer + ' .trademark-search-example').click(function(event) { |
||||
var keyword = $(searchContainer + ' .trademark-search-example').text(); |
||||
|
||||
event.preventDefault(); |
||||
$(searchContainer + " .trademark-search-request").val(keyword); |
||||
}); |
||||
|
||||
$(searchContainer + ' .trademark-search-request').keypress(function (e) { |
||||
if (e.which == 13) { |
||||
send(); |
||||
return false; //<---- Add this line
|
||||
} |
||||
}); |
||||
$(searchContainer + ' .trademark-search-submit').click(function(){ |
||||
send(); |
||||
}); |
||||
}); |
||||
|
||||
|
||||
@ -0,0 +1,51 @@ |
||||
|
||||
angular.module('zuykov') |
||||
|
||||
.controller('ModalTrademarkSearchCtrl', ['$scope', '$modal', function ($scope, $modal) { |
||||
|
||||
$scope.nice = nicesRu; |
||||
$scope.classes_values = trademarkSearchFilter; |
||||
$scope.animationsEnabled = true; |
||||
|
||||
|
||||
$scope.open = function (form_id) { |
||||
var modalInstance = $modal.open({ |
||||
animation: $scope.animationsEnabled, |
||||
templateUrl: 'modalTrademarkSearchTemplate.html', |
||||
controller: 'ModalTrademarkSearchInstanceCtrl', |
||||
windowClass: 'trademark-search-modal' |
||||
}); |
||||
|
||||
modalInstance.result.then(function (selectedItem) { |
||||
|
||||
console.log('clooosed'); |
||||
$scope.classes_values = trademarkSearchFilter; |
||||
}); |
||||
}; |
||||
|
||||
$scope.toggleAnimation = function () { |
||||
$scope.animationsEnabled = !$scope.animationsEnabled; |
||||
}; |
||||
|
||||
}]) |
||||
|
||||
// Please note that $modalInstance represents a modal window (instance) dependency.
|
||||
// It is not the same as the $modal service used above.
|
||||
.controller('ModalTrademarkSearchInstanceCtrl', ['$scope', '$modalInstance', function ($scope, $modalInstance) { |
||||
$scope.nice = nicesRu; |
||||
$scope.categories = nicesCategories; |
||||
$scope.GetNoun = GetNoun; |
||||
|
||||
|
||||
$scope.ok = function () { |
||||
trademarkSearchFilter = $scope.classes_values; |
||||
|
||||
searchResults.expand(); |
||||
|
||||
$modalInstance.close('params'); |
||||
}; |
||||
|
||||
$scope.cancel = function () { |
||||
$modalInstance.dismiss('cancel'); |
||||
}; |
||||
}]); |
||||
@ -0,0 +1,565 @@ |
||||
var nicesRu = [ |
||||
{ |
||||
id: 1, |
||||
title: 'Химические продукты', |
||||
description: 'Класс включает, в основном, химические продукты, предназначенные для использования в промышленных, научных целях и сельском хозяйстве, в том числе входящие в состав товаров, относящихся к другим классам.', |
||||
products: [ |
||||
'Химические продукты, предназначенные для использования в промышленных, научных целях, в фотографии, сельском хозяйстве, садоводстве и лесоводстве', |
||||
'Необработанные синтетические смолы, необработанные пластические материалы', |
||||
'Удобрения', |
||||
'Составы для тушения огня', |
||||
'Препараты для закалки и пайки металлов', |
||||
'Препараты для консервирования пищевых продуктов', |
||||
'Дубильные вещества', |
||||
'Клеящие вещества для промышленных целей' |
||||
] |
||||
}, |
||||
{ |
||||
id: 2, |
||||
title: 'Краски, олифы, лаки', |
||||
description: 'Класс включает, в основном, краски, красящие вещества и защитные средства от коррозии.', |
||||
products: [ |
||||
'Краски, олифы, лаки', |
||||
'Защитные средства, предохраняющие металлы от коррозии и древесину от разрушения', |
||||
'Красящие вещества', |
||||
'Протравы', |
||||
'Необработанные природные смолы', |
||||
'Листовые и порошкообразные металлы, используемые для художественно-декоративных целей и художественной печати' |
||||
] |
||||
}, |
||||
{ |
||||
id: 3, |
||||
title: 'Препараты для чистки, парфюмерия и косметика', |
||||
description: 'Класс включает, в основном, препараты для чистки и парфюмерно-косметические товары.', |
||||
products: [ |
||||
'Препараты для отбеливания и прочие вещества для стирки', |
||||
'Препараты для чистки, полирования, обезжиривания и абразивной обработки', |
||||
'Мыла', |
||||
'Парфюмерные изделия, эфирные масла, косметика, лосьоны для волос', |
||||
'Зубные порошки и пасты' |
||||
] |
||||
}, |
||||
{ |
||||
id: 4, |
||||
title: 'Технические масла, смазки, топлива', |
||||
description: 'Класс включает, в основном, технические масла и смазки, топлива и осветительные материалы.', |
||||
products: [ |
||||
'Технические масла и смазки', |
||||
'Смазочные материалы', |
||||
'Составы для поглощения, смачивания и связывания пыли', |
||||
'Топлива (в том числе моторные бензины) и осветительные материалы', |
||||
'Фитили и свечи для освещения' |
||||
] |
||||
}, |
||||
{ |
||||
id: 5, |
||||
title: 'Фармацевтические препараты', |
||||
description: 'Класс включает, в основном, фармацевтические препараты и прочие препараты для медицинских целей.', |
||||
products: [ |
||||
'Фармацевтические и ветеринарные препараты', |
||||
'Гигиенические препараты для медицинских целей', |
||||
'Диетическое питание и вещества для медицинских или ветеринарных целей, детское питание', |
||||
'Пищевые добавки для человека и животных', |
||||
'Пластыри, перевязочные материалы', |
||||
'Материалы для пломбирования зубов и изготовления зубных слепков', |
||||
'Дезинфицирующие средства', |
||||
'Препараты для уничтожения вредных животных', |
||||
'Фунгициды, гербициды' |
||||
] |
||||
}, |
||||
{ |
||||
id: 6, |
||||
title: 'Обычные металлы и сплавы', |
||||
description: 'Класс включает, в основном, необработанные и частично обработанные обычные металлы и простые изделия из них.', |
||||
products: [ |
||||
'Обычные металлы и их сплавы', |
||||
'Металлические строительные материалы', |
||||
'Передвижные металлические конструкции и сооружения', |
||||
'Металлические материалы для рельсовых путей', |
||||
'Металлические тросы и проволока [неэлектрические]', |
||||
'Скобяные и замочные изделия', |
||||
'Металлические трубы', |
||||
'Сейфы', |
||||
'Изделия из обычных металлов, не относящиеся к другим классам', |
||||
'Руды' |
||||
] |
||||
}, |
||||
{ |
||||
id: 7, |
||||
title: 'Машины, станки и двигатели', |
||||
description: 'Класс включает, в основном, машины, станки и двигатели.', |
||||
products: [ |
||||
'Машины и станки', |
||||
'Двигатели (за исключением предназначенных для наземных транспортных средств)', |
||||
'Соединения и элементы передач (за исключением предназначенных для наземных транспортных средств)', |
||||
'Сельскохозяйственные орудия, иные чем орудия с ручным управлением', |
||||
'Инкубаторы', |
||||
'Торговые автоматы' |
||||
] |
||||
}, |
||||
{ |
||||
id: 8, |
||||
title: 'Ручные инструмены', |
||||
description: 'Класс включает, в основном, ручные инструменты, используемые как орудия труда в соответствующих профессиях.', |
||||
products: [ |
||||
'Ручные орудия и инструменты', |
||||
'Ножевые изделия, вилки и ложки', |
||||
'Холодное оружие', |
||||
'Бритвы' |
||||
] |
||||
}, |
||||
{ |
||||
id: 9, |
||||
title: 'Приборы, инструменты, оборудование', |
||||
description: 'Класс включает в себя приборы, программное обеспечение, инструменты и оборудование.', |
||||
products: [ |
||||
'Приборы и инструменты научные, морские, геодезические, фотографические, кинематографические, оптические, для взвешивания, измерения, сигнализации, контроля (проверки), спасания и обучения', |
||||
'Приборы и инструменты для передачи, распределения, трансформации, накопления, регулирования или управления электричеством', |
||||
'Аппаратура для записи, передачи, воспроизведения звука или изображений', |
||||
'Магнитные носители информации, диски звукозаписи', |
||||
'Компакт-диски, DVD и другие цифровые носители информации', |
||||
'Механизмы для аппаратов с предварительной оплатой', |
||||
'Кассовые аппараты, счетные машины, оборудование для обработки информации и компьютеры', |
||||
'Программное обеспечение', |
||||
'Оборудование для тушения огня' |
||||
] |
||||
}, |
||||
{ |
||||
id: 10, |
||||
title: 'Медицинские приборы и инструменты', |
||||
description: 'Класс включает, в основном, медицинские приборы, инструменты и изделия.', |
||||
products: [ |
||||
'Приборы и инструменты хирургические, медицинские, стоматологические и ветеринарные', |
||||
'Протезы конечностей, глазные и зубные протезы', |
||||
'Ортопедические изделия', |
||||
'Материалы для наложения швов' |
||||
] |
||||
}, |
||||
{ |
||||
id: 11, |
||||
title: 'Устройства для получения тепла', |
||||
description: 'Устройства для освещения, нагрева, получения пара, тепловой обработки пищевых продуктов, для охлаждения, сушки, вентиляции, водораспределительные и санитарно-технические.', |
||||
products: [ |
||||
|
||||
] |
||||
}, |
||||
{ |
||||
id: 12, |
||||
title: 'Транспортные средства', |
||||
description: 'Аппараты, перемещающиеся по земле, воде и воздуху', |
||||
products: [ |
||||
|
||||
] |
||||
}, |
||||
{ |
||||
id: 13, |
||||
title: 'Огнестрельное оружие и пиротехнические средства', |
||||
description: '', |
||||
products: [ |
||||
'Огнестрельное оружие', |
||||
'Боеприпасы и снаряды', |
||||
'Взрывчатые вещества', |
||||
'Фейерверки' |
||||
] |
||||
}, |
||||
{ |
||||
id: 14, |
||||
title: 'Благородные металлы и их сплавы, изделия из них', |
||||
description: 'Класс включает, главным образом, благородные металлы, изделия из них, не включенные в другие классы, в основном, ювелирные изделия, бижутерию и часы.', |
||||
products: [ |
||||
'Благородные металлы и их сплавы, изделия или покрытия из них, не относящиеся к другим классам', |
||||
'Ювелирные изделия, бижутерия, драгоценные камни', |
||||
'Часы и прочие хронометрические приборы' |
||||
] |
||||
}, |
||||
{ |
||||
id: 15, |
||||
title: 'Музыкальные инструменты', |
||||
description: '', |
||||
products: [ |
||||
'Механические пианино и их принадлежности', |
||||
'Музыкальные шкатулки', |
||||
'Электрические и электронные музыкальные инструменты' |
||||
] |
||||
}, |
||||
{ |
||||
id: 16, |
||||
title: 'Бумага и изделия из бумаги', |
||||
description: 'Класс включает, в основном, бумагу, изделия из бумаги и конторские принадлежности.', |
||||
products: [ |
||||
'Бумага, картон и изделия из них, не относящиеся к другим классам', |
||||
'Печатная продукция', |
||||
'Материалы для переплетных работ', |
||||
'Фотоснимки', |
||||
'Писчебумажные товары', |
||||
'Клейкие вещества для канцелярских и бытовых целей', |
||||
'Принадлежности для художников', |
||||
'Кисти', |
||||
'Пишущие машины и конторские принадлежности (за исключением мебели)', |
||||
'Учебные материалы и наглядные пособия (за исключением аппаратуры)', |
||||
'Пластмассовые материалы для упаковки (не относящиеся к другим классам)', |
||||
'Шрифты', |
||||
'Клише типографские' |
||||
] |
||||
}, |
||||
{ |
||||
id: 17, |
||||
title: 'Резина, асбест, пластмассы', |
||||
description: 'Класс включает, в основном, электро-, тепло- и звукоизоляционные материалы и частично обработанные пластмассы в виде листов, плиток, пластин или прутков для промышленных целей.', |
||||
products: [ |
||||
'Каучук, резина, гуттаперча, асбест, слюда и изделия из этих материалов, не относящиеся к другим классам', |
||||
'Изделия из частично обработанных пластмасс', |
||||
'Материалы для конопачения, уплотнения и изоляции', |
||||
'Неметаллические гибкие трубы' |
||||
] |
||||
}, |
||||
{ |
||||
id: 18, |
||||
title: 'Кожа и имитация кожи', |
||||
description: 'Класс включает, в основном, кожу, имитацию кожи, дорожные принадлежности, не относящиеся к другим классам, и шорные изделия.', |
||||
products: [ |
||||
'Кожа и имитация кожи, изделия из них, не относящиеся к другим классам', |
||||
'Шкуры животных', |
||||
'Дорожные сундуки, чемоданы', |
||||
'Зонты от дождя и солнца, трости', |
||||
'Хлысты, кнуты, конская сбруя и шорные изделия' |
||||
] |
||||
}, |
||||
{ |
||||
id: 19, |
||||
title: 'Неметаллические строительные материалы', |
||||
description: 'Класс включает, в основном, неметаллические строительные материалы.', |
||||
products: [ |
||||
'Неметаллические строительные материалы', |
||||
'Неметаллические жесткие трубы для строительных целей', |
||||
'Асфальт, смолы и битум', |
||||
'Неметаллические передвижные конструкции и сооружения', |
||||
'Неметаллические памятники' |
||||
] |
||||
}, |
||||
{ |
||||
id: 20, |
||||
title: 'Мебель и другие изделия', |
||||
description: 'Класс включает, в основном, мебель и ее части и изделия из пластмасс, не относящиеся к другим классам.', |
||||
products: [ |
||||
'Мебель, зеркала, обрамления для картин и т.п.', |
||||
'Металлическая мебель и мебель для кемпинга', |
||||
'Постельные принадлежности (например, матрацы, матрацы пружинные, подушки)', |
||||
'Зеркала, в том числе для мебели и туалетные', |
||||
'Пластины с регистрационными номерами неметаллические', |
||||
'Почтовые ящики (за исключением ящиков, изготовленных из металла или камня)' |
||||
] |
||||
}, |
||||
{ |
||||
id: 21, |
||||
title: 'Домашняя и кухонная утварь', |
||||
description: 'Класс включает, в основном, малогабаритные, приводимые в действие вручную домашние или кухонные приспособления, устройства и утварь, а также туалетные принадлежности, изделия из стекла и фарфора.', |
||||
products: [ |
||||
'Домашняя или кухонная утварь и посуда', |
||||
'Расчески и губки', |
||||
'Щетки (за исключением кистей)', |
||||
'Материалы для щеточных изделий', |
||||
'Приспособления для чистки и уборки', |
||||
'Мочалки металлические', |
||||
'Необработанное или частично обработанное стекло (за исключением строительного стекла)', |
||||
'Изделия из стекла, фарфора и фаянса, не относящиеся к другим классам' |
||||
] |
||||
}, |
||||
{ |
||||
id: 22, |
||||
title: 'Верёвочно-канатные изделия', |
||||
description: 'Класс включает в основном веревочно-канатные изделия и изделия из парусины, набивочные материалы и текстильное волокнистое сырье.', |
||||
products: [ |
||||
'Канаты, веревки, бечевки, сети, палатки, навесы, брезент, паруса и мешки, не относящиеся к другим классам', |
||||
'Набивочные материалы (за исключением из резиновых и пластических материалов)', |
||||
'Текстильное волокнистое сырье' |
||||
] |
||||
}, |
||||
{ |
||||
id: 23, |
||||
title: 'Нити текстильные и пряжа', |
||||
description: '', |
||||
products: [ |
||||
|
||||
] |
||||
}, |
||||
{ |
||||
id: 24, |
||||
title: 'Ткани, одеяла, покрывала и скатерти', |
||||
description: 'Класс включает, в основном, ткани, одеяла, покрывала и скатерти.', |
||||
products: [ |
||||
'Ткани и текстильные изделия, не относящиеся к другим классам, покрывала и скатерти', |
||||
'Одеяла' |
||||
] |
||||
}, |
||||
{ |
||||
id: 25, |
||||
title: 'Одежда, обувь, головные уборы', |
||||
description: '', |
||||
products: [ |
||||
|
||||
] |
||||
}, |
||||
{ |
||||
id: 26, |
||||
title: 'Галантерейные и басонные изделия', |
||||
description: 'Класс включает, в основном, галантерейные и басонные изделия.', |
||||
products: [ |
||||
'Кружева и вышитые изделия, тесьма и ленты', |
||||
'Пуговицы, кнопки, крючки и блочки, булавки и иглы', |
||||
'Искусственные цветы' |
||||
] |
||||
}, |
||||
{ |
||||
id: 27, |
||||
title: 'Покрытия для полов', |
||||
description: 'Класс включает, в основном, изделия, предназначенные для покрытия готовых полов или стен.', |
||||
products: [ |
||||
'Ковры, циновки, маты, линолеум и прочие покрытия для полов', |
||||
'Стенные обои и обивочные материалы (нетекстильные)' |
||||
] |
||||
}, |
||||
{ |
||||
id: 28, |
||||
title: 'Игрушки и спортивные товары', |
||||
description: '', |
||||
products: [ |
||||
'Игры, игрушки', |
||||
'Гимнастические и спортивные товары, не относящиеся к другим классам', |
||||
'Елочные украшения' |
||||
] |
||||
}, |
||||
{ |
||||
id: 29, |
||||
title: 'Продукты животного происхождения', |
||||
description: 'Класс включает, в основном, продовольственные товары животного происхождения, а также овощи и садово-огородные продукты, подготовленные для употребления или консервирования.', |
||||
products: [ |
||||
'Мясо, рыба, птица и дичь', |
||||
'Мясные экстракты', |
||||
'Овощи и фрукты консервированные, сушеные и подвергнутые тепловой обработке', |
||||
'Желе, варенье, компоты', |
||||
'Яйца, молоко и молочные продукты', |
||||
'Масла и жиры пищевые' |
||||
] |
||||
}, |
||||
{ |
||||
id: 30, |
||||
title: 'Растительные пищевые продукты', |
||||
description: 'Класс включает, в основном, растительные пищевые продукты, подготовленные для потребления или консервирования, а также вспомогательные добавки, предназначенные для улучшения вкусовых качеств пищевых продуктов', |
||||
products: [ |
||||
'Кофе, чай, какао, сахар, рис, тапиока (маниока), саго, заменители кофе', |
||||
'Мука и зерновые продукты, хлебобулочные изделия, кондитерские изделия, мороженое', |
||||
'Мед, сироп из патоки', |
||||
'Дрожжи, пекарные порошки', |
||||
'Соль, горчица', |
||||
'Уксус, приправы', |
||||
'Пряности', |
||||
'Пищевой лед' |
||||
] |
||||
}, |
||||
{ |
||||
id: 31, |
||||
title: 'Продукты земледелия и лесного хозяйства', |
||||
description: 'Класс включает, в основном, продукты земледелия и лесного хозяйства, живых животных и живые растения, не подвергнутые никакой обработке для потребления, а также корма для животных.', |
||||
products: [ |
||||
'Зерно и сельскохозяйственные, садово-огородные и лесные продукты, не относящиеся к другим классам', |
||||
'Живые животные', |
||||
'Свежие фрукты и овощи', |
||||
'Семена', |
||||
'Живые растения и цветы', |
||||
'Корма для животных', |
||||
'Солод' |
||||
] |
||||
}, |
||||
{ |
||||
id: 32, |
||||
title: 'Безалкогольные напитки и пиво', |
||||
description: 'Класс включает, в основном, безалкогольные напитки, а также пиво.', |
||||
products: [ |
||||
'Пиво', |
||||
'Минеральные и газированные воды и прочие безалкогольные напитки', |
||||
'Фруктовые напитки и фруктовые соки', |
||||
'Сиропы и прочие составы для изготовления напитков' |
||||
] |
||||
}, |
||||
{ |
||||
id: 33, |
||||
title: 'Алкогольные напитки (за исключением пива)', |
||||
description: '', |
||||
products: [ |
||||
|
||||
] |
||||
}, |
||||
{ |
||||
id: 34, |
||||
title: 'Табак и курительные принадлежности', |
||||
description: '', |
||||
products: [ |
||||
'Табак', |
||||
'Курительные принадлежности', |
||||
'Спички', |
||||
] |
||||
}, |
||||
{ |
||||
id: 35, |
||||
title: 'Помощь в управлении бизнесом', |
||||
description: 'Класс включает, в основном, услуги, оказываемые лицами или организациями, основной целью которых является: (1) помощь в эксплуатации или управлении коммерческого предприятия, или (2) помощь в управлении делами или в коммерческой деятельности промышленного или торгового предприятия, а также услуги, оказываемые рекламными учреждениями, обеспечивающими, главным образом, связь с потребителями и оповещение или объявление с помощью любых средств информации о всевозможных товарах и видах услуг.', |
||||
products: [ |
||||
'Реклама', |
||||
'Менеджмент в сфере бизнеса', |
||||
'Административная деятельность в сфере бизнеса', |
||||
'Офисная служба' |
||||
] |
||||
}, |
||||
{ |
||||
id: 36, |
||||
title: 'Финансовые услуги', |
||||
description: 'Класс включает, в основном, услуги по денежно-финансовым операциям и услуги, связанные со всеми видами страховых контрактов.', |
||||
products: [ |
||||
'Страхование', |
||||
'Финансовая деятельность', |
||||
'Кредитно-денежные операции', |
||||
'Операции с недвижимостью', |
||||
] |
||||
}, |
||||
{ |
||||
id: 37, |
||||
title: 'Строительство и ремонт', |
||||
description: 'Класс включает, в основном, услуги, оказываемые подрядчиками или субподрядчиками по строительству или изготовлению капитальных зданий, а также услуги частных лиц или организаций по восстановлению объектов в их первоначальном виде или их сохранению без изменения их физических или химических характеристик.', |
||||
products: [ |
||||
'Строительство', |
||||
'Ремонт', |
||||
'Установка оборудования' |
||||
] |
||||
}, |
||||
{ |
||||
id: 38, |
||||
title: 'Телекоммуникации', |
||||
description: 'Класс включает, в основном, услуги, дающие возможность, по меньшей мере, одному человеку установить связь с другим человеком с помощью сенсорных средств. Такие услуги позволяют: (1) одному человеку разговаривать с другим, (2) передавать сообщения от одного человека к другому, (3) предоставлять возможность устной и визуальной коммуникации одного человека с другим (радио и телевидение).', |
||||
products: [ |
||||
|
||||
] |
||||
}, |
||||
{ |
||||
id: 39, |
||||
title: 'Перевозка людей и товаров', |
||||
description: 'Класс включает, в основном, услуги, относящиеся к перевозке людей или товаров из одного места в другое (железнодорожным, автомобильным, водным, воздушным транспортом или по трубопроводу), и услуги, связанные с такой перевозкой, а также услуги по хранению товаров на складах или в других помещениях для предотвращения их повреждения или хищения.', |
||||
products: [ |
||||
'Транспортировка', |
||||
'Упаковка и хранение товаров', |
||||
'Организация путешествий', |
||||
] |
||||
}, |
||||
{ |
||||
id: 40, |
||||
title: 'Обработка материалов', |
||||
description: 'Класс включает, в основном, услуги, не относящиеся к другим классам и заключающиеся в механической или химической обработке или преобразовании предметов или органических или неорганических веществ. ', |
||||
products: [ |
||||
|
||||
] |
||||
}, |
||||
{ |
||||
id: 41, |
||||
title: 'Услуги обучения и развлекательные мероприятия', |
||||
description: 'Класс включает, в основном, услуги отдельных лиц или организаций по развитию умственных способностей людей или дрессировке животных, а также услуги, предназначенные для развлечения людей или организации досуга.', |
||||
products: [ |
||||
'Воспитание', |
||||
'Обеспечение учебного процесса', |
||||
'Развлечения', |
||||
'Организация спортивных и культурно-просветительных мероприятий' |
||||
] |
||||
}, |
||||
{ |
||||
id: 42, |
||||
title: 'Научные и технические услуги', |
||||
description: 'Класс включает, в основном, услуги, предоставляемые физическими лицами, индивидуально или коллективно, в отношении теоретических и практических аспектов сложных областей деятельности, такие услуги предоставляются специалистами в областях химии, физики, техники и программирования.', |
||||
products: [ |
||||
'Научные и технологические услуги и относящиеся к ним научные исследования и разработки', |
||||
'Услуги по промышленному анализу и научным исследованиям', |
||||
'Разработка и усовершенствование технического и программного обеспечения компьютеров' |
||||
] |
||||
}, |
||||
{ |
||||
id: 43, |
||||
title: 'Гостиницы, кейтеринг', |
||||
description: 'Класс включает, в основном, услуги, предоставляемые физическими лицами или учреждениями, целью которых является приготовление пищевых продуктов и напитков для употребления и оказание услуг по предоставлению мест и питания в гостиницах, пансионатах или других заведениях, предоставляющих временное проживание.', |
||||
products: [ |
||||
'Услуги по обеспечению пищевыми продуктами и напитками', |
||||
'Обеспечение временного проживания' |
||||
] |
||||
}, |
||||
{ |
||||
id: 44, |
||||
title: 'Медицинский и косметические услуги', |
||||
description: 'Класс включает, в основном, медицинский уход, услуги в области гигиены и косметики, оказываемые лицами или учреждениями людям и животным; услуги, относящиеся к областям сельского хозяйства, огородничества и лесоводства.', |
||||
products: [ |
||||
'Медицинские услуги', |
||||
'Ветеринарные услуги', |
||||
'Услуги в области гигиены и косметики для людей и животных', |
||||
'Услуги в области сельского хозяйства, огородничества и лесоводства' |
||||
] |
||||
}, |
||||
{ |
||||
id: 45, |
||||
title: 'Юридические услуги и службы безопасности', |
||||
description: '', |
||||
products: [ |
||||
'Услуги юридические', |
||||
'Службы безопасности для защиты имущества и индивидуальных лиц', |
||||
'Персональные и социальные услуги, оказываемые другим для удовлетворения потребностей индивидуальных лиц', |
||||
] |
||||
}, |
||||
]; |
||||
|
||||
var nicesCategories = [ |
||||
{ |
||||
id: 1, |
||||
title: 'Химические товары', |
||||
classes: [1, 2, 3, 4, 5] |
||||
}, |
||||
{ |
||||
id: 2, |
||||
title: 'Металлы и сплавы', |
||||
classes: [6, 14] |
||||
}, |
||||
{ |
||||
id: 3, |
||||
title: 'Машины и устройства', |
||||
classes: [7, 9, 11, 12] |
||||
}, |
||||
{ |
||||
id: 4, |
||||
title: 'Приборы и инструменты', |
||||
classes: [8, 10, 13, 15] |
||||
}, |
||||
{ |
||||
id: 5, |
||||
title: 'Продукты питания', |
||||
classes: [29, 30, 31] |
||||
}, |
||||
{ |
||||
id: 6, |
||||
title: 'Напитки и табак', |
||||
classes: [32, 33, 34] |
||||
}, |
||||
{ |
||||
id: 7, |
||||
title: 'Изделия и материалы', |
||||
classes: [16, 17, 18, 19] |
||||
}, |
||||
{ |
||||
id: 8, |
||||
title: 'Текстиль и одежда', |
||||
classes: [22, 23, 24, 25, 26, 27] |
||||
}, |
||||
{ |
||||
id: 9, |
||||
title: 'Товары для дома', |
||||
classes: [20, 21, 28] |
||||
}, |
||||
{ |
||||
id: 10, |
||||
title: 'Услуги', |
||||
classes: [35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45] |
||||
} |
||||
]; |
||||
@ -0,0 +1,71 @@ |
||||
|
||||
angular.module('zuykov') |
||||
|
||||
.controller('TrademarkSearchNiceCtrl', ['$scope', '$rootScope', function ($scope, $rootScope) { |
||||
|
||||
$scope.selectedCategory = 1; |
||||
|
||||
$scope.filterByCategory = function (nice_class) { |
||||
var category = $scope.categories[$scope.selectedCategory - 1]; |
||||
|
||||
return (category.classes.indexOf(nice_class.id) !== -1); |
||||
}; |
||||
|
||||
$scope.selectCategory = function (id) { |
||||
$scope.selectedCategory = id; |
||||
}; |
||||
|
||||
|
||||
$scope.setClasses = function () { |
||||
var classes = []; |
||||
|
||||
$(".service-trademarks-class-form form input[type=checkbox]:checked").prop('checked', false); |
||||
|
||||
for(var i in $scope.nice) { |
||||
var el = $scope.nice[i]; |
||||
|
||||
if(el.selected) { |
||||
classes.push(el.id); |
||||
$(".service-trademarks-class-form form input[value=" + el.id + "]").prop('checked', true); |
||||
} |
||||
} |
||||
$rootScope.classes_values = classes; |
||||
|
||||
$rootScope.classes = classes.length; |
||||
|
||||
$scope.countCategories(); |
||||
}; |
||||
|
||||
$scope.countCategories = function () { |
||||
for(var index in $scope.categories) { |
||||
var category = $scope.categories[index]; |
||||
|
||||
category.selected = []; |
||||
|
||||
for(var cl_i in category.classes) { |
||||
var class_el = $scope.nice[category.classes[cl_i]-1]; |
||||
|
||||
if(class_el.selected) { |
||||
category.selected.push(class_el.id); |
||||
} |
||||
} |
||||
} |
||||
}; |
||||
|
||||
|
||||
$scope.getClasses = function () { |
||||
var classes = $rootScope.classes_values; |
||||
|
||||
for(var i in classes) { |
||||
var class_id = classes[i]; |
||||
|
||||
$scope.nice[class_id-1].selected = true; |
||||
} |
||||
|
||||
$scope.countCategories(); |
||||
|
||||
$scope.setClasses(); |
||||
}; |
||||
|
||||
|
||||
}]); |
||||
@ -0,0 +1,85 @@ |
||||
// Results
|
||||
var TrademarkSearchResult = (function (resultContainer) { |
||||
function prepare_nice_products ($nice) { |
||||
var product_id = $nice.attr('product-id') |
||||
$nice.click(function () { |
||||
var $list = $(''); |
||||
|
||||
$('.trademark-search-nice-busy-products[product-id=' + product_id + ']').slideToggle('slow'); |
||||
}); |
||||
} |
||||
|
||||
function prepare_load_more ($container, display_classes) { |
||||
var results_count = $container.find(".load-more-result.filtered").size(), |
||||
showed = 6, |
||||
$this = $container, |
||||
$count = $container.find('.load-more-count'); |
||||
|
||||
function update_count() { |
||||
var count = results_count - showed; |
||||
|
||||
if(count > 0) { |
||||
$container.find('.load-more-li').css('display', 'block'); |
||||
$container.css('display', 'block'); |
||||
} else { |
||||
$container.find('.load-more-li').css('display', 'none'); |
||||
$container.css('display', 'none'); |
||||
} |
||||
|
||||
if($container.attr('list-type') == 'nices') { |
||||
$count.text(count + ' ' + GetNoun(count, 'класс', 'класса', 'классов')); |
||||
|
||||
if (count > 0) { |
||||
$container.parent().css('display', 'block'); |
||||
} else { |
||||
$container.parent().css('display', 'none'); |
||||
} |
||||
} else { |
||||
$count.text(count + ' ' + GetNoun(count, 'знак', 'знака', 'знаков')); |
||||
} |
||||
} |
||||
|
||||
function show_more() { |
||||
var display_value = 'inline-block'; |
||||
|
||||
if($container.attr('list-type') == 'nices') { |
||||
display_value = 'block' |
||||
} |
||||
|
||||
$container.find('.load-more-result.filtered:lt(' + showed + ')').css('display', display_value); |
||||
} |
||||
|
||||
show_more(); |
||||
update_count(); |
||||
$container.find('.load-more').click(function () { |
||||
showed = ( showed + 6 <= results_count) ? showed + 6 : results_count; |
||||
show_more(); |
||||
update_count(); |
||||
}); |
||||
} |
||||
|
||||
$(resultContainer + ' .trademark-search-show-products').each(function() { |
||||
prepare_nice_products($(this)); |
||||
}); |
||||
|
||||
function prepare_all_blocks () { |
||||
var display_css_classes = trademarkSearchFilter.length == 0 ? resultContainer + ' .load-more-result' : resultContainer + ' .c' + trademarkSearchFilter.join(', ' + resultContainer +' .c'); |
||||
|
||||
|
||||
$(resultContainer + ' .load-more').unbind('click'); |
||||
$(resultContainer + ' .load-more-result').css('display', 'none'); |
||||
$(resultContainer + ' .load-more-result').removeClass('filtered'); |
||||
$(display_css_classes).addClass('filtered'); |
||||
|
||||
$(resultContainer + ' .load-more-results').each(function () { |
||||
prepare_load_more($(this)); |
||||
}); |
||||
|
||||
} |
||||
|
||||
return { |
||||
expand: function () { |
||||
prepare_all_blocks(); |
||||
} |
||||
} |
||||
}); |
||||
@ -0,0 +1,33 @@ |
||||
|
||||
|
||||
|
||||
|
||||
// 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%; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,88 @@ |
||||
.trademark-search-loading { |
||||
display: none; |
||||
|
||||
border: 1px solid silver; |
||||
border-radius: 6px; |
||||
background: white; |
||||
margin-left: -14px; |
||||
margin-bottom: 5px; |
||||
|
||||
.trademark-search-loading-header { |
||||
padding: 9px 13px; |
||||
} |
||||
|
||||
ul { |
||||
margin-left: 14px; |
||||
|
||||
li { |
||||
margin-bottom: 3px; |
||||
display: none; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.block-hide-animation { |
||||
|
||||
opacity:0; |
||||
transition:opacity 0.5s linear; |
||||
} |
||||
|
||||
.block-show-animation { |
||||
visibility:visible; |
||||
opacity:1; |
||||
transition:opacity 1s linear; |
||||
} |
||||
|
||||
.spinner { |
||||
width: 24px; |
||||
height: 14px; |
||||
text-align: center; |
||||
font-size: 8px; |
||||
display: inline-block; |
||||
padding-top: 5px |
||||
} |
||||
|
||||
.spinner > div { |
||||
background-color: #333; |
||||
height: 100%; |
||||
width: 3px; |
||||
display: inline-block; |
||||
|
||||
-webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out; |
||||
animation: sk-stretchdelay 1.2s infinite ease-in-out; |
||||
} |
||||
|
||||
.spinner .rect2 { |
||||
-webkit-animation-delay: -1.1s; |
||||
animation-delay: -1.1s; |
||||
} |
||||
|
||||
.spinner .rect3 { |
||||
-webkit-animation-delay: -1.0s; |
||||
animation-delay: -1.0s; |
||||
} |
||||
|
||||
.spinner .rect4 { |
||||
-webkit-animation-delay: -0.9s; |
||||
animation-delay: -0.9s; |
||||
} |
||||
|
||||
.spinner .rect5 { |
||||
-webkit-animation-delay: -0.8s; |
||||
animation-delay: -0.8s; |
||||
} |
||||
|
||||
@-webkit-keyframes sk-stretchdelay { |
||||
0%, 40%, 100% { -webkit-transform: scaleY(0.4) } |
||||
20% { -webkit-transform: scaleY(1.0) } |
||||
} |
||||
|
||||
@keyframes sk-stretchdelay { |
||||
0%, 40%, 100% { |
||||
transform: scaleY(0.4); |
||||
-webkit-transform: scaleY(0.4); |
||||
} 20% { |
||||
transform: scaleY(1.0); |
||||
-webkit-transform: scaleY(1.0); |
||||
} |
||||
} |
||||
@ -0,0 +1,4 @@ |
||||
@import 'result.less'; |
||||
@import 'detail.less'; |
||||
@import 'loading.less'; |
||||
@import 'modal.less'; |
||||
@ -0,0 +1,5 @@ |
||||
.trademark-search-modal { |
||||
.modal-dialog { |
||||
width: 700px; |
||||
} |
||||
} |
||||
@ -1,11 +1,14 @@ |
||||
|
||||
|
||||
{% extends CMS_TEMPLATE %} |
||||
{% load i18n menu_tags cms_tags %} |
||||
|
||||
{% block content %} |
||||
<h4 class="header-menu-font"><span class="header-menu-services"><a href="{% page_url "main" %}">{% trans 'Our Services' %}</a></span> <span class="header-menu-contacts"><a href="{% page_url "about" %}">{% page_attribute "page_title" "about" %}</a></span></h4> |
||||
|
||||
{% block content_safe %} |
||||
<div class="app app-trademark span8"> |
||||
{% block trademark_content %} |
||||
<div class="app app-trademark span8 l-offset-bottom"> |
||||
{% block trademark_content %} |
||||
{% endblock %} |
||||
</div> |
||||
{% endblock content_safe %} |
||||
|
||||
<div class="background-line-pattern"></div> |
||||
{% static_placeholder 'footer-page-content-trademarks-online-search' %} |
||||
{% endblock content %} |
||||
|
||||
@ -0,0 +1,22 @@ |
||||
{% load i18n menu_tags cms_tags %} |
||||
|
||||
<ol class="list-unstyled list-inline breadcrumb" vocab="http://schema.org/" typeof="BreadcrumbList"> |
||||
<li property="itemListElement" typeof="ListItem"> |
||||
<a href="{% page_url "main" %}" property="item" typeof="WebPage"><span property="name">Главная страница</span></a> |
||||
<meta property="position" content="1"> |
||||
</li> |
||||
<li property="itemListElement" typeof="ListItem"> |
||||
<a href="{% page_url "trademarks" %}" property="item" typeof="WebPage"><span property="name">Товарные знаки</span></a> |
||||
<meta property="position" content="2"> |
||||
</li> |
||||
<li property="itemListElement" typeof="ListItem"> |
||||
{% if trademark %}<a href="{{ request.META.HTTP_REFERER }}" property="item" typeof="WebPage"><span property="name">Онлайн поиск</span></a>{% else %}<span property="name">Онлайн поиск</span>{% endif %} |
||||
<meta property="position" content="3"> |
||||
</li> |
||||
{% if trademark %} |
||||
<li property="itemListElement" typeof="ListItem"> |
||||
<span property="name">Товарный знак «{{ trademark }}»</span> |
||||
<meta property="position" content="4"> |
||||
</li> |
||||
{% endif %} |
||||
</ol> |
||||
@ -0,0 +1,88 @@ |
||||
{% load i18n menu_tags cms_tags %} |
||||
<div class="trademark-search-form" ng-controller="ModalTrademarkSearchCtrl"> |
||||
<script type="text/ng-template" id="modalTrademarkSearchTemplate.html"> |
||||
<div class="modal-body trademark-search-modal"> |
||||
<h1>Проверка товарного знака на регистрацию</h1> |
||||
<p>Каждый товарный знак регистрируется в отношении определённых товаров и услуг, распределенных по классам. Всего таких классов на сегодняшний день 45 (34 — товаров и 11 — услуг), они установлены Международной классификацией товаров и услуг для регистрации знаков (МКТУ).</p> |
||||
<p>Выберите классы в которых хотите проверить товарный знак.</p> |
||||
{% verbatim %} |
||||
<div class="nice" ng-controller="TrademarkSearchNiceCtrl"> |
||||
<div id="{{ tabs_list_id }}" ng-tabs class="nice-tabs tabs-plugin"> |
||||
{% endverbatim %} |
||||
<ul class="tabs-list list-unstyled list-inline"> |
||||
<li ng-tab-head="active"><a ng-click="$event.preventDefault()" href="#nice-catalog">{% trans 'Classes Catalog' %}</a></li> |
||||
<li ng-tab-head="active"><a ng-click="$event.preventDefault()" href="#nice-all">{% trans 'All Classes' %}</a></li> |
||||
</ul> |
||||
{% verbatim %} |
||||
|
||||
|
||||
<div class="nice-catalog tab-body" id="nice-catalog" ng-tab-body> |
||||
<div class="nice-categories"> |
||||
<ul class="list-unstyled list-inline"> |
||||
<li ng-repeat="category in categories track by category.id" ng-class="selectedCategory == category.id ? 'active' : ''"> |
||||
<button ng-click="selectCategory(category.id)" class="btn btn-link">{{ category.title }}</button> <span class="category_size badge" id="category_{{ category.id }}_label">{{ category.selected.length || '' }}</span> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
|
||||
<div class="nice-classes"> |
||||
<ul class="list-unstyled"> |
||||
<li ng-repeat="class in nice | filter:filterByCategory"> |
||||
<label for="class_{{ class.id }}"> |
||||
<input id="class_{{ class.id }}" type="checkbox" ng-model="class.selected" ng-change="setClasses()"/> |
||||
<button popover="{{ class.description }}" popover-title="{{ class.title }}" popover-trigger="mouseenter" popover-placement="bottom" class="btn btn-xs btn-default">{{ class.id }}</button> – {{ class.title }} |
||||
</label> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="nice-all tab-body" id="nice-all" ng-tab-body> |
||||
<ul class="list-unstyled list-inline"> |
||||
<li ng-repeat="class in nice"> |
||||
<label for="class_{{ class.id }}"> |
||||
<input id="class_{{ class.id }}" type="checkbox" ng-model="class.selected" ng-change="setClasses()"/> |
||||
<button popover="{{ class.description }}" popover-title="{{ class.title }}" popover-trigger="mouseenter" popover-placement="bottom" class="btn btn-xs btn-default">{{ class.id }}</button> |
||||
– {{ class.title }} |
||||
</label> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
{% endverbatim %} |
||||
|
||||
{% verbatim %} |
||||
<ul class="nice-selected list-unstyled list-inline"> |
||||
<li ng-repeat="id in classes_values"><span class="label label-default"><strong>{{ nice[id-1].id }}</strong> – {{ nice[id-1].title }}</span></li> |
||||
</ul> |
||||
|
||||
</div> |
||||
|
||||
|
||||
<div class="button-wrapper submit"> |
||||
<button class="form-button btn btn-primary" ng-click="ok()" value="Проверить в {{ classes }} классах">Проверить {{ classes == 0 ? 'во всех классах' : 'в ' + classes + GetNoun(classes, ' классе', ' классах', ' классах') }}</button> |
||||
{% endverbatim %} |
||||
<button class="btn btn-default pull-right" ng-click="cancel()">{% trans 'Cancel' %}</button> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
</script> |
||||
{% verbatim %} |
||||
<div ng-show="classes_values.length > 0"> |
||||
<p>Поиск происходит в {{ classes + GetNoun(classes, ' классе', ' классах', ' классах') }}</p> |
||||
<ul class="nice-selected list-unstyled list-inline"> |
||||
|
||||
<li ng-repeat="id in classes_values"><span class="label label-default"><strong>{{ nice[id-1].id }}</strong> – {{ nice[id-1].title }}</span></li> |
||||
</ul> |
||||
</div> |
||||
{% endverbatim %} |
||||
<div> |
||||
<button class="btn btn-primary btn-xs" ng-click="open();" value="">Расширенный поиск</button> — для того, чтобы уточнить классы МКТУ, регистрацию в которых хотите проверить. |
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
@ -1,194 +0,0 @@ |
||||
$(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) { |
||||
var keyword = $('#trademark-search-example').text(); |
||||
|
||||
event.preventDefault(); |
||||
$("#trademark-search-request").val(keyword); |
||||
}); |
||||
|
||||
$('#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'); |
||||
}); |
||||
}); |
||||
|
||||
$('.load-more-results').each(function () { |
||||
var results_count = $(this).find(".load-more-result").size(), |
||||
showed = 6, |
||||
$this = $(this), |
||||
$count = $(this).find('.load-more-count'); |
||||
|
||||
function update_count() { |
||||
var count = results_count - showed; |
||||
|
||||
if(count > 0) { |
||||
$this.find('.load-more-li').css('display', 'block'); |
||||
} else { |
||||
$this.find('.load-more-li').css('display', 'none'); |
||||
} |
||||
|
||||
if($this.attr('list-type') == 'nices') { |
||||
$count.text(count + ' ' + GetNoun(count, 'класс', 'класса', 'классов')); |
||||
} else { |
||||
$count.text(count + ' ' + GetNoun(count, 'знак', 'знака', 'знаков')); |
||||
} |
||||
|
||||
} |
||||
|
||||
function show_more() { |
||||
var display_value = 'inline-block' |
||||
if($this.attr('list-type') == 'nices') { |
||||
display_value = 'block' |
||||
} |
||||
|
||||
$this.find('.load-more-result:lt(' + showed + ')').css('display', display_value); |
||||
} |
||||
|
||||
show_more(); |
||||
update_count(); |
||||
$this.find('.load-more').click(function () { |
||||
showed = ( showed + 6 <= results_count) ? showed + 6 : results_count; |
||||
show_more(); |
||||
update_count(); |
||||
}); |
||||
}); |
||||
|
||||
|
||||
}); |
||||
@ -0,0 +1,66 @@ |
||||
{% load i18n %} |
||||
|
||||
{% verbatim %} |
||||
<div class="nice" ng-controller="NiceCtrl"> |
||||
<div id="{{ tabs_list_id }}" ng-tabs class="nice-tabs tabs-plugin"> |
||||
{% endverbatim %} |
||||
<ul class="tabs-list list-unstyled list-inline"> |
||||
<li ng-tab-head="active"><a ng-click="$event.preventDefault()" href="#nice-catalog">{% trans 'Classes Catalog' %}</a></li> |
||||
<li ng-tab-head="active"><a ng-click="$event.preventDefault()" href="#nice-all">{% trans 'All Classes' %}</a></li> |
||||
</ul> |
||||
{% verbatim %} |
||||
|
||||
|
||||
<div class="nice-catalog tab-body" id="nice-catalog" ng-tab-body> |
||||
<div class="nice-categories"> |
||||
<ul class="list-unstyled list-inline"> |
||||
<li ng-repeat="category in categories track by category.id" ng-class="selectedCategory == category.id ? 'active' : ''"> |
||||
<button ng-click="selectCategory(category.id)" class="btn btn-link">{{ category.title }}</button> <span class="category_size badge" id="category_{{ category.id }}_label">{{ category.selected.length || '' }}</span> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
|
||||
<div class="nice-classes"> |
||||
<ul class="list-unstyled"> |
||||
<li ng-repeat="class in nice | filter:filterByCategory"> |
||||
<label for="class_{{ class.id }}"> |
||||
<input id="class_{{ class.id }}" type="checkbox" ng-model="class.selected" ng-change="setClasses()"/> |
||||
<strong>{{ class.id }}</strong> – {{ class.title }} |
||||
<button ng-show="class.description.length > 0" popover="{{ class.description }}" popover-title="{{ class.title }}" popover-trigger="mouseenter" popover-placement="bottom" class="btn btn-xs btn-default">···</button> |
||||
</label> |
||||
|
||||
|
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="nice-all tab-body" id="nice-all" ng-tab-body> |
||||
<ul class="list-unstyled list-inline"> |
||||
<li ng-repeat="class in nice"> |
||||
<label for="class_{{ class.id }}"> |
||||
<input id="class_{{ class.id }}" type="checkbox" ng-model="class.selected" ng-change="setClasses()"/> |
||||
<strong>{{ class.id }}</strong> – {{ class.title }} |
||||
<button ng-show="class.description.length > 0" popover="{{ class.description }}" popover-title="{{ class.title }}" popover-trigger="mouseenter" popover-placement="bottom" class="btn btn-xs btn-default">···</button> |
||||
</label> |
||||
|
||||
|
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
{% endverbatim %} |
||||
|
||||
{% if request.LANGUAGE_CODE == 'ru' %} |
||||
{% verbatim %}<h5 ng-show="classes_values.length > 0">{{ GetNoun(classes, 'Выбран', 'Выбраны', 'Выбрано') }} {{ classes }} {{ GetNoun(classes, 'класс', 'класса', 'классов') }}</h5>{% endverbatim %} |
||||
{% else %} |
||||
{% verbatim %}<h5 ng-show="classes_values.length > 0">Selected {{ classes }} {{ GetNoun(classes, 'сlass', 'сlasses', 'сlasses') }}</h5>{% endverbatim %} |
||||
{% endif %} |
||||
|
||||
{% verbatim %} |
||||
<ul class="nice-selected list-unstyled list-inline"> |
||||
<li ng-repeat="id in classes_values"><span class="label label-default"><strong>{{ nice[id-1].id }}</strong> – {{ nice[id-1].title }}</span></li> |
||||
</ul> |
||||
|
||||
</div> |
||||
{% endverbatim %} |
||||
Loading…
Reference in new issue