Удаление помойки из прошлого

This commit is contained in:
Konstantin
2026-05-30 11:23:38 +03:00
parent a7cbc801a4
commit 640af8f4d9
99 changed files with 0 additions and 40804 deletions
@@ -1,86 +0,0 @@
<?php
class ControllerExtensionTotalLightshopsets extends Controller {
private $error = array();
public function index() {
$this->load->language('extension/total/lightshopsets');
$this->document->setTitle($this->language->get('heading_title'));
$this->load->model('setting/setting');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
$this->model_setting_setting->editSetting('total_lightshopsets', $this->request->post);
$this->session->data['success'] = $this->language->get('text_success');
$this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=total', true));
}
$data['heading_title'] = $this->language->get('heading_title');
$data['text_edit'] = $this->language->get('text_edit');
$data['text_enabled'] = $this->language->get('text_enabled');
$data['text_disabled'] = $this->language->get('text_disabled');
$data['entry_status'] = $this->language->get('entry_status');
$data['entry_sort_order'] = $this->language->get('entry_sort_order');
$data['button_save'] = $this->language->get('button_save');
$data['button_cancel'] = $this->language->get('button_cancel');
if (isset($this->error['warning'])) {
$data['error_warning'] = $this->error['warning'];
} else {
$data['error_warning'] = '';
}
$data['breadcrumbs'] = array();
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
);
$data['breadcrumbs'][] = array(
'text' => $this->language->get('text_extension'),
'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=total', true)
);
$data['breadcrumbs'][] = array(
'text' => $this->language->get('heading_title'),
'href' => $this->url->link('extension/total/lightshopsets', 'user_token=' . $this->session->data['user_token'], true)
);
$data['action'] = $this->url->link('extension/total/lightshopsets', 'user_token=' . $this->session->data['user_token'], true);
$data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=total', true);
if (isset($this->request->post['total_lightshopsets_status'])) {
$data['total_lightshopsets_status'] = $this->request->post['total_lightshopsets_status'];
} else {
$data['total_lightshopsets_status'] = $this->config->get('total_lightshopsets_status');
}
if (isset($this->request->post['total_lightshopsets_sort_order'])) {
$data['total_lightshopsets_sort_order'] = $this->request->post['total_lightshopsets_sort_order'];
} else {
$data['total_lightshopsets_sort_order'] = $this->config->get('total_lightshopsets_sort_order');
}
$data['header'] = $this->load->controller('common/header');
$data['column_left'] = $this->load->controller('common/column_left');
$data['footer'] = $this->load->controller('common/footer');
$this->response->setOutput($this->load->view('extension/total/lightshopsets', $data));
}
protected function validate() {
if (!$this->user->hasPermission('modify', 'extension/total/lightshopsets')) { var_dump($this->user->hasPermission('modify', 'extension/total/lightshopsets'));
$this->error['warning'] = $this->language->get('error_permission');
}
return !$this->error;
}
}
@@ -1,396 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Лайтшоп';
// Text
$_['text_theme'] = 'Шаблоны';
$_['text_extension'] = 'Шаблоны';
$_['text_success'] = 'Настройки шаблона успешно сохранены!';
$_['text_error_activation'] = 'Ошибка активации ключа, пожалуйста обратитесь в техническую поддержку по электронной почте support@899themes.ru';
$_['text_edit'] = 'Настройка шаблона';
$_['text_general'] = 'Общие';
$_['text_product'] = 'Товары и категории';
$_['text_image'] = 'Размеры изображений';
$_['text_products'] = 'Товары';
$_['text_categories'] = 'Категории';
$_['text_tabs_shablon'] = 'Шаблон вывода';
$_['text_tabs_links'] = 'Привязка';
$_['text_tabs_popup'] = 'Всплывающее окно';
$_['text_tabs_tab'] = 'Вкладка';
$_['text_tabs_to_products'] = 'К конкретным товарам';
$_['text_tabs_tab_to_categories'] = 'К товарам в категориях';
$_['text_sort_order'] = 'Порядок сортировки';
$_['text_name'] = 'Название:';
$_['text_description'] = 'Описание:';
$_['text_copystore'] = 'Копирование настроек для мультимагазинов';
$_['text_copystore_success'] = 'Настройки для мультимагазинов скопированы';
$_['text_copystore_ask'] = 'Копировать настройки основного магазина на мультимагазины?';
$_['text_license'] = 'ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ на использование Шаблона «Лайтшоп»
Настоящее Лицензионное соглашение (далее – Соглашение) заключается между «899themes» (далее – Автор) и Пользователем (любым физическим лицом, индивидуальным предпринимателем, юридическим лицом (далее – Пользователь) шаблона «Лайтшоп» (далее – Шаблон).
Соглашение относится ко всем распространяемым версиям или модификациям Шаблона.
Основные термины настоящего Соглашения:
Лицензионный ключ – набор символов, представляющий собой техническое средство защиты авторских прав и предназначенный для активации.
Активация – действие, направленное на регистрацию шаблона на конкретного Пользователя по средствам ввода Лицензионного ключа на странице настроек Шаблона, согласно технической документации.
1. ПРЕДМЕТ СОГЛАШЕНИЯ
1.1. В порядке и на условиях, предусмотренных настоящим Соглашением, Автор предоставляет Пользователю право использования Шаблона, реализуемое путем установки (инсталляции) и запуска Пользователем Шаблона в соответствии с его технической документацией, условиями настоящего Соглашения.
1.2. Все положения Соглашения распространяются как на Шаблон в целом, так и на его отдельные компоненты.
1.3. Соглашение вступает в силу непосредственно в момент получения Пользователем копии Шаблона посредством электронных средств передачи данных либо на физических носителях.
2. УСЛОВИЯ ИСПОЛЬЗОВАНИЯ ШАБЛОНА И ТЕХНИЧЕСКАЯ ПОДДЕРЖКА
2.1. Соглашение дает Пользователю право использовать одну копию Шаблона после Активации в рамках одного сайта (интернет-магазина), который работает в пределах одного доменного имени.
2.2. Если при использовании Шаблона будут обнаружены ошибки, Автор обязуется исправить их и выпустить обновленную версию Шаблона. Стороны соглашаются, что точное определение срока устранения ошибки и/или выпуска обновления не может быть установлено, так как Шаблон тесно взаимодействует с другими программами и дополнениями сторонних разработчиков, операционной системой и аппаратными ресурсами компьютера Пользователя, и работоспособность и время устранения проблем в полной мере не зависят только от Автора.
2.3. Техническая поддержка оказывается в течение одного года со дня покупки копии Шаблона. Стоимость продления технической поддержки еще на один год составляет 50% от текущей стоимости копии Шаблона.
2.4. Условия использования Шаблона в тестовых окружениях, выдача Лицензионных ключей для тестирования, а также повторная Активация Шаблона на другом доменном имени обсуждаются индивидуально, при условии активного периода технической поддержки.
3. АВТОРСКИЕ ПРАВА
3.1. Шаблон является результатом интеллектуальной деятельности и объектом авторских прав, которые регулируются и защищены законодательством Российской Федерации об интеллектуальной собственности и нормами международного права.
3.2. Шаблон содержит коммерческую тайну и иную конфиденциальную информацию, принадлежащую Автору. Любое использование Шаблона в нарушение условий настоящего Соглашения рассматривается как нарушение прав Автора и является достаточным основанием для лишения Пользователя предоставленных по настоящему Соглашению прав.
3.3. Автор гарантирует, что обладает всеми необходимыми по настоящему Соглашению правами для предоставления их Пользователю, включая техническую документацию к Шаблону.
3.4. Пользователь не может ни при каких условиях удалять или делать малозаметными информацию и сведения об авторских правах, указанные в Шаблоне.
4. ОТВЕТСТВЕННОСТЬ СТОРОН
4.1. Автор не несет ответственность за какие-либо убытки и/или ущерб (в том числе, убытки в связи недополученной коммерческой выгодой, прерыванием коммерческой и производственной деятельности, утратой данных), возникающие в связи с использованием или невозможностью использования Шаблона, даже если Автор был уведомлен о возможном возникновении таких убытков и/или ущерба.
4.2. Шаблон поставляется на условиях «как есть» без предоставления гарантий производительности, покупательной способности, сохранности данных, а также иных явно выраженных или предполагаемых гарантий. Автор не несёт какой-либо ответственности за причинение или возможность причинения вреда Пользователю, его информации или его бизнесу вследствие использования или невозможности использования Шаблона.
4.3. Автор не несёт ответственность, связанную с привлечением Пользователя или третьих лиц к административной или уголовной ответственности за использование Шаблона в противозаконных целях (включая, но не ограничиваясь, продажей через Интернет магазин объектов, изъятых из оборота или добытых преступным путём, предназначенных для разжигания межрасовой или межнациональной вражды и т.д.).
5. ДЕЙСТВИЕ, ИЗМЕНЕНИЕ И РАСТОРЖЕНИЕ СОГЛАШЕНИЯ
5.1. В случае нарушения Пользователем условий настоящего Соглашения по использованию шаблона, Автор имеет право в одностороннем порядке расторгнуть настоящее Соглашение, уведомив об этом Пользователя.
5.2. При расторжении настоящего Соглашения Пользователь обязан прекратить использование Шаблона полностью и уничтожить все копии Шаблона, установленные на компьютерах Пользователь, включая резервные копии и все компоненты Шаблона.
5.3. Пользователь не имеет права продавать, распространять или использовать Шаблон без согласия Автора.
5.4. Пользователь имеет право модифицировать Шаблон по своему усмотрению. При этом последующее использование Шаблона должно осуществляться в соответствии с данным Соглашением и при условии сохранения всех авторских прав.
5.5. Автор оставляет за собой право в любое время изменять условия Соглашения без предварительного уведомления.
5.6. Получение экземпляра Шаблона, его использование и/или хранение автоматически означает:
- осведомленность Пользователя о содержании Соглашения;
- принятие его положений;
- выполнение условий данного Соглашения.
Официальный сайт Автора: 899themes.ru';
$_['text_yes'] = 'Да';
$_['text_no'] = 'Отмена';
$_['text_no_0'] = 'Нет';
$_['text_on'] = 'Вкл.';
$_['text_off'] = 'Откл.';
$_['text_delete'] = 'Удалить';
$_['text_add'] = 'Добавить';
$_['text_menu'] = 'МЕНЮ';
$_['text_not_chosen'] = '--- Не выбрано ---';
$_['text_manufacturers'] = 'Производители';
$_['text_tab_general'] = 'Общие';
$_['text_tab_header'] = 'Верх сайта';
$_['text_tab_home'] = 'Контент';
$_['text_tab_footer'] = 'Низ сайта';
$_['text_tab_widgets'] = 'Виджеты';
$_['text_tab_info'] = 'О шаблоне';
$_['text_tab_href'] = 'Ссылка';
$_['text_tab_att'] = 'Атрибут';
$_['text_tab_left_config'] = 'Настройка';
$_['text_tab_left_image'] = 'Размеры картинок';
$_['text_tab_left_color'] = 'Цветовая схема';
$_['text_tab_left_css_js'] = 'Для разработчиков';
$_['text_tab_left_header_all'] = 'Основные настройки';
$_['text_tab_left_header_nav'] = 'Верхнее мега-меню';
$_['text_tab_left_header_menu'] = 'Главное мега-меню';
$_['text_tab_left_catalog'] = 'Каталог';
$_['text_tab_left_product'] = 'Карточка товара';
$_['text_tab_left_news'] = 'Страница новостей';
$_['text_tab_left_contact'] = 'Контакты';
$_['text_tab_left_checkout_reg'] = 'Заказ и регистрация';
$_['text_tab_left_blog'] = 'Блог';
$_['text_tab_left_footer_logo'] = 'Логотип и тексты';
$_['text_tab_left_footer_menu'] = 'Нижнее мега-меню';
$_['text_tab_left_404'] = 'Страница 404';
$_['text_tab_left_col'] = 'Название колонки';
$_['text_tab_left_callback'] = 'Заказ звонка';
$_['text_tab_left_newsletter'] = 'Подписка на новости';
$_['text_tab_left_links'] = 'Дополнительные ссылки';
$_['text_tab_left_soc'] = 'Соц. сети';
$_['text_tab_left_soc_share'] = 'Кнопки соц. сетей (share)';
$_['text_tab_left_stiker'] = 'Стикеры';
$_['text_tab_left_buy_click'] = 'Быстрый заказ';
$_['text_tab_left_scrolltotop'] = 'Кнопка наверх';
$_['text_tab_left_pdata'] = 'Персональные данные';
$_['text_tab_left_analytics'] = 'Настройка Аналитики';
$_['text_tab_left_messengers'] = 'Мессенджеры';
$_['text_theme_lightshop_phone_1'] = 'Номер телефона 1';
$_['text_theme_lightshop_phone_2'] = 'Номер телефона 2';
$_['text_theme_lightshop_schema'] = 'Разметка Schema.org';
$_['text_theme_lightshop_schema_tt'] = 'Schema.org — это стандарт семантической разметки данных в сети, объявленный поисковыми системами Google, Bing и Yahoo! летом 2011 года. Цель семантической разметки – сделать интернет более понятным, структурированным и облегчить поисковым системам и специальным программам извлечение и обработку информации для удобного её представления в результатах поиска.';
$_['text_theme_lightshop_og'] = 'Разметка Open Graph';
$_['text_theme_lightshop_og_tt'] = 'Стандарт Open Graph разработан социальной сетью Facebook. Он позволяет контролировать превью, которое формируется при публикации ссылки на сайт в социальных сетях, и передавать информацию другим интернет-сервисам. Разметку Open Graph используют Facebook, Вконтакте, Google+, Twitter, LinkedIn, Pinterest и другие сервисы.';
$_['text_theme_lightshop_preloader'] = 'Индикатор загрузки';
$_['text_theme_lightshop_preloader_tt'] = 'Индикатор загрузки контента сайта, рекомендуется использовать если вывод .css и .js кода в положении - Внизу сайта';
$_['text_theme_lightshop_container_width'] = 'Ширина сайта';
$_['text_theme_lightshop_container_width_tt'] = 'Максимальная ширина сайта в ПК версии, фиксированное значение или автоматическое в процентнах.';
$_['text_theme_lightshop_container_width_0'] = '1200px (по умолчанию)';
$_['text_theme_lightshop_container_width_fix'] = 'Фиксированная';
$_['text_theme_lightshop_container_width_auto'] = 'Автоматическая';
$_['text_theme_lightshop_google_site_verification'] = 'Мета-тег google-site-verification';
$_['text_theme_lightshop_yandex_verification'] = 'Мета-тег yandex-verification';
$_['text_image_resize'] = 'Ресайз изображений можно изменить стандартный opencart или Лайтшоп. При выборе опции Лайтшоп ресайз, изображения обрезаются по высоте и автоматически в пропорции по ширине.';
$_['text_image_lightshop_resize'] = 'Лайтшоп ресайз';
$_['text_theme_lightshop_image_main_rec'] = 'Подменю категории (Ш x В)';
$_['text_theme_lightshop_image_product_detail'] = 'Окно быстрого просмотра (Ш x В)';
$_['text_lightshop_image_blog_cat_width'] = 'Категория блога (Ш x В)';
$_['text_lightshop_image_blog_item'] = 'Статья блога (Ш x В)';
$_['text_lightshop_image_blog_related'] = 'Рекомендуемые статьи блога (Ш x В)';
$_['text_lightshop_image_manufacturer'] = 'Страница производители (Ш x В)';
$_['text_pane_color'] = 'Основные цвета';
$_['text_pane_color_0'] = 'По умолчанию';
$_['text_pane_color_1'] = 'Схема';
$_['text_pane_color_2'] = 'Произвольная схема';
$_['text_pane_color_3'] = 'Верх и низ сайта';
$_['text_pane_left_css_js_1'] = 'Пользовательские скрипты';
$_['text_pane_left_css_js_2'] = 'Основные скрипты';
$_['text_pane_left_css_js_3'] = 'Дополнительные компоненты';
$_['text_theme_lightshop_lazyload'] = '<span class="tooltip-custom" title="Дополнение lazyLoad для ajax подгрузки изображений товаров при скролле.">lazyLoad</span>';
$_['text_theme_lightshop_js_footorhead'] = 'Вывод js скриптов';
$_['text_theme_lightshop_js_footorhead_tt'] = 'Вывод js скриптов. Для совместимости со сторонними дополнениями, рекомендуется положение - Вверху сайта';
$_['text_theme_lightshop_js_footorhead_1'] = 'Вверху сайта';
$_['text_theme_lightshop_js_footorhead_2'] = 'Внизу сайта';
$_['text_theme_lightshop_fontawesome'] = 'Иконки fontawesome';
$_['text_theme_lightshop_fontawesome_tt'] = 'Включите, если стороннее дополенение использует иконки <a href=\'https://fontawesome.com/icons?d=gallery&m=free\' target=\'_blank\'>fontawesome</a>';
$_['text_theme_lightshop_bootstrap'] = 'bootstrap компоненты';
$_['text_theme_lightshop_bootstrap_tt'] = 'Включите, если стороннее дополенение использует <a href=\'https://getbootstrap.com/docs/3.3/javascript/\' target=\'_blank\'>bootstrap компоненты: modals, tooltip, tabs, dropdown</a>';
$_['text_theme_lightshop_header_type'] = 'Тип шапки';
$_['text_theme_lightshop_header_type_1'] = 'Только главное меню';
$_['text_theme_lightshop_header_type_2'] = 'Верхнее и главное меню, стиль 1';
$_['text_theme_lightshop_header_type_3'] = 'Верхнее и главное меню, стиль 2';
$_['text_theme_lightshop_header_type3_logo'] = 'Положение логотипа';
$_['text_theme_lightshop_header_type3_logo_0'] = 'По центру';
$_['text_theme_lightshop_header_type3_logo_1'] = 'Слева';
$_['text_theme_lightshop_header_type3_logo_2'] = 'Справа';
$_['text_theme_lightshop_header_type3_menu'] = 'Пункты в главном меню';
$_['text_theme_lightshop_fixed_header'] = 'Фикс. меню';
$_['text_theme_lightshop_fixed_header_tt'] = 'Фиксировать меню вверху сайта при скролле';
$_['text_theme_lightshop_header_text_logo'] = 'Текстовый логотип или svg код';
$_['text_theme_lightshop_header_logo'] = 'Логотип';
$_['text_table_header_navs_0'] = 'Тип';
$_['text_table_header_navs_1'] = 'Пункт меню';
$_['text_table_header_navs_2'] = 'Порядок сортировки';
$_['text_table_header_navs_name'] = 'Название подменю';
$_['text_table_header_navs_href'] = 'Ссылка(http://)';
$_['text_table_header_navs_href_0'] = 'Ссылки';
$_['text_theme_lightshop_max_subcat'] = 'Ограничение категорий';
$_['text_theme_lightshop_max_subcat_tt'] = 'Ограничить категории 3го уровня';
$_['text_table_header_navs_1_tt'] = 'Для главных родительских категорий необходимо включить параметр «Главное меню» в настройках категории';
$_['text_table_main_nav'] = 'Категории (по умолчанию все)';
$_['text_table_main_add'] = 'Дополнительный элемент подменю';
$_['text_table_main_add_0'] = 'Главная категория';
$_['text_table_main_add_1'] = 'Правый элемент подменю 1';
$_['text_theme_lightshop_main_rec'] = 'Можно использовать html';
$_['text_theme_lightshop_main_rec_0'] = 'html контент';
$_['text_theme_lightshop_product_detail'] = 'Быстрый просмотр';
$_['text_theme_lightshop_product_detail_1'] = 'Вкл. (при клике на название/изображение товара)';
$_['text_theme_lightshop_product_detail_2'] = 'Вкл. (при клике на кнопку быстрого просмотра)';
$_['text_theme_lightshop_cart_call'] = 'В корзину';
$_['text_theme_lightshop_cart_call_tt'] = 'Действие после добавления товара в корзину';
$_['text_theme_lightshop_cart_call_0'] = 'Показывать подсказку вверху сайта';
$_['text_theme_lightshop_cart_call_1'] = 'Открывать корзину';
$_['text_theme_lightshop_category_background'] = 'Фон в каталоге';
$_['text_theme_lightshop_category_background_tt'] = 'Отображать фоновое изображение в каталоге товаров';
$_['text_theme_lightshop_category_categories'] = 'Категории в каталоге';
$_['text_theme_lightshop_category_categories_tt'] = 'Варианты отображения плиток категорий в каталоге';
$_['text_theme_lightshop_category_categories_0'] = 'Не отображать';
$_['text_theme_lightshop_category_categories_4'] = 'По 3 в ряд';
$_['text_theme_lightshop_category_categories_3'] = 'По 4 в ряд';
$_['text_theme_lightshop_category_categories_2'] = 'По 6 в ряд';
$_['text_theme_lightshop_category_sorts'] = 'Сортировка';
$_['text_theme_lightshop_category_sorts_tt'] = 'Отображать варианты сортировки товаров';
$_['text_theme_lightshop_category_limits'] = 'Лимиты';
$_['text_theme_lightshop_category_limits_tt'] = 'Отображать лимиты вывода товаров в каталог';
$_['text_theme_lightshop_pс_view'] = 'Вид каталога (ПК)';
$_['text_theme_lightshop_pс_view_tt'] = 'Вид каталога товаров по умолчанию в ПК версии сайта, данный параметр на витрине сайта сохраняется в файлах cookies';
$_['text_theme_lightshop_pс_view_3'] = 'Плитка по 3 товара в ряд';
$_['text_theme_lightshop_pс_view_4'] = 'Плитка по 4 товара в ряд';
$_['text_theme_lightshop_pс_view_5'] = 'Плитка по 5 товаров в ряд';
$_['text_theme_lightshop_pс_view_list'] = 'Лист';
$_['text_theme_lightshop_pс_view_table'] = 'Таблица';
$_['text_theme_lightshop_mobile_view'] = 'Вид каталога (моб.)';
$_['text_theme_lightshop_mobile_view_tt'] = 'Вид каталога товаров по умолчанию в мобильной версии сайта, данный параметр на витрине сайта сохраняется в файлах cookies';
$_['text_theme_lightshop_mobile_view_main'] = 'Плитка';
$_['text_theme_lightshop_catalog_type_tt'] = 'Вариант отображения плитки в каталоге товаров';
$_['text_theme_lightshop_wishlist'] = '<span data-toggle="tooltip" title="Отключает обзательную регистрацию при добавлении товаров с список избранных">Избранные без регистрации</span>';
$_['text_theme_lightshop_subcategory'] = '<span data-toggle="tooltip" title="Вывод в категории товаров из подкатегорий">Вывод в категории товаров из подкатегорий</span>';
$_['text_theme_lightshop_product_short_descr'] = '<span data-toggle="tooltip" title="" data-original-title="Чтобы использовать краткое описание в карточках товаров, отделите текст описания Enter-ом в редактировании товара">Краткое описание</span>';
$_['text_theme_lightshop_product_short_tag'] = '<span data-toggle="tooltip" title="" data-original-title="Текст до данного разделителя будет перенесен в верхнюю часть картчки товара (под названием), остальной текст в останется в нижней части (в табе)">Разделитель краткого описания</span>';
$_['text_theme_lightshop_product_opt_select'] = '<span data-toggle="tooltip" title="" data-original-title="Вариант отображения опций">Опции</span>';
$_['text_theme_lightshop_product_opt_select_0'] = 'в 2 столбца (по умолчанию)';
$_['text_theme_lightshop_product_opt_select_'] = 'в 1 столбец';
$_['text_theme_lightshop_product_att_select'] = '<span data-toggle="tooltip" title="" data-original-title="Вариант отображения атрибутов (характеристик)">Атрибуты</span>';
$_['text_theme_lightshop_product_zoom'] = '<span data-toggle="tooltip" title="" data-original-title="Эффект увеличения изображения товара">Увеличение изображения</span>';
$_['text_theme_lightshop_product_zoom_0'] = 'Fancy box (по умолчанию)';
$_['text_theme_lightshop_product_zoom_1'] = 'Cloud zoom';
$_['text_theme_lightshop_product_cod'] = '<span data-toggle="tooltip" title="" data-original-title="Поле, в карточках товара, отображаемое на витрине магазина">Код товара</span>';
$_['text_theme_lightshop_product_cod_0'] = 'model (по умолчанию)';
$_['text_theme_lightshop_p_related_view'] = '<span data-toggle="tooltip" title="" data-original-title="Шаблон вывода рекомендуемых товаров">Рекомендуемые товары</span>';
$_['text_theme_lightshop_p_related_view_0'] = 'Слайдер (по умолчанию)';
$_['text_theme_lightshop_p_related_view_3'] = 'Сетка по 3 товара в строке';
$_['text_theme_lightshop_p_related_view_4'] = 'Сетка по 4 товара в строке';
$_['text_theme_lightshop_p_related_view_5'] = 'Сетка по 5 товаров в строке';
$_['text_theme_lightshop_product_review'] = '<span data-toggle="tooltip" title="" data-original-title="Включить индексацию отзывов, т.е. отзывы о товарах будут в коде страницы товара, по умолчанию, отзывы в cms opencart выводятся скриптом через ajax.">Индексируемые отзывы</span>';
$_['text_theme_lightshop_tag'] = 'тег';
$_['text_theme_lightshop_metatag'] = 'Метатег';
$_['text_theme_lightshop_contact_map'] = '<span data-toggle="tooltip" title="Используемая карта">Используемая карта</span>';
$_['text_theme_lightshop_contact_map_0'] = 'Без карты';
$_['text_theme_lightshop_contact_map_1'] = 'Google карты';
$_['text_theme_lightshop_contact_map_2'] = 'Яндекс карты';
$_['text_theme_lightshop_contact_zoom'] = 'Масштаб карты';
$_['text_theme_lightshop_contact_zoom_control'] = '<span data-toggle="tooltip" title="" data-original-title="Показывать в углу карты кнопки +/- для увеличения/уменьшения масштаба карты">Кнопки увеличения</span>';
$_['text_theme_lightshop_contact_api_key'] = 'API ключ';
$_['text_theme_lightshop_contact_api_key_i'] = 'Для получения ключа API Google Maps перейдите по ссылке <a href="https://developers.google.com/maps/documentation/geocoding/get-api-key?hl=ru" target="_blank">https://developers.google.com/maps/documentation/geocoding/get-api-key?hl=ru</a>';
$_['text_theme_lightshop_checkout_st4_title'] = '<span data-toggle="tooltip" title="" data-original-title="Показывать заголовки способов оплаты и достаки">Заголовки</span>';
$_['text_theme_lightshop_checkout_st4_col'] = '<span data-toggle="tooltip" title="" data-original-title="Вид отображения способов оплаты и достаки">Вид отображения</span>';
$_['text_theme_lightshop_checkout_st4_col_0'] = 'В 1 колонку';
$_['text_theme_lightshop_checkout_st4_col_1'] = 'В 2 колонки';
$_['text_theme_lightshop_checkout_st3_sa'] = '<span data-toggle="tooltip" title="" data-original-title="Выбор адреса доставки, отличного от платежного адреса">Адрес доставки</span>';
$_['text_theme_lightshop_checkout_shipping'] = '<span data-toggle="tooltip" title="" data-original-title="Видимость способов доставки, если в товаре отключена доставка">Видимость доставки</span>';
$_['text_theme_lightshop_checkout_shipping_0'] = 'Скрыть (По умолчанию)';
$_['text_theme_lightshop_checkout_shipping_1'] = 'Показывать';
$_['text_theme_lightshop_che_legend'] = 'Поле';
$_['text_theme_lightshop_che_name'] = 'Название';
$_['text_theme_lightshop_che_customer_group'] = 'Группа покупателей';
$_['text_theme_lightshop_che_required'] = 'Обязательно';
$_['text_theme_lightshop_che_i'] = 'Для добавления дополнительного поля откройте раздел <a href="%s" target="_blank">Покупатели > Произвольные поля</a>';
$_['text_theme_lightshop_che_st2_firstname'] = 'Если значение не задано, используется по умолчанию - Имя';
$_['text_theme_lightshop_che_st2_lastname'] = 'Если значение не задано, используется по умолчанию - Фамилия';
$_['text_theme_lightshop_che_st2_email'] = 'Если значение не задано, используется по умолчанию - E-mail';
$_['text_theme_lightshop_che_st2_telephone'] = 'Если значение не задано, используется по умолчанию - Телефон';
$_['text_theme_lightshop_che_st2_fax'] = 'Если значение не задано, используется по умолчанию - Факс';
$_['text_theme_lightshop_che_st2_company'] = 'Если значение не задано, используется по умолчанию - Компания';
$_['text_theme_lightshop_che_st2_address_1'] = 'Если значение не задано, используется по умолчанию - Адрес';
$_['text_theme_lightshop_che_st2_address_2'] = 'Если значение не задано, используется по умолчанию - Адрес (дополнительно)';
$_['text_theme_lightshop_che_st2_city'] = 'Если значение не задано, используется по умолчанию - Город';
$_['text_theme_lightshop_che_st2_postcode'] = 'Если значение не задано, используется по умолчанию - Индекс';
$_['text_theme_lightshop_che_st2_country_id'] = 'Если значение не задано, используется по умолчанию - Страна';
$_['text_theme_lightshop_che_st2_zone_id'] = 'Если значение не задано, используется по умолчанию - Регион / Область';
$_['text_theme_lightshop_blog_legend'] = 'Общая страница блога';
$_['text_theme_lightshop_blog_legend_0'] = 'Запись блога';
$_['text_theme_lightshop_blog_path'] = '<span data-toggle="tooltip" title="URL блога с категорией">URL блога с категорией</span>';
$_['text_theme_lightshop_blog_background'] = '<span data-toggle="tooltip" title="Отображать фоновое изображение в записи блога">Фон в записи</span>';
$_['text_theme_lightshop_blog_rev_st'] = 'Разрешить отзывы';
$_['text_theme_lightshop_blog_rev_guest'] = '<span data-toggle="tooltip" title="Разрешить гостям оставлять отзывы. В противном случае, оставлять отзывы смогут только зарегистрированные покупатели!">Отзывы от гостей</span>';
$_['text_theme_lightshop_blog_rev_moder'] = '<span data-toggle="tooltip" title="Публиковать отзывы без модерации.">Отзывы без модерации</span>';
$_['text_theme_lightshop_captcha'] = '<span data-toggle="tooltip" title="Использовать выбранную Captcha-службу">Captcha</span>';
$_['text_theme_lightshop_logo_404'] = '<span data-toggle="tooltip" title="По умолчанию на странице 404 используется стандартное изображение.">Изображение</span>';
$_['text_theme_lightshop_footer_type'] = 'Тип футера';
$_['text_theme_lightshop_footer_soc_stat'] = 'Соц. сети';
$_['text_theme_lightshop_footer_text_logo'] = 'Текстовый логотип или svg код';
$_['text_theme_lightshop_footer_logo'] = 'Логотип внизу сайта';
$_['text_theme_lightshop_footer_text'] = 'Тектовый блок';
$_['text_theme_lightshop_footer_copyright'] = 'Копирайт';
$_['text_theme_lightshop_subscribe_email_alert'] = 'Оповещение e-mail администратору';
$_['text_theme_lightshop_subscribe_title'] = '<span data-toggle="tooltip" title="Текст заголовка внизу сайта">Заголовок</span>';
$_['text_theme_lightshop_subscribe_subtitle'] = '<span data-toggle="tooltip" title="Текст подзаголовка внизу сайта">Подзаголовок</span>';
$_['text_theme_lightshop_vidg_extlinks_i'] = 'Дополнительные ссылки могут быть добавлены: Верх сайта > Верхнее мега-меню, Верх сайта > Главное мега-меню, Низ сайта > Нижнее мега-меню.';
$_['text_theme_lightshop_social_nav'] = 'Соц. сеть';
$_['text_theme_lightshop_soc_share_prod'] = 'Показывать на страницах товаров';
$_['text_theme_lightshop_soc_share_blog'] = 'Показывать на страницах блога';
$_['text_theme_lightshop_soc_share_code'] = '<span data-toggle="tooltip" title="" data-original-title="Если поле пустое, используется код кнопок www.addthis.com">Код share кнопок</span>';
$_['text_theme_lightshop_soc_share_code_0'] = 'Код share кнопок';
$_['text_theme_lightshop_label_legend'] = 'СТИКЕР НОВИНКА';
$_['text_theme_lightshop_label_legend_0'] = 'СТИКЕР СКИДКА';
$_['text_theme_lightshop_label_legend_1'] = 'СТИКЕР ХИТ ПРОДАЖ';
$_['text_theme_lightshop_label_legend_2'] = 'СТИКЕР ПОПУЛЯРНЫЙ ТОВАР';
$_['text_theme_lightshop_label_legend_3'] = 'СТИКЕР УСПЕЙ КУПИТЬ';
$_['text_theme_lightshop_label_new_periods'] = '<span data-toggle="tooltip" title="" data-original-title="Период активности после добавления товара">Активен</span>';
$_['text_theme_lightshop_label_legend_0_i'] = 'Отображается у товаров где добавлена цена по акции (есть перечеркнутая цена).';
$_['text_theme_lightshop_label_sale_extra'] = 'Дополнительный элемент';
$_['text_theme_lightshop_label_legend_1_i'] = '<span data-toggle="tooltip" title="" data-original-title="Количество продаж товара для отображения стикера, учитываются только заказы с завершенным статусом.">Продаж</span>';
$_['text_theme_lightshop_label_hit_period'] = 'За период';
$_['text_theme_lightshop_label_hit_qty'] = 'Продаж';
$_['text_theme_lightshop_label_legend_2_i'] = '<span data-toggle="tooltip" title="" data-original-title="Общее количество просмотров товара больше заданного значения для отображения стикера.">Просмотров</span>';
$_['text_theme_lightshop_label_catch_qty'] = '<span data-toggle="tooltip" title="" data-original-title="Общее количество единиц товара равное или меньше заданного значения для отображения стикера.">Количество</span>';
$_['text_theme_lightshop_label_catch'] = '<span data-toggle="tooltip" title="" data-original-title="Дополнительное название для стикера, когда количество товара меньше или равно нулю.">Дополнительное название</span>';
$_['text_theme_lightshop_order_status_id'] = '<span data-toggle="tooltip" title="Статус заказа по умолчанию.">Статус заказа</span>';
$_['text_theme_lightshop_label_popular_views'] = 'Просмотров';
$_['text_theme_lightshop_buy_click_i'] = 'Настройки для функционала "Купить в один клик" (в карточке товара, каталоге и быстром просмотре) и "Быстрый заказ" (в стандартной и всплывающей корзине)';
$_['text_theme_lightshop_scrolltt_pos'] = 'Позиция';
$_['text_theme_lightshop_pdata_i'] = 'Перед выбором текст нужно добавить в раздел';
$_['text_theme_lightshop_pdata_i_0'] = 'Каталог > Статьи';
$_['text_theme_lightshop_callback_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных в окне заказть звонок">Заказ звонка</span>';
$_['text_theme_lightshop_subscribe_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных в форме подписки внизу сайта">Форма подписки</span>';
$_['text_theme_lightshop_buy_click_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных в форме быстрого заказа">Быстрый заказ</span>';
$_['text_theme_lightshop_contact_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных на странице контактов">Контакты</span>';
$_['text_theme_lightshop_voucher_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных на странице подарочных сертификатов">Сертификат</span>';
$_['text_theme_lightshop_review_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных в форме отзыва на товар">Отзывы о товарах</span>';
$_['text_theme_lightshop_blog_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных на странице статей блога">Статьи блога</span>';
$_['text_theme_lightshop_cookies_pdata'] = '<span data-toggle="tooltip" title="Текст согласия на обработку персональных данных для файлов cookies, отображается подсказка внизу сайта для неавторизованных клиентов, время жизни cookie 1 год.">Файлы cookies</span>';
$_['text_theme_lightshop_ecommerce'] = 'Электронная коммерция';
$_['text_theme_lightshop_analytics_i'] = 'Код счетчиков можно добавить в ';
$_['text_theme_lightshop_analytics_i_0'] = 'соответствующем разделе панели управления ';
$_['text_theme_lightshop_analytics_ya_status'] = '<span data-toggle="tooltip" title="Включить электронную коммерцию Яндекс">Коммерция Яндекс</span>';
$_['text_theme_lightshop_analytics_goole_status'] = '<span data-toggle="tooltip" title="Включить электронную коммерцию Google, если вы уже настроили отправку данных в электронную коммерцию Google, Яндекс.Метрика также начнет собирать данные (Включите опцию «Отправка в Метрику данных электронной коммерции» на странице настроек счетчика в Яндекс.Метрике)">Коммерция Google</span>';
$_['text_theme_lightshop_ecommerce_event'] = 'Общие метки событий';
$_['text_theme_lightshop_ecommerce_event_i'] = 'Настройка целей для Яндекс.Метрики описана в <a href="https://yandex.ru/support/metrika/general/goal-js-event.html#js-event" target="_blank">разделе</a>, используется идентификатор JavaScript-события из списка ниже. Настройка целей для Google Аналитики описана в <a href="https://support.google.com/analytics/answer/1032415?hl=ru" target="_blank">разделе</a>, используется «Вариант 2. Собственные цели» > Тип: Событие > Действие > Равно > Значение из списка ниже.';
$_['text_lightshop_callback'] = '<span data-toggle="tooltip" title="Обратный звонок (отправка формы)">Обратный звонок, форма</span>';
$_['text_lightshop_addtocart_catalog'] = '<span data-toggle="tooltip" title="Товар добавлен в корзину (из списка товаров)">Товар добавлен в корзину, список</span>';
$_['text_lightshop_addtocart_product'] = '<span data-toggle="tooltip" title="Товар добавлен в корзину (из страницы товара)">Товар добавлен в корзину, страница</span>';
$_['text_lightshop_buyclick'] = '<span data-toggle="tooltip" title="Купить в 1 клик (открытие формы из карточки товара и быстрого просмотра)">Купить в 1 клик, форма</span>';
$_['text_lightshop_buyclick_success'] = '<span data-toggle="tooltip" title="Купить в 1 клик (страница checkout/success)">Купить в 1 клик, success</span>';
$_['text_lightshop_checkout_success'] = '<span data-toggle="tooltip" title="Стандартный заказ (завершение оформления, страница checkout/success)">Стандартный заказ, success</span>';
$_['text_lightshop_settocart'] = '<span data-toggle="tooltip" title="Набор добавлен в корзину">Набор добавлен в корзину</span>';
$_['text_lightshop_subscribe'] = '<span data-toggle="tooltip" title="Подписался на новости (отправка формы)">Подписался на новости, форма</span>';
$_['text_lightshop_contact'] = '<span data-toggle="tooltip" title="Форма обратной связи на странице контактов (отправка формы)">Форма обратной связи</span>';
$_['text_theme_lightshop_messenger_td'] = 'Мессенджер';
$_['text_theme_lightshop_messenger_td_0'] = '<span data-toggle="tooltip" title="Номер телефона в международном формате (только цифры, без пробелов), имя страницы или id">Идентификатор</span>';
$_['text_version'] = 'Версия';
$_['text_new_version'] = 'Доступна новая версия';
$_['text_support'] = 'Техническая поддержка';
$_['text_support_0'] = 'Для продления технической поддержки напишите пожалуйста нам на почту';
$_['text_support_1'] = 'Отправить запрос в службу поддержки:';
$_['text_899themes'] = 'Разработчик';
$_['text_license_0'] = 'Лицензионное соглашение';
$_['text_theme_lightshop_news_limit'] = 'Сколько новостей показывать на одной странице';
$_['text_theme_lightshop_blog_limit'] = 'Сколько записей блога показывать на одной странице';
$_['text_theme_lightshop_title'] = 'Заголовок';
$_['text_theme_lightshop_subtitle'] = 'Подзаголовок';
$_['text_theme_lightshop_qty'] = 'Количество';
$_['text_theme_lightshop_category_products'] = '<span data-toggle="tooltip" title="Вывод товаров в каталоге с наличием меньше или равно нулю">Товары с нулевым остатком</span>';
$_['text_theme_lightshop_category_products_0'] = 'По умолчанию';
$_['text_theme_lightshop_category_products_1'] = 'Выводить в конце каталога';
// Entry
$_['entry_directory'] = 'Папка шаблона';
$_['entry_status'] = 'Статус';
$_['entry_product_limit'] = 'На странице';
$_['entry_product_description_length'] = 'Краткое описание';
$_['entry_image_category'] = 'Категории (Ш x В)';
$_['entry_image_thumb'] = 'Миниатюры (Ш x В)';
$_['entry_image_popup'] = 'Всплывающие (Ш x В)';
$_['entry_image_product'] = 'Товара (Ш x В)';
$_['entry_image_additional'] = 'Дополнительные (Ш x В)';
$_['entry_image_related'] = 'Рекомендуемые (Ш x В)';
$_['entry_image_compare'] = 'В сравнении (Ш x В)';
$_['entry_image_wishlist'] = 'Закладки (Ш x В)';
$_['entry_image_cart'] = 'В корзине (Ш x В)';
$_['entry_image_location'] = 'Изображение магазина (Ш x В)';
$_['entry_width'] = 'Ширина';
$_['entry_height'] = 'Высота';
// Help
$_['help_directory'] = 'Это поле только для выбора старых шаблонов, что бы сделать их совместимыми с новым движком Opencart.';
$_['help_product_limit'] = 'Сколько элементов показывать на одной странице (товары, категории, и т.п.)';
$_['help_product_description_length'] = 'Сколько знаков показывать из описания товара в режиме список.';
$_['help_product_tabs_main'] = 'Вкладка выводится в карточке товара после отзывов, всплывающее окно перед опциями в карточке товара и в быстром просмотре.';
$_['help_product_tabs_select'] = 'Если товары не выбраны то вкладка показывается во всех товарах.';
$_['help_product_tabs_cat_select'] = 'Если категории не выбраны то вкладка показывается во всех товарах.';
// Error
$_['error_permission'] = 'У вас не достаточно прав!';
$_['error_limit'] = 'Укажите количество символов в кратком описании товара для режима список!';
$_['error_image_thumb'] = 'Укажите размер миниатюр!';
$_['error_image_popup'] = 'Укажите размер всплывающих изображений товара!';
$_['error_image_product'] = 'Укажите размер изображения для товаров!';
$_['error_image_category'] = 'Укажите размер изображения для категорий!';
$_['error_image_additional'] = 'Укажите размер дополнительных изображений товара!';
$_['error_image_related'] = 'Укажите размер изображений для рекомендуемых (похожих) товаров!';
$_['error_image_compare'] = 'Укажите размер изображений товара для списка сравнений!';
$_['error_image_wishlist'] = 'Укажите размер изображений товара для закладок!';
$_['error_image_cart'] = 'Укажите размер изображений товара для корзины!';
$_['error_image_location'] = 'Укажите размер изображений магазина!';
@@ -1,17 +0,0 @@
<?php
$_['account/account'] = 'Аккаунт';
$_['information/sitemap'] = 'Карта сайта';
$_['information/contact'] = 'Контакты';
$_['affiliate/login'] = 'Партнерская программа';
$_['product/search'] = 'Поиск';
$_['product/manufacturer'] = 'Производители';
$_['product/compare'] = 'Сравнение';
$_['account/wishlist'] = 'Избранное';
$_['checkout/cart'] = 'Корзина';
$_['checkout/checkout'] = 'Оформление заказа';
$_['account/return/add'] = 'Возвраты';
$_['account/voucher'] = 'Подарочные сертификаты';
$_['product/special'] = 'Акции';
$_['extension/module/lightshop_news/getnewslist'] = 'Новости';
$_['extension/module/lightshopcat_blog/getcat&lbpath=0'] = 'Блог';
$_['extension/module/lightshopcat_blog/getcatbloglist'] = 'Блог.Категории';
@@ -1,15 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Скидка на наборы. Lightshop';
// Text
$_['text_extension'] = 'Общая сумма заказа';
$_['text_success'] = 'Настройки модуля обновлены!';
$_['text_edit'] = 'Редактирование модуля';
// Entry
$_['entry_status'] = 'Статус:';
$_['entry_sort_order'] = 'Порядок сортировки:';
// Error
$_['error_permission'] = 'У вас нет прав для управления подарочными сертификатами!';
@@ -1,805 +0,0 @@
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
x0==
@@ -1,413 +0,0 @@
<?php
class ModelExtensionThemeLightshopBlog extends Model {
public function addBlog($data) {
if($data['date_added']){
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog SET sort_order = 0, bottom = '" . (isset($data['bottom']) ? (int)$data['bottom'] : 0) . "', status = '" . (int)$data['status'] . "', date_added = '" . $this->db->escape($data['date_added']) . "'");
}else{
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog SET sort_order = 0, bottom = '" . (isset($data['bottom']) ? (int)$data['bottom'] : 0) . "', status = '" . (int)$data['status'] . "', date_added = NOW()");
}
$blog_id = $this->db->getLastId();
if (isset($data['image'])) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_blog SET image = '" . $this->db->escape($data['image']) . "' WHERE blog_id = '" . (int)$blog_id . "'");
}
foreach ($data['blog_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_description SET blog_id = '" . (int)$blog_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
if($value['tag']){
foreach (explode(',',$value['tag']) as $tag) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_tag SET blog_id = '" . (int)$blog_id . "', language_id = '" . (int)$language_id . "', tag = '" . $this->db->escape(trim($tag)) . "'");
}
}
}
if (isset($data['blog_store'])) {
foreach ($data['blog_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_to_store SET blog_id = '" . (int)$blog_id . "', store_id = '" . (int)$store_id . "'");
}
}
if (isset($data['blog_related'])) {
foreach ($data['blog_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related WHERE blog_id = '" . (int)$blog_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_related SET blog_id = '" . (int)$blog_id . "', related_id = '" . (int)$related_id . "'");
}
}
if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related_prod WHERE blog_id = '" . (int)$blog_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_related_prod SET blog_id = '" . (int)$blog_id . "', related_id = '" . (int)$related_id . "'");
}
}
if (isset($data['blog_layout'])) {
foreach ($data['blog_layout'] as $store_id => $layout_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_to_layout SET blog_id = '" . (int)$blog_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
}
}
// SEO URL
if (isset($data['blog_seo_url'])) {
foreach ($data['blog_seo_url'] as $store_id => $language) {
foreach ($language as $language_id => $keyword) {
if (!empty($keyword)) {
$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'blog_id=" . (int)$blog_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
}
}
}
if(isset($data['main_category_id']) && $data['main_category_id'] > 0) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_category WHERE blog_id = '" . (int)$blog_id . "' AND category_id = '" . (int)$data['main_category_id'] . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_to_category SET blog_id = '" . (int)$blog_id . "', category_id = '" . (int)$data['main_category_id'] . "', main_category = 1");
}
$this->cache->delete('blog');
return $blog_id;
}
public function editBlog($blog_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_blog SET sort_order = 0, bottom = '" . (isset($data['bottom']) ? (int)$data['bottom'] : 0) . "', status = '" . (int)$data['status'] . "', date_added = '" . $this->db->escape($data['date_added']) . "' WHERE blog_id = '" . (int)$blog_id . "'");
if (isset($data['image'])) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_blog SET image = '" . $this->db->escape($data['image']) . "' WHERE blog_id = '" . (int)$blog_id . "'");
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_description WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_tag WHERE blog_id = '" . (int)$blog_id . "'");
foreach ($data['blog_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_description SET blog_id = '" . (int)$blog_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
if($value['tag']){
foreach (explode(',',$value['tag']) as $tag) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_tag SET blog_id = '" . (int)$blog_id . "', language_id = '" . (int)$language_id . "', tag = '" . $this->db->escape(trim($tag)) . "'");
}
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_store WHERE blog_id = '" . (int)$blog_id . "'");
if (isset($data['blog_store'])) {
foreach ($data['blog_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_to_store SET blog_id = '" . (int)$blog_id . "', store_id = '" . (int)$store_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_layout WHERE blog_id = '" . (int)$blog_id . "'");
if (isset($data['blog_layout'])) {
foreach ($data['blog_layout'] as $store_id => $layout_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_to_layout SET blog_id = '" . (int)$blog_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related WHERE blog_id = '" . (int)$blog_id . "'");
if (isset($data['blog_related'])) {
foreach ($data['blog_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related WHERE blog_id = '" . (int)$blog_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_related SET blog_id = '" . (int)$blog_id . "', related_id = '" . (int)$related_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related_prod WHERE blog_id = '" . (int)$blog_id . "'");
if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related_prod WHERE blog_id = '" . (int)$blog_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_related_prod SET blog_id = '" . (int)$blog_id . "', related_id = '" . (int)$related_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'blog_id=" . (int)$blog_id . "'");
// SEO URL
if (isset($data['blog_seo_url'])) {
foreach ($data['blog_seo_url'] as $store_id => $language) {
foreach ($language as $language_id => $keyword) {
if (!empty($keyword)) {
$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'blog_id=" . (int)$blog_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
}
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_category WHERE blog_id = '" . (int)$blog_id . "'");
if(isset($data['main_category_id']) && $data['main_category_id'] > 0) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_to_category SET blog_id = '" . (int)$blog_id . "', category_id = '" . (int)$data['main_category_id'] . "', main_category = 1");
}
$this->cache->delete('blog');
}
public function deleteBlog($blog_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_description WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_store WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_category WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_layout WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'blog_id=" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_tag WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related WHERE related_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_related_prod WHERE blog_id = '" . (int)$blog_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_comment WHERE blog_id = '" . (int)$blog_id . "'");
$this->cache->delete('blog');
}
public function getBlog($blog_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT keyword FROM " . DB_PREFIX . "seo_url WHERE query = 'blog_id=" . (int)$blog_id . "' LIMIT 1) AS keyword FROM " . DB_PREFIX . "lightshop_blog i LEFT JOIN " . DB_PREFIX . "lightshop_blog_description id ON (i.blog_id = id.blog_id) WHERE i.blog_id = '" . (int)$blog_id . "'");
return $query->row;
}
public function getBlogTag($blog_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_tag WHERE blog_id = '" . (int)$blog_id . "'");
return $query->rows;
}
public function getBlogSeoUrls($blog_id) {
$blog_seo_url_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE query = 'blog_id=" . (int)$blog_id . "'");
foreach ($query->rows as $result) {
$blog_seo_url_data[$result['store_id']][$result['language_id']] = $result['keyword'];
}
return $blog_seo_url_data;
}
public function getBlogs($data = array()) {
$this->createTable();
if ($data) {
$sql = "SELECT * FROM " . DB_PREFIX . "lightshop_blog i LEFT JOIN " . DB_PREFIX . "lightshop_blog_description id ON (i.blog_id = id.blog_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "'";
if (!empty($data['filter_name'])) {
$sql .= " AND id.title LIKE '" . $this->db->escape($data['filter_name']) . "%'";
}
$sort_data = array(
'id.title',
'i.sort_order',
'i.date_added'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY i.date_added";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
} else {
$blog_data = $this->cache->get('blog.' . (int)$this->config->get('config_language_id'));
if (!$blog_data) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog i LEFT JOIN " . DB_PREFIX . "lightshop_blog_description id ON (i.blog_id = id.blog_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY id.title");
$blog_data = $query->rows;
$this->cache->set('blog.' . (int)$this->config->get('config_language_id'), $blog_data);
}
return $blog_data;
}
}
public function getBlogDescriptions($blog_id) {
$blog_description_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_description WHERE blog_id = '" . (int)$blog_id . "'");
foreach ($query->rows as $result) {
$tag = '';
$temp = array();
$query1 = $this->db->query("SELECT tag FROM " . DB_PREFIX . "lightshop_blog_tag WHERE blog_id = '" . (int)$blog_id . "' AND language_id = '" . (int)$result['language_id'] . "'");
if($query1->num_rows){
foreach ($query1->rows as $value) {
$temp[] = $value['tag'];
}
$tag = implode(',', $temp);
}
$blog_description_data[$result['language_id']] = array(
'title' => $result['title'],
'description' => $result['description'],
'meta_title' => $result['meta_title'],
'meta_h1' => $result['meta_h1'],
'meta_description' => $result['meta_description'],
'meta_keyword' => $result['meta_keyword'],
'tag' => $tag
);
}
return $blog_description_data;
}
public function getBlogStores($blog_id) {
$blog_store_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_to_store WHERE blog_id = '" . (int)$blog_id . "'");
foreach ($query->rows as $result) {
$blog_store_data[] = $result['store_id'];
}
return $blog_store_data;
}
public function getBlogLayouts($blog_id) {
$blog_layout_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_to_layout WHERE blog_id = '" . (int)$blog_id . "'");
foreach ($query->rows as $result) {
$blog_layout_data[$result['store_id']] = $result['layout_id'];
}
return $blog_layout_data;
}
public function getTotalBlogs() {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog");
return $query->row['total'];
}
public function getTotalBlogsByLayoutId($layout_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog_to_layout WHERE layout_id = '" . (int)$layout_id . "'");
return $query->row['total'];
}
public function getBlogRelated($blog_id) {
$blog_related_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_related WHERE blog_id = '" . (int)$blog_id . "'");
foreach ($query->rows as $result) {
$blog_related_data[] = $result['related_id'];
}
return $blog_related_data;
}
public function getBlogRelatedProds($blog_id) {
$product_related_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_related_prod WHERE blog_id = '" . (int)$blog_id . "'");
foreach ($query->rows as $result) {
$product_related_data[] = $result['related_id'];
}
return $product_related_data;
}
public function getBlogMainCategoryId($blog_id) {
$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "lightshop_blog_to_category WHERE blog_id = '" . (int)$blog_id . "' AND main_category = '1' LIMIT 1");
return ($query->num_rows ? (int)$query->row['category_id'] : 0);
}
public function getCommentNewCount() {
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_blog_comment (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
`blog_id` int(11) NOT NULL,
`customer_id` int(11) NOT NULL,
`author` varchar(64) NOT NULL,
`text` text NOT NULL,
`rating` int(1) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '0',
`date_added` datetime NOT NULL,
`date_modified` datetime NOT NULL,
PRIMARY KEY (`comment_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$query = $this->db->query("SELECT COUNT(status) as total FROM " . DB_PREFIX . "lightshop_blog_comment WHERE status = '0'");
return $query->row;
}
public function createTable() {
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_blog (
`blog_id` int(11) NOT NULL AUTO_INCREMENT,
`bottom` int(1) NOT NULL DEFAULT '0',
`sort_order` int(3) NOT NULL DEFAULT '0',
`status` tinyint(1) NOT NULL DEFAULT '1',
`date_added` date NOT NULL,
PRIMARY KEY (`blog_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_blog_description (
`blog_id` int(11) NOT NULL,
`language_id` int(11) NOT NULL,
`title` varchar(200) NOT NULL,
`description` text NOT NULL,
`meta_title` varchar(255) NOT NULL,
`meta_h1` varchar(255) NOT NULL,
`meta_description` varchar(255) NOT NULL,
`meta_keyword` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_blog_to_layout (
`blog_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL,
`layout_id` int(11) NOT NULL,
PRIMARY KEY (`blog_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_blog_to_store (
`blog_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL,
PRIMARY KEY (`blog_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_blog_related (
`news_id` int(11) NOT NULL,
`related_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
}
}
@@ -1,131 +0,0 @@
<?php
class ModelExtensionThemeLightshopblogReview extends Model {
public function addReview($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_blog_comment SET author = '" . $this->db->escape($data['author']) . "', blog_id = '" . (int)$data['blog_id'] . "', text = '" . $this->db->escape(strip_tags($data['text'])) . "', status = '" . (int)$data['status'] . "', date_added = '" . $this->db->escape($data['date_added']) . "'");
$comment_id = $this->db->getLastId();
$this->cache->delete('blog');
return $comment_id;
}
public function editReview($comment_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_blog_comment SET author = '" . $this->db->escape($data['author']) . "', blog_id = '" . (int)$data['blog_id'] . "', text = '" . $this->db->escape(strip_tags($data['text'])) . "', status = '" . (int)$data['status'] . "', date_added = '" . $this->db->escape($data['date_added']) . "', date_modified = NOW() WHERE comment_id = '" . (int)$comment_id . "'");
$this->cache->delete('blog');
}
public function deleteReview($comment_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_comment WHERE comment_id = '" . (int)$comment_id . "'");
$this->cache->delete('blog');
}
public function getReview($comment_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT pd.title FROM " . DB_PREFIX . "lightshop_blog_description pd WHERE pd.blog_id = r.blog_id AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS blog FROM " . DB_PREFIX . "lightshop_blog_comment r WHERE r.comment_id = '" . (int)$comment_id . "'");
return $query->row;
}
public function getReviews($data = array()) {
$sql = "SELECT r.comment_id, pd.title, r.author, r.status, r.date_added FROM " . DB_PREFIX . "lightshop_blog_comment r LEFT JOIN " . DB_PREFIX . "lightshop_blog_description pd ON (r.blog_id = pd.blog_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
if (!empty($data['filter_blog'])) {
$sql .= " AND pd.title LIKE '" . $this->db->escape($data['filter_blog']) . "%'";
}
if (!empty($data['filter_author'])) {
$sql .= " AND r.author LIKE '" . $this->db->escape($data['filter_author']) . "%'";
}
if (isset($data['filter_status']) && !is_null($data['filter_status'])) {
$sql .= " AND r.status = '" . (int)$data['filter_status'] . "'";
}
if (!empty($data['filter_date_added'])) {
$sql .= " AND DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
$sort_data = array(
'pd.title',
'r.author',
'r.status',
'r.date_added'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY r.date_added";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
}
public function getTotalReviews($data = array()) {
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_blog_comment (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
`blog_id` int(11) NOT NULL,
`customer_id` int(11) NOT NULL,
`author` varchar(64) NOT NULL,
`text` text NOT NULL,
`rating` int(1) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '0',
`date_added` datetime NOT NULL,
`date_modified` datetime NOT NULL,
PRIMARY KEY (`comment_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$sql = "SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog_comment r LEFT JOIN " . DB_PREFIX . "lightshop_blog_description pd ON (r.blog_id = pd.blog_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
if (!empty($data['filter_blog'])) {
$sql .= " AND pd.title LIKE '" . $this->db->escape($data['filter_blog']) . "%'";
}
if (!empty($data['filter_author'])) {
$sql .= " AND r.author LIKE '" . $this->db->escape($data['filter_author']) . "%'";
}
if (isset($data['filter_status']) && !is_null($data['filter_status'])) {
$sql .= " AND r.status = '" . (int)$data['filter_status'] . "'";
}
if (!empty($data['filter_date_added'])) {
$sql .= " AND DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
$query = $this->db->query($sql);
return $query->row['total'];
}
public function getTotalReviewsAwaitingApproval() {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog_commentWHERE status = '0'");
return $query->row['total'];
}
}
@@ -1,365 +0,0 @@
<?php
class ModelExtensionThemeLightshopcatblog extends Model {
public function addCategoryBlog($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW(), date_added = NOW()");
$category_id = $this->db->getLastId();
if (isset($data['image'])) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshopcat_blog SET image = '" . $this->db->escape($data['image']) . "' WHERE category_id = '" . (int)$category_id . "'");
}
foreach ($data['lightshopcatblog_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
// MySQL Hierarchical Data Closure Table Pattern
$level = 0;
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$data['parent_id'] . "' ORDER BY `level` ASC");
foreach ($query->rows as $result) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "lightshopcat_blog_path` SET `category_id` = '" . (int)$category_id . "', `path_id` = '" . (int)$result['path_id'] . "', `level` = '" . (int)$level . "'");
$level++;
}
$this->db->query("INSERT INTO `" . DB_PREFIX . "lightshopcat_blog_path` SET `category_id` = '" . (int)$category_id . "', `path_id` = '" . (int)$category_id . "', `level` = '" . (int)$level . "'");
if (isset($data['category_filter'])) {
foreach ($data['category_filter'] as $filter_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_filter SET category_id = '" . (int)$category_id . "', filter_id = '" . (int)$filter_id . "'");
}
}
if (isset($data['lightshopcatblog_store'])) {
foreach ($data['lightshopcatblog_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_to_store SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "'");
}
}
// Set which layout to use with this category
if (isset($data['category_layout'])) {
foreach ($data['category_layout'] as $store_id => $layout_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_to_layout SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'lightshopcatblog_id=" . (int)$category_id . "'");
// SEO URL
if (isset($data['category_seo_url'])) {
foreach ($data['category_seo_url'] as $store_id => $language) {
foreach ($language as $language_id => $keyword) {
if (!empty($keyword)) {
$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'lightshopcatblog_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
}
}
}
$this->cache->delete('category');
return $category_id;
}
public function editCategoryBlog($category_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshopcat_blog SET parent_id = '" . (int)$data['parent_id'] . "', `top` = '" . (isset($data['top']) ? (int)$data['top'] : 0) . "', `column` = '" . (int)$data['column'] . "', sort_order = '" . (int)$data['sort_order'] . "', status = '" . (int)$data['status'] . "', date_modified = NOW() WHERE category_id = '" . (int)$category_id . "'");
if (isset($data['image'])) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshopcat_blog SET image = '" . $this->db->escape($data['image']) . "' WHERE category_id = '" . (int)$category_id . "'");
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_description WHERE category_id = '" . (int)$category_id . "'");
foreach ($data['lightshopcatblog_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_description SET category_id = '" . (int)$category_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($value['name']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
// MySQL Hierarchical Data Closure Table Pattern
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE path_id = '" . (int)$category_id . "' ORDER BY level ASC");
if ($query->rows) {
foreach ($query->rows as $category_path) {
// Delete the path below the current one
$this->db->query("DELETE FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$category_path['category_id'] . "' AND level < '" . (int)$category_path['level'] . "'");
$path = array();
// Get the nodes new parents
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$data['parent_id'] . "' ORDER BY level ASC");
foreach ($query->rows as $result) {
$path[] = $result['path_id'];
}
// Get whats left of the nodes current path
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$category_path['category_id'] . "' ORDER BY level ASC");
foreach ($query->rows as $result) {
$path[] = $result['path_id'];
}
// Combine the paths with a new level
$level = 0;
foreach ($path as $path_id) {
$this->db->query("REPLACE INTO `" . DB_PREFIX . "lightshopcat_blog_path` SET category_id = '" . (int)$category_path['category_id'] . "', `path_id` = '" . (int)$path_id . "', level = '" . (int)$level . "'");
$level++;
}
}
} else {
// Delete the path below the current one
$this->db->query("DELETE FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$category_id . "'");
// Fix for records with no paths
$level = 0;
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$data['parent_id'] . "' ORDER BY level ASC");
foreach ($query->rows as $result) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "lightshopcat_blog_path` SET category_id = '" . (int)$category_id . "', `path_id` = '" . (int)$result['path_id'] . "', level = '" . (int)$level . "'");
$level++;
}
$this->db->query("REPLACE INTO `" . DB_PREFIX . "lightshopcat_blog_path` SET category_id = '" . (int)$category_id . "', `path_id` = '" . (int)$category_id . "', level = '" . (int)$level . "'");
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_filter WHERE category_id = '" . (int)$category_id . "'");
if (isset($data['category_filter'])) {
foreach ($data['category_filter'] as $filter_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_filter SET category_id = '" . (int)$category_id . "', filter_id = '" . (int)$filter_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_to_store WHERE category_id = '" . (int)$category_id . "'");
if (isset($data['lightshopcatblog_store'])) {
foreach ($data['lightshopcatblog_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_to_store SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_to_layout WHERE category_id = '" . (int)$category_id . "'");
if (isset($data['category_layout'])) {
foreach ($data['category_layout'] as $store_id => $layout_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshopcat_blog_to_layout SET category_id = '" . (int)$category_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'lightshopcatblog_id=" . (int)$category_id . "'");
// SEO URL
if (isset($data['category_seo_url'])) {
foreach ($data['category_seo_url'] as $store_id => $language) {
foreach ($language as $language_id => $keyword) {
if (!empty($keyword)) {
$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'lightshopcatblog_id=" . (int)$category_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
}
}
}
$this->cache->delete('category');
}
public function deleteCategoryBlog($category_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_path WHERE category_id = '" . (int)$category_id . "'");
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog_path WHERE path_id = '" . (int)$category_id . "'");
foreach ($query->rows as $result) {
$this->deleteCategory($result['category_id']);
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog WHERE category_id = '" . (int)$category_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_description WHERE category_id = '" . (int)$category_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_filter WHERE category_id = '" . (int)$category_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_to_store WHERE category_id = '" . (int)$category_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshopcat_blog_to_layout WHERE category_id = '" . (int)$category_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_blog_to_category WHERE category_id = '" . (int)$category_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'lightshopcatblog_id=" . (int)$category_id . "'");
$this->cache->delete('category');
}
public function repairCategoriesBlog($parent_id = 0) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog WHERE parent_id = '" . (int)$parent_id . "'");
foreach ($query->rows as $category) {
// Delete the path below the current one
$this->db->query("DELETE FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$category['category_id'] . "'");
// Fix for records with no paths
$level = 0;
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "lightshopcat_blog_path` WHERE category_id = '" . (int)$parent_id . "' ORDER BY level ASC");
foreach ($query->rows as $result) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "lightshopcat_blog_path` SET category_id = '" . (int)$category['category_id'] . "', `path_id` = '" . (int)$result['path_id'] . "', level = '" . (int)$level . "'");
$level++;
}
$this->db->query("REPLACE INTO `" . DB_PREFIX . "lightshopcat_blog_path` SET category_id = '" . (int)$category['category_id'] . "', `path_id` = '" . (int)$category['category_id'] . "', level = '" . (int)$level . "'");
$this->repairCategories($category['category_id']);
}
}
public function getCategorySeoUrls($category_id) {
$category_seo_url_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE query = 'lightshopcatblog_id=" . (int)$category_id . "'");
foreach ($query->rows as $result) {
$category_seo_url_data[$result['store_id']][$result['language_id']] = $result['keyword'];
}
return $category_seo_url_data;
}
public function getCategoryBlog($category_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT GROUP_CONCAT(cd1.name ORDER BY level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd1 ON (cp.path_id = cd1.category_id AND cp.category_id != cp.path_id) WHERE cp.category_id = c.category_id AND cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY cp.category_id) AS path FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd2 ON (c.category_id = cd2.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'");
return $query->row;
}
public function getCategoriesBlogByParentId($parent_id = 0) {
$query = $this->db->query("SELECT *, (SELECT COUNT(parent_id) FROM " . DB_PREFIX . "lightshopcat_blog WHERE parent_id = c.category_id) AS children FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd ON (c.category_id = cd.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY c.sort_order, cd.name");
return $query->rows;
}
public function getCategoriesBlog($data = array()) {
$sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') AS name, c1.parent_id, c1.sort_order, c1.status,(select count(product_id) as product_count from " . DB_PREFIX . "product_to_category pc where pc.category_id = c1.category_id) as product_count FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshopcat_blog c1 ON (cp.category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog c2 ON (cp.path_id = c2.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
if (!empty($data['filter_name'])) {
$sql .= " AND cd2.name LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
}
$sql .= " GROUP BY cp.category_id";
$sort_data = array(
'product_count',
'name',
'sort_order'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY sort_order";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
}
public function getCategoryBlogDescriptions($category_id) {
$category_description_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog_description WHERE category_id = '" . (int)$category_id . "'");
foreach ($query->rows as $result) {
$category_description_data[$result['language_id']] = array(
'name' => $result['name'],
'meta_title' => $result['meta_title'],
'meta_h1' => $result['meta_h1'],
'meta_description' => $result['meta_description'],
'meta_keyword' => $result['meta_keyword'],
'description' => $result['description']
);
}
return $category_description_data;
}
public function getCategoryBlogPath($category_id) {
$query = $this->db->query("SELECT category_id, path_id, level FROM " . DB_PREFIX . "lightshopcat_blog_path WHERE category_id = '" . (int)$category_id . "'");
return $query->rows;
}
public function getCategoryBlogFilters($category_id) {
$category_filter_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog_filter WHERE category_id = '" . (int)$category_id . "'");
foreach ($query->rows as $result) {
$category_filter_data[] = $result['filter_id'];
}
return $category_filter_data;
}
public function getCategoryBlogStores($category_id) {
$category_store_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog_to_store WHERE category_id = '" . (int)$category_id . "'");
foreach ($query->rows as $result) {
$category_store_data[] = $result['store_id'];
}
return $category_store_data;
}
public function getCategoryBlogLayouts($category_id) {
$category_layout_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog_to_layout WHERE category_id = '" . (int)$category_id . "'");
foreach ($query->rows as $result) {
$category_layout_data[$result['store_id']] = $result['layout_id'];
}
return $category_layout_data;
}
public function getTotalCategoriesBlog() {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshopcat_blog");
return $query->row['total'];
}
public function getAllCategoriesBlog() {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_to_store c2s ON (c.category_id = c2s.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY c.parent_id, c.sort_order, cd.name");
$category_data = array();
foreach ($query->rows as $row) {
$category_data[$row['parent_id']][$row['category_id']] = $row;
}
return $category_data;
}
public function getTotalCategoriesBlogByLayoutId($layout_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshopcat_blog_to_layout WHERE layout_id = '" . (int)$layout_id . "'");
return $query->row['total'];
}
}
@@ -1,298 +0,0 @@
<?php
class ModelExtensionThemeLightshopNews extends Model {
public function addNews($data) {
if($data['date_added']){
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news SET sort_order = 0, bottom = '" . (isset($data['bottom']) ? (int)$data['bottom'] : 0) . "', status = '" . (int)$data['status'] . "', date_added = '" . $this->db->escape($data['date_added']) . "'");
}else{
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news SET sort_order = 0, bottom = '" . (isset($data['bottom']) ? (int)$data['bottom'] : 0) . "', status = '" . (int)$data['status'] . "', date_added = NOW()");
}
$news_id = $this->db->getLastId();
foreach ($data['news_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_description SET news_id = '" . (int)$news_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
if (isset($data['news_store'])) {
foreach ($data['news_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_to_store SET news_id = '" . (int)$news_id . "', store_id = '" . (int)$store_id . "'");
}
}
if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_related WHERE news_id = '" . (int)$news_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_related SET news_id = '" . (int)$news_id . "', related_id = '" . (int)$related_id . "'");
}
}
if (isset($data['news_layout'])) {
foreach ($data['news_layout'] as $store_id => $layout_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_to_layout SET news_id = '" . (int)$news_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
}
}
// SEO URL
if (isset($data['news_seo_url'])) {
foreach ($data['news_seo_url'] as $store_id => $language) {
foreach ($language as $language_id => $keyword) {
if (!empty($keyword)) {
$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'news_id=" . (int)$news_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
}
}
}
$this->cache->delete('news');
return $news_id;
}
public function editNews($news_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_news SET sort_order = 0, bottom = '" . (isset($data['bottom']) ? (int)$data['bottom'] : 0) . "', status = '" . (int)$data['status'] . "', date_added = '" . $this->db->escape($data['date_added']) . "' WHERE news_id = '" . (int)$news_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_description WHERE news_id = '" . (int)$news_id . "'");
foreach ($data['news_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_description SET news_id = '" . (int)$news_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_to_store WHERE news_id = '" . (int)$news_id . "'");
if (isset($data['news_store'])) {
foreach ($data['news_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_to_store SET news_id = '" . (int)$news_id . "', store_id = '" . (int)$store_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_to_layout WHERE news_id = '" . (int)$news_id . "'");
if (isset($data['news_layout'])) {
foreach ($data['news_layout'] as $store_id => $layout_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_to_layout SET news_id = '" . (int)$news_id . "', store_id = '" . (int)$store_id . "', layout_id = '" . (int)$layout_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_related WHERE news_id = '" . (int)$news_id . "'");
if (isset($data['product_related'])) {
foreach ($data['product_related'] as $related_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_related WHERE news_id = '" . (int)$news_id . "' AND related_id = '" . (int)$related_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_news_related SET news_id = '" . (int)$news_id . "', related_id = '" . (int)$related_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'news_id=" . (int)$news_id . "'");
if (isset($data['news_seo_url'])) {
foreach ($data['news_seo_url'] as $store_id => $language) {
foreach ($language as $language_id => $keyword) {
if (trim($keyword)) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "seo_url` SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'news_id=" . (int)$news_id . "', keyword = '" . $this->db->escape($keyword) . "'");
}
}
}
}
$this->cache->delete('news');
}
public function deleteNews($news_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news WHERE news_id = '" . (int)$news_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_description WHERE news_id = '" . (int)$news_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_to_store WHERE news_id = '" . (int)$news_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_to_layout WHERE news_id = '" . (int)$news_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'news_id=" . (int)$news_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_related WHERE news_id = '" . (int)$news_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_news_related WHERE related_id = '" . (int)$news_id . "'");
$this->cache->delete('news');
}
public function getNews($news_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT keyword FROM " . DB_PREFIX . "seo_url WHERE query = 'news_id=" . (int)$news_id . "' LIMIT 1) AS keyword FROM " . DB_PREFIX . "lightshop_news WHERE news_id = '" . (int)$news_id . "'");
return $query->row;
}
public function getNewsSeoUrls($news_id) {
$news_seo_url_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE query = 'news_id=" . (int)$news_id . "'");
foreach ($query->rows as $result) {
$news_seo_url_data[$result['store_id']][$result['language_id']] = $result['keyword'];
}
return $news_seo_url_data;
}
public function getNewss($data = array()) {
$this->createTable();
if ($data) {
$sql = "SELECT * FROM " . DB_PREFIX . "lightshop_news i LEFT JOIN " . DB_PREFIX . "lightshop_news_description id ON (i.news_id = id.news_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "'";
$sort_data = array(
'id.title',
'i.sort_order',
'i.date_added'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY i.date_added";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
} else {
$news_data = $this->cache->get('news.' . (int)$this->config->get('config_language_id'));
if (!$news_data) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news i LEFT JOIN " . DB_PREFIX . "lightshop_news_description id ON (i.news_id = id.news_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY id.title");
$news_data = $query->rows;
$this->cache->set('news.' . (int)$this->config->get('config_language_id'), $news_data);
}
return $news_data;
}
}
public function getNewsDescriptions($news_id) {
$news_description_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_description WHERE news_id = '" . (int)$news_id . "'");
foreach ($query->rows as $result) {
$news_description_data[$result['language_id']] = array(
'title' => $result['title'],
'description' => $result['description'],
'meta_title' => $result['meta_title'],
'meta_h1' => $result['meta_h1'],
'meta_description' => $result['meta_description'],
'meta_keyword' => $result['meta_keyword']
);
}
return $news_description_data;
}
public function getNewsStores($news_id) {
$news_store_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_to_store WHERE news_id = '" . (int)$news_id . "'");
foreach ($query->rows as $result) {
$news_store_data[] = $result['store_id'];
}
return $news_store_data;
}
public function getNewsLayouts($news_id) {
$news_layout_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_to_layout WHERE news_id = '" . (int)$news_id . "'");
foreach ($query->rows as $result) {
$news_layout_data[$result['store_id']] = $result['layout_id'];
}
return $news_layout_data;
}
public function getTotalNewss() {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_news");
return $query->row['total'];
}
public function getTotalNewssByLayoutId($layout_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_news_to_layout WHERE layout_id = '" . (int)$layout_id . "'");
return $query->row['total'];
}
public function getProductRelated($news_id) {
$product_related_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_related WHERE news_id = '" . (int)$news_id . "'");
foreach ($query->rows as $result) {
$product_related_data[] = $result['related_id'];
}
return $product_related_data;
}
public function createTable() {
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_news (
`news_id` int(11) NOT NULL AUTO_INCREMENT,
`bottom` int(1) NOT NULL DEFAULT '0',
`sort_order` int(3) NOT NULL DEFAULT '0',
`status` tinyint(1) NOT NULL DEFAULT '1',
`date_added` date NOT NULL,
PRIMARY KEY (`news_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_news_description (
`news_id` int(11) NOT NULL,
`language_id` int(11) NOT NULL,
`title` varchar(200) NOT NULL,
`description` text NOT NULL,
`meta_title` varchar(255) NOT NULL,
`meta_h1` varchar(255) NOT NULL,
`meta_description` varchar(255) NOT NULL,
`meta_keyword` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_news_to_layout (
`news_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL,
`layout_id` int(11) NOT NULL,
PRIMARY KEY (`news_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_news_to_store (
`news_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL,
PRIMARY KEY (`news_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_news_related (
`news_id` int(11) NOT NULL,
`related_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
}
}
@@ -1,277 +0,0 @@
<?php
class ModelExtensionThemeLightshopSets extends Model {
public function addSet($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_set SET sort_order = 0, mode = '" . (isset($data['mode']) ? (int)$data['mode'] : 0) . "', discount = '" . (isset($data['discount']) ? (int)$data['discount'] : 0) . "', status = '" . (int)$data['status'] . "', date_added = NOW()");
$set_id = $this->db->getLastId();
foreach ($data['set_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_set_description SET set_id = '" . (int)$set_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "'");
}
if (isset($data['set_store'])) {
foreach ($data['set_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_set_to_store SET set_id = '" . (int)$set_id . "', store_id = '" . (int)$store_id . "'");
}
}
if (isset($data['product'])) {
foreach ($data['product'] as $key => $rowProducts) {
if(!isset($rowProducts['items'])){ continue; }
foreach ($rowProducts['items'] as $product) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_product_to_set SET set_id = '" . (int)$set_id . "', row_id = '" . (int)$key . "', product_id = '" . (int)$product['id'] . "', quantity = '" . (int)$rowProducts['qty'] . "', sort_order = " . (int)$rowProducts['sort_order'] . "");
}
}
}
$this->cache->delete('set');
return $set_id;
}
public function editSet($set_id, $data) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_set SET mode = '" . (isset($data['mode']) ? (int)$data['mode'] : 0) . "', discount = '" . (isset($data['discount']) ? (int)$data['discount'] : 0) . "', status = '" . (int)$data['status'] . "' WHERE set_id = '" . (int)$set_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_set_description WHERE set_id = '" . (int)$set_id . "'");
foreach ($data['set_description'] as $language_id => $value) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_set_description SET set_id = '" . (int)$set_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "'");
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_set_to_store WHERE set_id = '" . (int)$set_id . "'");
if (isset($data['set_store'])) {
foreach ($data['set_store'] as $store_id) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_set_to_store SET set_id = '" . (int)$set_id . "', store_id = '" . (int)$store_id . "'");
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_product_to_set WHERE set_id = '" . (int)$set_id . "'");
if (isset($data['product'])) {
foreach ($data['product'] as $key => $rowProducts) {
if(!isset($rowProducts['items'])){ continue; }
foreach ($rowProducts['items'] as $product) {
$this->db->query("INSERT INTO " . DB_PREFIX . "lightshop_product_to_set SET set_id = '" . (int)$set_id . "', row_id = '" . (int)$key . "', product_id = '" . (int)$product['id'] . "', quantity = '" . (int)$rowProducts['qty'] . "', sort_order = " . (int)$rowProducts['sort_order'] . "");
}
}
}
$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'set_id=" . (int)$set_id . "'");
$this->cache->delete('set');
}
public function deleteSet($set_id) {
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_set WHERE set_id = '" . (int)$set_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_set_description WHERE set_id = '" . (int)$set_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_set_to_store WHERE set_id = '" . (int)$set_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_set_to_layout WHERE set_id = '" . (int)$set_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "lightshop_product_to_set WHERE set_id = '" . (int)$set_id . "'");
$this->cache->delete('set');
}
public function getSet($set_id) {
$sql = "SELECT * FROM " . DB_PREFIX . "lightshop_set i LEFT JOIN " . DB_PREFIX . "lightshop_set_description id ON (i.set_id = id.set_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i.set_id = '" . (int)$set_id . "'";
$query = $this->db->query($sql);
return $query->row;
}
public function getSetProduct($set_id) {
$products = array();
$sql = "SELECT * FROM " . DB_PREFIX . "lightshop_product_to_set WHERE set_id = '" . (int)$set_id . "' ORDER BY row_id,set_product_id ASC";
$query = $this->db->query($sql);
foreach ($query->rows as $key => $product) {
$products[$product['row_id']][] = array(
'id' => $product['product_id'],
'qty' => $product['quantity'],
'sort_order' => $product['sort_order']
);
}
return $products;
}
public function getSets($data = array()) {
$this->createTable();
if ($data) {
$sql = "SELECT * FROM " . DB_PREFIX . "lightshop_set i LEFT JOIN " . DB_PREFIX . "lightshop_set_description id ON (i.set_id = id.set_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "'";
$sort_data = array(
'id.title',
'i.sort_order',
'i.date_added'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY i.date_added";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
} else {
$set_data = $this->cache->get('lightshopset.' . (int)$this->config->get('config_language_id'));
if (!$set_data) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_set i LEFT JOIN " . DB_PREFIX . "lightshop_set_description id ON (i.set_id = id.set_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY id.title");
$set_data = $query->rows;
$this->cache->set('lightshopset.' . (int)$this->config->get('config_language_id'), $set_data);
}
return $set_data;
}
}
public function getSetDescriptions($set_id) {
$set_description_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_set_description WHERE set_id = '" . (int)$set_id . "'");
foreach ($query->rows as $result) {
$set_description_data[$result['language_id']] = array(
'title' => $result['title'],
);
}
return $set_description_data;
}
public function getSetStores($set_id) {
$set_store_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_set_to_store WHERE set_id = '" . (int)$set_id . "'");
foreach ($query->rows as $result) {
$set_store_data[] = $result['store_id'];
}
return $set_store_data;
}
public function getTotalSets() {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_set");
return $query->row['total'];
}
public function getTotalNewssByLayoutId($layout_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_news_to_layout WHERE layout_id = '" . (int)$layout_id . "'");
return $query->row['total'];
}
public function getProductRelated($news_id) {
$product_related_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_related WHERE news_id = '" . (int)$news_id . "'");
foreach ($query->rows as $result) {
$product_related_data[] = $result['related_id'];
}
return $product_related_data;
}
public function createTable() {
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_set (
`set_id` int(11) NOT NULL AUTO_INCREMENT,
`mode` int(1) NOT NULL DEFAULT '0',
`discount` int(11) NOT NULL DEFAULT '0',
`sort_order` int(3) NOT NULL DEFAULT '0',
`status` tinyint(1) NOT NULL DEFAULT '1',
`date_added` date NOT NULL,
PRIMARY KEY (`set_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_set_description (
`set_id` int(11) NOT NULL,
`language_id` int(11) NOT NULL,
`title` varchar(200) NOT NULL,
`description` text NOT NULL,
`meta_title` varchar(255) NOT NULL,
`meta_h1` varchar(255) NOT NULL,
`meta_description` varchar(255) NOT NULL,
`meta_keyword` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_product_to_set (
`set_product_id` int(11) NOT NULL AUTO_INCREMENT,
`set_id` int(11) NOT NULL,
`row_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`quantity` int(11) NOT NULL DEFAULT '0',
`sort_order` int(3) NOT NULL DEFAULT '0',
PRIMARY KEY (`set_product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_set_to_layout (
`set_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL,
`layout_id` int(11) NOT NULL,
PRIMARY KEY (`set_id`,`store_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_set_to_store (
`set_id` int(11) NOT NULL,
`store_id` int(11) NOT NULL,
PRIMARY KEY (`set_id`,`store_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
$this->db->query("
CREATE TABLE IF NOT EXISTS " . DB_PREFIX . "lightshop_news_related (
`news_id` int(11) NOT NULL,
`related_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
");
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 757 B

File diff suppressed because it is too large Load Diff
@@ -1,832 +0,0 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("css", function(config, parserConfig) {
var inline = parserConfig.inline
if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css");
var indentUnit = config.indentUnit,
tokenHooks = parserConfig.tokenHooks,
documentTypes = parserConfig.documentTypes || {},
mediaTypes = parserConfig.mediaTypes || {},
mediaFeatures = parserConfig.mediaFeatures || {},
mediaValueKeywords = parserConfig.mediaValueKeywords || {},
propertyKeywords = parserConfig.propertyKeywords || {},
nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},
fontProperties = parserConfig.fontProperties || {},
counterDescriptors = parserConfig.counterDescriptors || {},
colorKeywords = parserConfig.colorKeywords || {},
valueKeywords = parserConfig.valueKeywords || {},
allowNested = parserConfig.allowNested,
lineComment = parserConfig.lineComment,
supportsAtComponent = parserConfig.supportsAtComponent === true;
var type, override;
function ret(style, tp) { type = tp; return style; }
// Tokenizers
function tokenBase(stream, state) {
var ch = stream.next();
if (tokenHooks[ch]) {
var result = tokenHooks[ch](stream, state);
if (result !== false) return result;
}
if (ch == "@") {
stream.eatWhile(/[\w\\\-]/);
return ret("def", stream.current());
} else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) {
return ret(null, "compare");
} else if (ch == "\"" || ch == "'") {
state.tokenize = tokenString(ch);
return state.tokenize(stream, state);
} else if (ch == "#") {
stream.eatWhile(/[\w\\\-]/);
return ret("atom", "hash");
} else if (ch == "!") {
stream.match(/^\s*\w*/);
return ret("keyword", "important");
} else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) {
stream.eatWhile(/[\w.%]/);
return ret("number", "unit");
} else if (ch === "-") {
if (/[\d.]/.test(stream.peek())) {
stream.eatWhile(/[\w.%]/);
return ret("number", "unit");
} else if (stream.match(/^-[\w\\\-]+/)) {
stream.eatWhile(/[\w\\\-]/);
if (stream.match(/^\s*:/, false))
return ret("variable-2", "variable-definition");
return ret("variable-2", "variable");
} else if (stream.match(/^\w+-/)) {
return ret("meta", "meta");
}
} else if (/[,+>*\/]/.test(ch)) {
return ret(null, "select-op");
} else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {
return ret("qualifier", "qualifier");
} else if (/[:;{}\[\]\(\)]/.test(ch)) {
return ret(null, ch);
} else if (((ch == "u" || ch == "U") && stream.match(/rl(-prefix)?\(/i)) ||
((ch == "d" || ch == "D") && stream.match("omain(", true, true)) ||
((ch == "r" || ch == "R") && stream.match("egexp(", true, true))) {
stream.backUp(1);
state.tokenize = tokenParenthesized;
return ret("property", "word");
} else if (/[\w\\\-]/.test(ch)) {
stream.eatWhile(/[\w\\\-]/);
return ret("property", "word");
} else {
return ret(null, null);
}
}
function tokenString(quote) {
return function(stream, state) {
var escaped = false, ch;
while ((ch = stream.next()) != null) {
if (ch == quote && !escaped) {
if (quote == ")") stream.backUp(1);
break;
}
escaped = !escaped && ch == "\\";
}
if (ch == quote || !escaped && quote != ")") state.tokenize = null;
return ret("string", "string");
};
}
function tokenParenthesized(stream, state) {
stream.next(); // Must be '('
if (!stream.match(/\s*[\"\')]/, false))
state.tokenize = tokenString(")");
else
state.tokenize = null;
return ret(null, "(");
}
// Context management
function Context(type, indent, prev) {
this.type = type;
this.indent = indent;
this.prev = prev;
}
function pushContext(state, stream, type, indent) {
state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);
return type;
}
function popContext(state) {
if (state.context.prev)
state.context = state.context.prev;
return state.context.type;
}
function pass(type, stream, state) {
return states[state.context.type](type, stream, state);
}
function popAndPass(type, stream, state, n) {
for (var i = n || 1; i > 0; i--)
state.context = state.context.prev;
return pass(type, stream, state);
}
// Parser
function wordAsValue(stream) {
var word = stream.current().toLowerCase();
if (valueKeywords.hasOwnProperty(word))
override = "atom";
else if (colorKeywords.hasOwnProperty(word))
override = "keyword";
else
override = "variable";
}
var states = {};
states.top = function(type, stream, state) {
if (type == "{") {
return pushContext(state, stream, "block");
} else if (type == "}" && state.context.prev) {
return popContext(state);
} else if (supportsAtComponent && /@component/i.test(type)) {
return pushContext(state, stream, "atComponentBlock");
} else if (/^@(-moz-)?document$/i.test(type)) {
return pushContext(state, stream, "documentTypes");
} else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {
return pushContext(state, stream, "atBlock");
} else if (/^@(font-face|counter-style)/i.test(type)) {
state.stateArg = type;
return "restricted_atBlock_before";
} else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {
return "keyframes";
} else if (type && type.charAt(0) == "@") {
return pushContext(state, stream, "at");
} else if (type == "hash") {
override = "builtin";
} else if (type == "word") {
override = "tag";
} else if (type == "variable-definition") {
return "maybeprop";
} else if (type == "interpolation") {
return pushContext(state, stream, "interpolation");
} else if (type == ":") {
return "pseudo";
} else if (allowNested && type == "(") {
return pushContext(state, stream, "parens");
}
return state.context.type;
};
states.block = function(type, stream, state) {
if (type == "word") {
var word = stream.current().toLowerCase();
if (propertyKeywords.hasOwnProperty(word)) {
override = "property";
return "maybeprop";
} else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {
override = "string-2";
return "maybeprop";
} else if (allowNested) {
override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag";
return "block";
} else {
override += " error";
return "maybeprop";
}
} else if (type == "meta") {
return "block";
} else if (!allowNested && (type == "hash" || type == "qualifier")) {
override = "error";
return "block";
} else {
return states.top(type, stream, state);
}
};
states.maybeprop = function(type, stream, state) {
if (type == ":") return pushContext(state, stream, "prop");
return pass(type, stream, state);
};
states.prop = function(type, stream, state) {
if (type == ";") return popContext(state);
if (type == "{" && allowNested) return pushContext(state, stream, "propBlock");
if (type == "}" || type == "{") return popAndPass(type, stream, state);
if (type == "(") return pushContext(state, stream, "parens");
if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {
override += " error";
} else if (type == "word") {
wordAsValue(stream);
} else if (type == "interpolation") {
return pushContext(state, stream, "interpolation");
}
return "prop";
};
states.propBlock = function(type, _stream, state) {
if (type == "}") return popContext(state);
if (type == "word") { override = "property"; return "maybeprop"; }
return state.context.type;
};
states.parens = function(type, stream, state) {
if (type == "{" || type == "}") return popAndPass(type, stream, state);
if (type == ")") return popContext(state);
if (type == "(") return pushContext(state, stream, "parens");
if (type == "interpolation") return pushContext(state, stream, "interpolation");
if (type == "word") wordAsValue(stream);
return "parens";
};
states.pseudo = function(type, stream, state) {
if (type == "meta") return "pseudo";
if (type == "word") {
override = "variable-3";
return state.context.type;
}
return pass(type, stream, state);
};
states.documentTypes = function(type, stream, state) {
if (type == "word" && documentTypes.hasOwnProperty(stream.current())) {
override = "tag";
return state.context.type;
} else {
return states.atBlock(type, stream, state);
}
};
states.atBlock = function(type, stream, state) {
if (type == "(") return pushContext(state, stream, "atBlock_parens");
if (type == "}" || type == ";") return popAndPass(type, stream, state);
if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top");
if (type == "interpolation") return pushContext(state, stream, "interpolation");
if (type == "word") {
var word = stream.current().toLowerCase();
if (word == "only" || word == "not" || word == "and" || word == "or")
override = "keyword";
else if (mediaTypes.hasOwnProperty(word))
override = "attribute";
else if (mediaFeatures.hasOwnProperty(word))
override = "property";
else if (mediaValueKeywords.hasOwnProperty(word))
override = "keyword";
else if (propertyKeywords.hasOwnProperty(word))
override = "property";
else if (nonStandardPropertyKeywords.hasOwnProperty(word))
override = "string-2";
else if (valueKeywords.hasOwnProperty(word))
override = "atom";
else if (colorKeywords.hasOwnProperty(word))
override = "keyword";
else
override = "error";
}
return state.context.type;
};
states.atComponentBlock = function(type, stream, state) {
if (type == "}")
return popAndPass(type, stream, state);
if (type == "{")
return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false);
if (type == "word")
override = "error";
return state.context.type;
};
states.atBlock_parens = function(type, stream, state) {
if (type == ")") return popContext(state);
if (type == "{" || type == "}") return popAndPass(type, stream, state, 2);
return states.atBlock(type, stream, state);
};
states.restricted_atBlock_before = function(type, stream, state) {
if (type == "{")
return pushContext(state, stream, "restricted_atBlock");
if (type == "word" && state.stateArg == "@counter-style") {
override = "variable";
return "restricted_atBlock_before";
}
return pass(type, stream, state);
};
states.restricted_atBlock = function(type, stream, state) {
if (type == "}") {
state.stateArg = null;
return popContext(state);
}
if (type == "word") {
if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||
(state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))
override = "error";
else
override = "property";
return "maybeprop";
}
return "restricted_atBlock";
};
states.keyframes = function(type, stream, state) {
if (type == "word") { override = "variable"; return "keyframes"; }
if (type == "{") return pushContext(state, stream, "top");
return pass(type, stream, state);
};
states.at = function(type, stream, state) {
if (type == ";") return popContext(state);
if (type == "{" || type == "}") return popAndPass(type, stream, state);
if (type == "word") override = "tag";
else if (type == "hash") override = "builtin";
return "at";
};
states.interpolation = function(type, stream, state) {
if (type == "}") return popContext(state);
if (type == "{" || type == ";") return popAndPass(type, stream, state);
if (type == "word") override = "variable";
else if (type != "variable" && type != "(" && type != ")") override = "error";
return "interpolation";
};
return {
startState: function(base) {
return {tokenize: null,
state: inline ? "block" : "top",
stateArg: null,
context: new Context(inline ? "block" : "top", base || 0, null)};
},
token: function(stream, state) {
if (!state.tokenize && stream.eatSpace()) return null;
var style = (state.tokenize || tokenBase)(stream, state);
if (style && typeof style == "object") {
type = style[1];
style = style[0];
}
override = style;
if (type != "comment")
state.state = states[state.state](type, stream, state);
return override;
},
indent: function(state, textAfter) {
var cx = state.context, ch = textAfter && textAfter.charAt(0);
var indent = cx.indent;
if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev;
if (cx.prev) {
if (ch == "}" && (cx.type == "block" || cx.type == "top" ||
cx.type == "interpolation" || cx.type == "restricted_atBlock")) {
// Resume indentation from parent context.
cx = cx.prev;
indent = cx.indent;
} else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") ||
ch == "{" && (cx.type == "at" || cx.type == "atBlock")) {
// Dedent relative to current context.
indent = Math.max(0, cx.indent - indentUnit);
}
}
return indent;
},
electricChars: "}",
blockCommentStart: "/*",
blockCommentEnd: "*/",
blockCommentContinue: " * ",
lineComment: lineComment,
fold: "brace"
};
});
function keySet(array) {
var keys = {};
for (var i = 0; i < array.length; ++i) {
keys[array[i].toLowerCase()] = true;
}
return keys;
}
var documentTypes_ = [
"domain", "regexp", "url", "url-prefix"
], documentTypes = keySet(documentTypes_);
var mediaTypes_ = [
"all", "aural", "braille", "handheld", "print", "projection", "screen",
"tty", "tv", "embossed"
], mediaTypes = keySet(mediaTypes_);
var mediaFeatures_ = [
"width", "min-width", "max-width", "height", "min-height", "max-height",
"device-width", "min-device-width", "max-device-width", "device-height",
"min-device-height", "max-device-height", "aspect-ratio",
"min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio",
"min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color",
"max-color", "color-index", "min-color-index", "max-color-index",
"monochrome", "min-monochrome", "max-monochrome", "resolution",
"min-resolution", "max-resolution", "scan", "grid", "orientation",
"device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio",
"pointer", "any-pointer", "hover", "any-hover"
], mediaFeatures = keySet(mediaFeatures_);
var mediaValueKeywords_ = [
"landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover",
"interlace", "progressive"
], mediaValueKeywords = keySet(mediaValueKeywords_);
var propertyKeywords_ = [
"align-content", "align-items", "align-self", "alignment-adjust",
"alignment-baseline", "anchor-point", "animation", "animation-delay",
"animation-direction", "animation-duration", "animation-fill-mode",
"animation-iteration-count", "animation-name", "animation-play-state",
"animation-timing-function", "appearance", "azimuth", "backface-visibility",
"background", "background-attachment", "background-blend-mode", "background-clip",
"background-color", "background-image", "background-origin", "background-position",
"background-repeat", "background-size", "baseline-shift", "binding",
"bleed", "bookmark-label", "bookmark-level", "bookmark-state",
"bookmark-target", "border", "border-bottom", "border-bottom-color",
"border-bottom-left-radius", "border-bottom-right-radius",
"border-bottom-style", "border-bottom-width", "border-collapse",
"border-color", "border-image", "border-image-outset",
"border-image-repeat", "border-image-slice", "border-image-source",
"border-image-width", "border-left", "border-left-color",
"border-left-style", "border-left-width", "border-radius", "border-right",
"border-right-color", "border-right-style", "border-right-width",
"border-spacing", "border-style", "border-top", "border-top-color",
"border-top-left-radius", "border-top-right-radius", "border-top-style",
"border-top-width", "border-width", "bottom", "box-decoration-break",
"box-shadow", "box-sizing", "break-after", "break-before", "break-inside",
"caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count",
"column-fill", "column-gap", "column-rule", "column-rule-color",
"column-rule-style", "column-rule-width", "column-span", "column-width",
"columns", "content", "counter-increment", "counter-reset", "crop", "cue",
"cue-after", "cue-before", "cursor", "direction", "display",
"dominant-baseline", "drop-initial-after-adjust",
"drop-initial-after-align", "drop-initial-before-adjust",
"drop-initial-before-align", "drop-initial-size", "drop-initial-value",
"elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis",
"flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap",
"float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings",
"font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust",
"font-stretch", "font-style", "font-synthesis", "font-variant",
"font-variant-alternates", "font-variant-caps", "font-variant-east-asian",
"font-variant-ligatures", "font-variant-numeric", "font-variant-position",
"font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow",
"grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap",
"grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap",
"grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns",
"grid-template-rows", "hanging-punctuation", "height", "hyphens",
"icon", "image-orientation", "image-rendering", "image-resolution",
"inline-box-align", "justify-content", "justify-items", "justify-self", "left", "letter-spacing",
"line-break", "line-height", "line-stacking", "line-stacking-ruby",
"line-stacking-shift", "line-stacking-strategy", "list-style",
"list-style-image", "list-style-position", "list-style-type", "margin",
"margin-bottom", "margin-left", "margin-right", "margin-top",
"marks", "marquee-direction", "marquee-loop",
"marquee-play-count", "marquee-speed", "marquee-style", "max-height",
"max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index",
"nav-left", "nav-right", "nav-up", "object-fit", "object-position",
"opacity", "order", "orphans", "outline",
"outline-color", "outline-offset", "outline-style", "outline-width",
"overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y",
"padding", "padding-bottom", "padding-left", "padding-right", "padding-top",
"page", "page-break-after", "page-break-before", "page-break-inside",
"page-policy", "pause", "pause-after", "pause-before", "perspective",
"perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position",
"presentation-level", "punctuation-trim", "quotes", "region-break-after",
"region-break-before", "region-break-inside", "region-fragment",
"rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness",
"right", "rotation", "rotation-point", "ruby-align", "ruby-overhang",
"ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin",
"shape-outside", "size", "speak", "speak-as", "speak-header",
"speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set",
"tab-size", "table-layout", "target", "target-name", "target-new",
"target-position", "text-align", "text-align-last", "text-decoration",
"text-decoration-color", "text-decoration-line", "text-decoration-skip",
"text-decoration-style", "text-emphasis", "text-emphasis-color",
"text-emphasis-position", "text-emphasis-style", "text-height",
"text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow",
"text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position",
"text-wrap", "top", "transform", "transform-origin", "transform-style",
"transition", "transition-delay", "transition-duration",
"transition-property", "transition-timing-function", "unicode-bidi",
"user-select", "vertical-align", "visibility", "voice-balance", "voice-duration",
"voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress",
"voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break",
"word-spacing", "word-wrap", "z-index",
// SVG-specific
"clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
"flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
"color-interpolation", "color-interpolation-filters",
"color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
"marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke",
"stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
"stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
"baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
"glyph-orientation-vertical", "text-anchor", "writing-mode"
], propertyKeywords = keySet(propertyKeywords_);
var nonStandardPropertyKeywords_ = [
"scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color",
"scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color",
"scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside",
"searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button",
"searchfield-results-decoration", "zoom"
], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);
var fontProperties_ = [
"font-family", "src", "unicode-range", "font-variant", "font-feature-settings",
"font-stretch", "font-weight", "font-style"
], fontProperties = keySet(fontProperties_);
var counterDescriptors_ = [
"additive-symbols", "fallback", "negative", "pad", "prefix", "range",
"speak-as", "suffix", "symbols", "system"
], counterDescriptors = keySet(counterDescriptors_);
var colorKeywords_ = [
"aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
"bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
"burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue",
"cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod",
"darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen",
"darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen",
"darkslateblue", "darkslategray", "darkturquoise", "darkviolet",
"deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick",
"floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite",
"gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew",
"hotpink", "indianred", "indigo", "ivory", "khaki", "lavender",
"lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral",
"lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink",
"lightsalmon", "lightseagreen", "lightskyblue", "lightslategray",
"lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta",
"maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
"mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise",
"mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin",
"navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered",
"orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred",
"papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue",
"purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown",
"salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue",
"slateblue", "slategray", "snow", "springgreen", "steelblue", "tan",
"teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white",
"whitesmoke", "yellow", "yellowgreen"
], colorKeywords = keySet(colorKeywords_);
var valueKeywords_ = [
"above", "absolute", "activeborder", "additive", "activecaption", "afar",
"after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate",
"always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
"arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page",
"avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary",
"bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
"both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel",
"buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian",
"capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
"cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch",
"cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
"col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse",
"compact", "condensed", "contain", "content", "contents",
"content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop",
"cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal",
"decimal-leading-zero", "default", "default-button", "dense", "destination-atop",
"destination-in", "destination-out", "destination-over", "devanagari", "difference",
"disc", "discard", "disclosure-closed", "disclosure-open", "document",
"dot-dash", "dot-dot-dash",
"dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
"element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
"ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
"ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
"ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
"ethiopic-halehame-gez", "ethiopic-halehame-om-et",
"ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
"ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig",
"ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed",
"extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes",
"forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove",
"gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew",
"help", "hidden", "hide", "higher", "highlight", "highlighttext",
"hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore",
"inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
"infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
"inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert",
"italic", "japanese-formal", "japanese-informal", "justify", "kannada",
"katakana", "katakana-iroha", "keep-all", "khmer",
"korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal",
"landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten",
"line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem",
"local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
"lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
"lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d",
"media-controls-background", "media-current-time-display",
"media-fullscreen-button", "media-mute-button", "media-play-button",
"media-return-to-realtime-button", "media-rewind-button",
"media-seek-back-button", "media-seek-forward-button", "media-slider",
"media-sliderthumb", "media-time-remaining-display", "media-volume-slider",
"media-volume-slider-container", "media-volume-sliderthumb", "medium",
"menu", "menulist", "menulist-button", "menulist-text",
"menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic",
"mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize",
"narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
"no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
"ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote",
"optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
"outside", "outside-shape", "overlay", "overline", "padding", "padding-box",
"painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter",
"pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d",
"progress", "push-button", "radial-gradient", "radio", "read-only",
"read-write", "read-write-plaintext-only", "rectangle", "region",
"relative", "repeat", "repeating-linear-gradient",
"repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse",
"rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY",
"rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running",
"s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen",
"scroll", "scrollbar", "scroll-position", "se-resize", "searchfield",
"searchfield-cancel-button", "searchfield-decoration",
"searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end",
"semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama",
"simp-chinese-formal", "simp-chinese-informal", "single",
"skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal",
"slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
"small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali",
"source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square",
"square-button", "start", "static", "status-bar", "stretch", "stroke", "sub",
"subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table",
"table-caption", "table-cell", "table-column", "table-column-group",
"table-footer-group", "table-header-group", "table-row", "table-row-group",
"tamil",
"telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai",
"thick", "thin", "threeddarkshadow", "threedface", "threedhighlight",
"threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er",
"tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
"trad-chinese-formal", "trad-chinese-informal", "transform",
"translate", "translate3d", "translateX", "translateY", "translateZ",
"transparent", "ultra-condensed", "ultra-expanded", "underline", "unset", "up",
"upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
"upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
"var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted",
"visibleStroke", "visual", "w-resize", "wait", "wave", "wider",
"window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor",
"xx-large", "xx-small"
], valueKeywords = keySet(valueKeywords_);
var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)
.concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)
.concat(valueKeywords_);
CodeMirror.registerHelper("hintWords", "css", allWords);
function tokenCComment(stream, state) {
var maybeEnd = false, ch;
while ((ch = stream.next()) != null) {
if (maybeEnd && ch == "/") {
state.tokenize = null;
break;
}
maybeEnd = (ch == "*");
}
return ["comment", "comment"];
}
CodeMirror.defineMIME("text/css", {
documentTypes: documentTypes,
mediaTypes: mediaTypes,
mediaFeatures: mediaFeatures,
mediaValueKeywords: mediaValueKeywords,
propertyKeywords: propertyKeywords,
nonStandardPropertyKeywords: nonStandardPropertyKeywords,
fontProperties: fontProperties,
counterDescriptors: counterDescriptors,
colorKeywords: colorKeywords,
valueKeywords: valueKeywords,
tokenHooks: {
"/": function(stream, state) {
if (!stream.eat("*")) return false;
state.tokenize = tokenCComment;
return tokenCComment(stream, state);
}
},
name: "css"
});
CodeMirror.defineMIME("text/x-scss", {
mediaTypes: mediaTypes,
mediaFeatures: mediaFeatures,
mediaValueKeywords: mediaValueKeywords,
propertyKeywords: propertyKeywords,
nonStandardPropertyKeywords: nonStandardPropertyKeywords,
colorKeywords: colorKeywords,
valueKeywords: valueKeywords,
fontProperties: fontProperties,
allowNested: true,
lineComment: "//",
tokenHooks: {
"/": function(stream, state) {
if (stream.eat("/")) {
stream.skipToEnd();
return ["comment", "comment"];
} else if (stream.eat("*")) {
state.tokenize = tokenCComment;
return tokenCComment(stream, state);
} else {
return ["operator", "operator"];
}
},
":": function(stream) {
if (stream.match(/\s*\{/, false))
return [null, null]
return false;
},
"$": function(stream) {
stream.match(/^[\w-]+/);
if (stream.match(/^\s*:/, false))
return ["variable-2", "variable-definition"];
return ["variable-2", "variable"];
},
"#": function(stream) {
if (!stream.eat("{")) return false;
return [null, "interpolation"];
}
},
name: "css",
helperType: "scss"
});
CodeMirror.defineMIME("text/x-less", {
mediaTypes: mediaTypes,
mediaFeatures: mediaFeatures,
mediaValueKeywords: mediaValueKeywords,
propertyKeywords: propertyKeywords,
nonStandardPropertyKeywords: nonStandardPropertyKeywords,
colorKeywords: colorKeywords,
valueKeywords: valueKeywords,
fontProperties: fontProperties,
allowNested: true,
lineComment: "//",
tokenHooks: {
"/": function(stream, state) {
if (stream.eat("/")) {
stream.skipToEnd();
return ["comment", "comment"];
} else if (stream.eat("*")) {
state.tokenize = tokenCComment;
return tokenCComment(stream, state);
} else {
return ["operator", "operator"];
}
},
"@": function(stream) {
if (stream.eat("{")) return [null, "interpolation"];
if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false;
stream.eatWhile(/[\w\\\-]/);
if (stream.match(/^\s*:/, false))
return ["variable-2", "variable-definition"];
return ["variable-2", "variable"];
},
"&": function() {
return ["atom", "atom"];
}
},
name: "css",
helperType: "less"
});
CodeMirror.defineMIME("text/x-gss", {
documentTypes: documentTypes,
mediaTypes: mediaTypes,
mediaFeatures: mediaFeatures,
propertyKeywords: propertyKeywords,
nonStandardPropertyKeywords: nonStandardPropertyKeywords,
fontProperties: fontProperties,
counterDescriptors: counterDescriptors,
colorKeywords: colorKeywords,
valueKeywords: valueKeywords,
supportsAtComponent: true,
tokenHooks: {
"/": function(stream, state) {
if (!stream.eat("*")) return false;
state.tokenize = tokenCComment;
return tokenCComment(stream, state);
}
},
name: "css",
helperType: "gss"
});
});
@@ -1,103 +0,0 @@
<!doctype html>
<title>CodeMirror: Closure Stylesheets (GSS) mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<link rel="stylesheet" href="../../addon/hint/show-hint.css">
<script src="../../lib/codemirror.js"></script>
<script src="css.js"></script>
<script src="../../addon/hint/show-hint.js"></script>
<script src="../../addon/hint/css-hint.js"></script>
<style>.CodeMirror {background: #f8f8f8;}</style>
<div id=nav>
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">Closure Stylesheets (GSS)</a>
</ul>
</div>
<article>
<h2>Closure Stylesheets (GSS) mode</h2>
<form><textarea id="code" name="code">
/* Some example Closure Stylesheets */
@provide 'some.styles';
@require 'other.styles';
@component {
@def FONT_FAMILY "Times New Roman", Georgia, Serif;
@def FONT_SIZE_NORMAL 15px;
@def FONT_NORMAL normal FONT_SIZE_NORMAL FONT_FAMILY;
@def BG_COLOR rgb(235, 239, 249);
@def DIALOG_BORDER_COLOR rgb(107, 144, 218);
@def DIALOG_BG_COLOR BG_COLOR;
@def LEFT_HAND_NAV_WIDTH 180px;
@def LEFT_HAND_NAV_PADDING 3px;
@defmixin size(WIDTH, HEIGHT) {
width: WIDTH;
height: HEIGHT;
}
body {
background-color: BG_COLOR;
margin: 0;
padding: 3em 6em;
font: FONT_NORMAL;
color: #000;
}
#navigation a {
font-weight: bold;
text-decoration: none !important;
}
.dialog {
background-color: DIALOG_BG_COLOR;
border: 1px solid DIALOG_BORDER_COLOR;
}
.content {
position: absolute;
margin-left: add(LEFT_HAND_NAV_PADDING, /* padding left */
LEFT_HAND_NAV_WIDTH,
LEFT_HAND_NAV_PADDING); /* padding right */
}
.logo {
@mixin size(150px, 55px);
background-image: url('http://www.google.com/images/logo_sm.gif');
}
}
</textarea></form>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
extraKeys: {"Ctrl-Space": "autocomplete"},
lineNumbers: true,
matchBrackets: "text/x-less",
mode: "text/x-gss"
});
</script>
<p>A mode for <a href="https://github.com/google/closure-stylesheets">Closure Stylesheets</a> (GSS).</p>
<p><strong>MIME type defined:</strong> <code>text/x-gss</code>.</p>
<p><strong>Parsing/Highlighting Tests:</strong> <a href="../../test/index.html#gss_*">normal</a>, <a href="../../test/index.html#verbose,gss_*">verbose</a>.</p>
</article>
@@ -1,17 +0,0 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function() {
"use strict";
var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-gss");
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "gss"); }
MT("atComponent",
"[def @component] {",
"[tag foo] {",
" [property color]: [keyword black];",
"}",
"}");
})();
@@ -1,75 +0,0 @@
<!doctype html>
<title>CodeMirror: CSS mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<link rel="stylesheet" href="../../addon/hint/show-hint.css">
<script src="../../lib/codemirror.js"></script>
<script src="css.js"></script>
<script src="../../addon/hint/show-hint.js"></script>
<script src="../../addon/hint/css-hint.js"></script>
<style>.CodeMirror {background: #f8f8f8;}</style>
<div id=nav>
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">CSS</a>
</ul>
</div>
<article>
<h2>CSS mode</h2>
<form><textarea id="code" name="code">
/* Some example CSS */
@import url("something.css");
body {
margin: 0;
padding: 3em 6em;
font-family: tahoma, arial, sans-serif;
color: #000;
}
#navigation a {
font-weight: bold;
text-decoration: none !important;
}
h1 {
font-size: 2.5em;
}
h2 {
font-size: 1.7em;
}
h1:before, h2:before {
content: "::";
}
code {
font-family: courier, monospace;
font-size: 80%;
color: #418A8A;
}
</textarea></form>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
extraKeys: {"Ctrl-Space": "autocomplete"}
});
</script>
<p><strong>MIME types defined:</strong> <code>text/css</code>, <code>text/x-scss</code> (<a href="scss.html">demo</a>), <code>text/x-less</code> (<a href="less.html">demo</a>).</p>
<p><strong>Parsing/Highlighting Tests:</strong> <a href="../../test/index.html#css_*">normal</a>, <a href="../../test/index.html#verbose,css_*">verbose</a>.</p>
</article>
@@ -1,152 +0,0 @@
<!doctype html>
<title>CodeMirror: LESS mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="../../addon/edit/matchbrackets.js"></script>
<script src="css.js"></script>
<style>.CodeMirror {border: 1px solid #ddd; line-height: 1.2;}</style>
<div id=nav>
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">LESS</a>
</ul>
</div>
<article>
<h2>LESS mode</h2>
<form><textarea id="code" name="code">@media screen and (device-aspect-ratio: 16/9) { … }
@media screen and (device-aspect-ratio: 1280/720) { … }
@media screen and (device-aspect-ratio: 2560/1440) { … }
html:lang(fr-be)
tr:nth-child(2n+1) /* represents every odd row of an HTML table */
img:nth-of-type(2n+1) { float: right; }
img:nth-of-type(2n) { float: left; }
body > h2:not(:first-of-type):not(:last-of-type)
html|*:not(:link):not(:visited)
*|*:not(:hover)
p::first-line { text-transform: uppercase }
@namespace foo url(http://www.example.com);
foo|h1 { color: blue } /* first rule */
span[hello="Ocean"][goodbye="Land"]
E[foo]{
padding:65px;
}
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
}
button::-moz-focus-inner,
input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
padding: 0;
border: 0;
}
.btn {
// reset here as of 2.0.3 due to Recess property order
border-color: #ccc;
border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);
}
fieldset span button, fieldset span input[type="file"] {
font-size:12px;
font-family:Arial, Helvetica, sans-serif;
}
.rounded-corners (@radius: 5px) {
border-radius: @radius;
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
}
@import url("something.css");
@light-blue: hsl(190, 50%, 65%);
#menu {
position: absolute;
width: 100%;
z-index: 3;
clear: both;
display: block;
background-color: @blue;
height: 42px;
border-top: 2px solid lighten(@alpha-blue, 20%);
border-bottom: 2px solid darken(@alpha-blue, 25%);
.box-shadow(0, 1px, 8px, 0.6);
-moz-box-shadow: 0 0 0 #000; // Because firefox sucks.
&.docked {
background-color: hsla(210, 60%, 40%, 0.4);
}
&:hover {
background-color: @blue;
}
#dropdown {
margin: 0 0 0 117px;
padding: 0;
padding-top: 5px;
display: none;
width: 190px;
border-top: 2px solid @medium;
color: @highlight;
border: 2px solid darken(@medium, 25%);
border-left-color: darken(@medium, 15%);
border-right-color: darken(@medium, 15%);
border-top-width: 0;
background-color: darken(@medium, 10%);
ul {
padding: 0px;
}
li {
font-size: 14px;
display: block;
text-align: left;
padding: 0;
border: 0;
a {
display: block;
padding: 0px 15px;
text-decoration: none;
color: white;
&:hover {
background-color: darken(@medium, 15%);
text-decoration: none;
}
}
}
.border-radius(5px, bottom);
.box-shadow(0, 6px, 8px, 0.5);
}
}
</textarea></form>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
lineNumbers : true,
matchBrackets : true,
mode: "text/x-less"
});
</script>
<p>The LESS mode is a sub-mode of the <a href="index.html">CSS mode</a> (defined in <code>css.js</code>).</p>
<p><strong>Parsing/Highlighting Tests:</strong> <a href="../../test/index.html#less_*">normal</a>, <a href="../../test/index.html#verbose,less_*">verbose</a>.</p>
</article>
@@ -1,54 +0,0 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function() {
"use strict";
var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less");
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); }
MT("variable",
"[variable-2 @base]: [atom #f04615];",
"[qualifier .class] {",
" [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]",
" [property color]: [variable saturate]([variable-2 @base], [number 5%]);",
"}");
MT("amp",
"[qualifier .child], [qualifier .sibling] {",
" [qualifier .parent] [atom &] {",
" [property color]: [keyword black];",
" }",
" [atom &] + [atom &] {",
" [property color]: [keyword red];",
" }",
"}");
MT("mixin",
"[qualifier .mixin] ([variable dark]; [variable-2 @color]) {",
" [property color]: [atom darken]([variable-2 @color], [number 10%]);",
"}",
"[qualifier .mixin] ([variable light]; [variable-2 @color]) {",
" [property color]: [atom lighten]([variable-2 @color], [number 10%]);",
"}",
"[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {",
" [property display]: [atom block];",
"}",
"[variable-2 @switch]: [variable light];",
"[qualifier .class] {",
" [qualifier .mixin]([variable-2 @switch]; [atom #888]);",
"}");
MT("nest",
"[qualifier .one] {",
" [def @media] ([property width]: [number 400px]) {",
" [property font-size]: [number 1.2em];",
" [def @media] [attribute print] [keyword and] [property color] {",
" [property color]: [keyword blue];",
" }",
" }",
"}");
MT("interpolation", ".@{[variable foo]} { [property font-weight]: [atom bold]; }");
})();
@@ -1,157 +0,0 @@
<!doctype html>
<title>CodeMirror: SCSS mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="css.js"></script>
<style>.CodeMirror {background: #f8f8f8;}</style>
<div id=nav>
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">SCSS</a>
</ul>
</div>
<article>
<h2>SCSS mode</h2>
<form><textarea id="code" name="code">
/* Some example SCSS */
@import "compass/css3";
$variable: #333;
$blue: #3bbfce;
$margin: 16px;
.content-navigation {
#nested {
background-color: black;
}
border-color: $blue;
color:
darken($blue, 9%);
}
.border {
padding: $margin / 2;
margin: $margin / 2;
border-color: $blue;
}
@mixin table-base {
th {
text-align: center;
font-weight: bold;
}
td, th {padding: 2px}
}
table.hl {
margin: 2em 0;
td.ln {
text-align: right;
}
}
li {
font: {
family: serif;
weight: bold;
size: 1.2em;
}
}
@mixin left($dist) {
float: left;
margin-left: $dist;
}
#data {
@include left(10px);
@include table-base;
}
.source {
@include flow-into(target);
border: 10px solid green;
margin: 20px;
width: 200px; }
.new-container {
@include flow-from(target);
border: 10px solid red;
margin: 20px;
width: 200px; }
body {
margin: 0;
padding: 3em 6em;
font-family: tahoma, arial, sans-serif;
color: #000;
}
@mixin yellow() {
background: yellow;
}
.big {
font-size: 14px;
}
.nested {
@include border-radius(3px);
@extend .big;
p {
background: whitesmoke;
a {
color: red;
}
}
}
#navigation a {
font-weight: bold;
text-decoration: none !important;
}
h1 {
font-size: 2.5em;
}
h2 {
font-size: 1.7em;
}
h1:before, h2:before {
content: "::";
}
code {
font-family: courier, monospace;
font-size: 80%;
color: #418A8A;
}
</textarea></form>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
lineNumbers: true,
matchBrackets: true,
mode: "text/x-scss"
});
</script>
<p>The SCSS mode is a sub-mode of the <a href="index.html">CSS mode</a> (defined in <code>css.js</code>).</p>
<p><strong>Parsing/Highlighting Tests:</strong> <a href="../../test/index.html#scss_*">normal</a>, <a href="../../test/index.html#verbose,scss_*">verbose</a>.</p>
</article>
@@ -1,110 +0,0 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function() {
var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-scss");
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); }
MT('url_with_quotation',
"[tag foo] { [property background]:[atom url]([string test.jpg]) }");
MT('url_with_double_quotes',
"[tag foo] { [property background]:[atom url]([string \"test.jpg\"]) }");
MT('url_with_single_quotes',
"[tag foo] { [property background]:[atom url]([string \'test.jpg\']) }");
MT('string',
"[def @import] [string \"compass/css3\"]");
MT('important_keyword',
"[tag foo] { [property background]:[atom url]([string \'test.jpg\']) [keyword !important] }");
MT('variable',
"[variable-2 $blue]:[atom #333]");
MT('variable_as_attribute',
"[tag foo] { [property color]:[variable-2 $blue] }");
MT('numbers',
"[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }");
MT('number_percentage',
"[tag foo] { [property width]:[number 80%] }");
MT('selector',
"[builtin #hello][qualifier .world]{}");
MT('singleline_comment',
"[comment // this is a comment]");
MT('multiline_comment',
"[comment /*foobar*/]");
MT('attribute_with_hyphen',
"[tag foo] { [property font-size]:[number 10px] }");
MT('string_after_attribute',
"[tag foo] { [property content]:[string \"::\"] }");
MT('directives',
"[def @include] [qualifier .mixin]");
MT('basic_structure',
"[tag p] { [property background]:[keyword red]; }");
MT('nested_structure',
"[tag p] { [tag a] { [property color]:[keyword red]; } }");
MT('mixin',
"[def @mixin] [tag table-base] {}");
MT('number_without_semicolon',
"[tag p] {[property width]:[number 12]}",
"[tag a] {[property color]:[keyword red];}");
MT('atom_in_nested_block',
"[tag p] { [tag a] { [property color]:[atom #000]; } }");
MT('interpolation_in_property',
"[tag foo] { #{[variable-2 $hello]}:[number 2]; }");
MT('interpolation_in_selector',
"[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }");
MT('interpolation_error',
"[tag foo]#{[variable foo]} { [property color]:[atom #000]; }");
MT("divide_operator",
"[tag foo] { [property width]:[number 4] [operator /] [number 2] }");
MT('nested_structure_with_id_selector',
"[tag p] { [builtin #hello] { [property color]:[keyword red]; } }");
MT('indent_mixin',
"[def @mixin] [tag container] (",
" [variable-2 $a]: [number 10],",
" [variable-2 $b]: [number 10])",
"{}");
MT('indent_nested',
"[tag foo] {",
" [tag bar] {",
" }",
"}");
MT('indent_parentheses',
"[tag foo] {",
" [property color]: [atom darken]([variable-2 $blue],",
" [number 9%]);",
"}");
MT('indent_vardef',
"[variable-2 $name]:",
" [string 'val'];",
"[tag tag] {",
" [tag inner] {",
" [property margin]: [number 3px];",
" }",
"}");
})();
@@ -1,209 +0,0 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function() {
var mode = CodeMirror.getMode({indentUnit: 2}, "css");
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
// Error, because "foobarhello" is neither a known type or property, but
// property was expected (after "and"), and it should be in parentheses.
MT("atMediaUnknownType",
"[def @media] [attribute screen] [keyword and] [error foobarhello] { }");
// Soft error, because "foobarhello" is not a known property or type.
MT("atMediaUnknownProperty",
"[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }");
// Make sure nesting works with media queries
MT("atMediaMaxWidthNested",
"[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }");
MT("atMediaFeatureValueKeyword",
"[def @media] ([property orientation]: [keyword landscape]) { }");
MT("atMediaUnknownFeatureValueKeyword",
"[def @media] ([property orientation]: [error upsidedown]) { }");
MT("atMediaUppercase",
"[def @MEDIA] ([property orienTAtion]: [keyword landScape]) { }");
MT("tagSelector",
"[tag foo] { }");
MT("classSelector",
"[qualifier .foo-bar_hello] { }");
MT("idSelector",
"[builtin #foo] { [error #foo] }");
MT("tagSelectorUnclosed",
"[tag foo] { [property margin]: [number 0] } [tag bar] { }");
MT("tagStringNoQuotes",
"[tag foo] { [property font-family]: [variable hello] [variable world]; }");
MT("tagStringDouble",
"[tag foo] { [property font-family]: [string \"hello world\"]; }");
MT("tagStringSingle",
"[tag foo] { [property font-family]: [string 'hello world']; }");
MT("tagColorKeyword",
"[tag foo] {",
" [property color]: [keyword black];",
" [property color]: [keyword navy];",
" [property color]: [keyword yellow];",
"}");
MT("tagColorHex3",
"[tag foo] { [property background]: [atom #fff]; }");
MT("tagColorHex4",
"[tag foo] { [property background]: [atom #ffff]; }");
MT("tagColorHex6",
"[tag foo] { [property background]: [atom #ffffff]; }");
MT("tagColorHex8",
"[tag foo] { [property background]: [atom #ffffffff]; }");
MT("tagColorHex5Invalid",
"[tag foo] { [property background]: [atom&error #fffff]; }");
MT("tagColorHexInvalid",
"[tag foo] { [property background]: [atom&error #ffg]; }");
MT("tagNegativeNumber",
"[tag foo] { [property margin]: [number -5px]; }");
MT("tagPositiveNumber",
"[tag foo] { [property padding]: [number 5px]; }");
MT("tagVendor",
"[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }");
MT("tagBogusProperty",
"[tag foo] { [property&error barhelloworld]: [number 0]; }");
MT("tagTwoProperties",
"[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }");
MT("tagTwoPropertiesURL",
"[tag foo] { [property background]: [atom url]([string //example.com/foo.png]); [property padding]: [number 0]; }");
MT("indent_tagSelector",
"[tag strong], [tag em] {",
" [property background]: [atom rgba](",
" [number 255], [number 255], [number 0], [number .2]",
" );",
"}");
MT("indent_atMedia",
"[def @media] {",
" [tag foo] {",
" [property color]:",
" [keyword yellow];",
" }",
"}");
MT("indent_comma",
"[tag foo] {",
" [property font-family]: [variable verdana],",
" [atom sans-serif];",
"}");
MT("indent_parentheses",
"[tag foo]:[variable-3 before] {",
" [property background]: [atom url](",
"[string blahblah]",
"[string etc]",
"[string ]) [keyword !important];",
"}");
MT("font_face",
"[def @font-face] {",
" [property font-family]: [string 'myfont'];",
" [error nonsense]: [string 'abc'];",
" [property src]: [atom url]([string http://blah]),",
" [atom url]([string http://foo]);",
"}");
MT("empty_url",
"[def @import] [atom url]() [attribute screen];");
MT("parens",
"[qualifier .foo] {",
" [property background-image]: [variable fade]([atom #000], [number 20%]);",
" [property border-image]: [atom linear-gradient](",
" [atom to] [atom bottom],",
" [variable fade]([atom #000], [number 20%]) [number 0%],",
" [variable fade]([atom #000], [number 20%]) [number 100%]",
" );",
"}");
MT("css_variable",
":[variable-3 root] {",
" [variable-2 --main-color]: [atom #06c];",
"}",
"[tag h1][builtin #foo] {",
" [property color]: [atom var]([variable-2 --main-color]);",
"}");
MT("supports",
"[def @supports] ([keyword not] (([property text-align-last]: [atom justify]) [keyword or] ([meta -moz-][property text-align-last]: [atom justify])) {",
" [property text-align-last]: [atom justify];",
"}");
MT("document",
"[def @document] [tag url]([string http://blah]),",
" [tag url-prefix]([string https://]),",
" [tag domain]([string blah.com]),",
" [tag regexp]([string \".*blah.+\"]) {",
" [builtin #id] {",
" [property background-color]: [keyword white];",
" }",
" [tag foo] {",
" [property font-family]: [variable Verdana], [atom sans-serif];",
" }",
"}");
MT("document_url",
"[def @document] [tag url]([string http://blah]) { [qualifier .class] { } }");
MT("document_urlPrefix",
"[def @document] [tag url-prefix]([string https://]) { [builtin #id] { } }");
MT("document_domain",
"[def @document] [tag domain]([string blah.com]) { [tag foo] { } }");
MT("document_regexp",
"[def @document] [tag regexp]([string \".*blah.+\"]) { [builtin #id] { } }");
MT("counter-style",
"[def @counter-style] [variable binary] {",
" [property system]: [atom numeric];",
" [property symbols]: [number 0] [number 1];",
" [property suffix]: [string \".\"];",
" [property range]: [atom infinite];",
" [property speak-as]: [atom numeric];",
"}");
MT("counter-style-additive-symbols",
"[def @counter-style] [variable simple-roman] {",
" [property system]: [atom additive];",
" [property additive-symbols]: [number 10] [variable X], [number 5] [variable V], [number 1] [variable I];",
" [property range]: [number 1] [number 49];",
"}");
MT("counter-style-use",
"[tag ol][qualifier .roman] { [property list-style]: [variable simple-roman]; }");
MT("counter-style-symbols",
"[tag ol] { [property list-style]: [atom symbols]([atom cyclic] [string \"*\"] [string \"\\2020\"] [string \"\\2021\"] [string \"\\A7\"]); }");
MT("comment-does-not-disrupt",
"[def @font-face] [comment /* foo */] {",
" [property src]: [atom url]([string x]);",
" [property font-family]: [variable One];",
"}")
})();
@@ -1,114 +0,0 @@
<!doctype html>
<title>CodeMirror: JavaScript mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="../../addon/edit/matchbrackets.js"></script>
<script src="../../addon/comment/continuecomment.js"></script>
<script src="../../addon/comment/comment.js"></script>
<script src="javascript.js"></script>
<style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
<div id=nav>
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">JavaScript</a>
</ul>
</div>
<article>
<h2>JavaScript mode</h2>
<div><textarea id="code" name="code">
// Demo code (the actual new parser character stream implementation)
function StringStream(string) {
this.pos = 0;
this.string = string;
}
StringStream.prototype = {
done: function() {return this.pos >= this.string.length;},
peek: function() {return this.string.charAt(this.pos);},
next: function() {
if (this.pos &lt; this.string.length)
return this.string.charAt(this.pos++);
},
eat: function(match) {
var ch = this.string.charAt(this.pos);
if (typeof match == "string") var ok = ch == match;
else var ok = ch &amp;&amp; match.test ? match.test(ch) : match(ch);
if (ok) {this.pos++; return ch;}
},
eatWhile: function(match) {
var start = this.pos;
while (this.eat(match));
if (this.pos > start) return this.string.slice(start, this.pos);
},
backUp: function(n) {this.pos -= n;},
column: function() {return this.pos;},
eatSpace: function() {
var start = this.pos;
while (/\s/.test(this.string.charAt(this.pos))) this.pos++;
return this.pos - start;
},
match: function(pattern, consume, caseInsensitive) {
if (typeof pattern == "string") {
function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}
if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {
if (consume !== false) this.pos += str.length;
return true;
}
}
else {
var match = this.string.slice(this.pos).match(pattern);
if (match &amp;&amp; consume !== false) this.pos += match[0].length;
return match;
}
}
};
</textarea></div>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
lineNumbers: true,
matchBrackets: true,
continueComments: "Enter",
extraKeys: {"Ctrl-Q": "toggleComment"}
});
</script>
<p>
JavaScript mode supports several configuration options:
<ul>
<li><code>json</code> which will set the mode to expect JSON
data rather than a JavaScript program.</li>
<li><code>jsonld</code> which will set the mode to expect
<a href="http://json-ld.org">JSON-LD</a> linked data rather
than a JavaScript program (<a href="json-ld.html">demo</a>).</li>
<li><code>typescript</code> which will activate additional
syntax highlighting and some other things for TypeScript code
(<a href="typescript.html">demo</a>).</li>
<li><code>statementIndent</code> which (given a number) will
determine the amount of indentation to use for statements
continued on a new line.</li>
<li><code>wordCharacters</code>, a regexp that indicates which
characters should be considered part of an identifier.
Defaults to <code>/[\w$]/</code>, which does not handle
non-ASCII identifiers. Can be set to something more elaborate
to improve Unicode support.</li>
</ul>
</p>
<p><strong>MIME types defined:</strong> <code>text/javascript</code>, <code>application/json</code>, <code>application/ld+json</code>, <code>text/typescript</code>, <code>application/typescript</code>.</p>
</article>
@@ -1,896 +0,0 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("javascript", function(config, parserConfig) {
var indentUnit = config.indentUnit;
var statementIndent = parserConfig.statementIndent;
var jsonldMode = parserConfig.jsonld;
var jsonMode = parserConfig.json || jsonldMode;
var isTS = parserConfig.typescript;
var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
// Tokenizer
var keywords = function(){
function kw(type) {return {type: type, style: "keyword"};}
var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d");
var operator = kw("operator"), atom = {type: "atom", style: "atom"};
return {
"if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
"return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C,
"debugger": kw("debugger"), "var": kw("var"), "const": kw("var"), "let": kw("var"),
"function": kw("function"), "catch": kw("catch"),
"for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
"in": operator, "typeof": operator, "instanceof": operator,
"true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
"this": kw("this"), "class": kw("class"), "super": kw("atom"),
"yield": C, "export": kw("export"), "import": kw("import"), "extends": C,
"await": C
};
}();
var isOperatorChar = /[+\-*&%=<>!?|~^@]/;
var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
function readRegexp(stream) {
var escaped = false, next, inSet = false;
while ((next = stream.next()) != null) {
if (!escaped) {
if (next == "/" && !inSet) return;
if (next == "[") inSet = true;
else if (inSet && next == "]") inSet = false;
}
escaped = !escaped && next == "\\";
}
}
// Used as scratch variables to communicate multiple values without
// consing up tons of objects.
var type, content;
function ret(tp, style, cont) {
type = tp; content = cont;
return style;
}
function tokenBase(stream, state) {
var ch = stream.next();
if (ch == '"' || ch == "'") {
state.tokenize = tokenString(ch);
return state.tokenize(stream, state);
} else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
return ret("number", "number");
} else if (ch == "." && stream.match("..")) {
return ret("spread", "meta");
} else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
return ret(ch);
} else if (ch == "=" && stream.eat(">")) {
return ret("=>", "operator");
} else if (ch == "0" && stream.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i)) {
return ret("number", "number");
} else if (/\d/.test(ch)) {
stream.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/);
return ret("number", "number");
} else if (ch == "/") {
if (stream.eat("*")) {
state.tokenize = tokenComment;
return tokenComment(stream, state);
} else if (stream.eat("/")) {
stream.skipToEnd();
return ret("comment", "comment");
} else if (expressionAllowed(stream, state, 1)) {
readRegexp(stream);
stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);
return ret("regexp", "string-2");
} else {
stream.eat("=");
return ret("operator", "operator", stream.current());
}
} else if (ch == "`") {
state.tokenize = tokenQuasi;
return tokenQuasi(stream, state);
} else if (ch == "#") {
stream.skipToEnd();
return ret("error", "error");
} else if (isOperatorChar.test(ch)) {
if (ch != ">" || !state.lexical || state.lexical.type != ">") {
if (stream.eat("=")) {
if (ch == "!" || ch == "=") stream.eat("=")
} else if (/[<>*+\-]/.test(ch)) {
stream.eat(ch)
if (ch == ">") stream.eat(ch)
}
}
return ret("operator", "operator", stream.current());
} else if (wordRE.test(ch)) {
stream.eatWhile(wordRE);
var word = stream.current()
if (state.lastType != ".") {
if (keywords.propertyIsEnumerable(word)) {
var kw = keywords[word]
return ret(kw.type, kw.style, word)
}
if (word == "async" && stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/, false))
return ret("async", "keyword", word)
}
return ret("variable", "variable", word)
}
}
function tokenString(quote) {
return function(stream, state) {
var escaped = false, next;
if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){
state.tokenize = tokenBase;
return ret("jsonld-keyword", "meta");
}
while ((next = stream.next()) != null) {
if (next == quote && !escaped) break;
escaped = !escaped && next == "\\";
}
if (!escaped) state.tokenize = tokenBase;
return ret("string", "string");
};
}
function tokenComment(stream, state) {
var maybeEnd = false, ch;
while (ch = stream.next()) {
if (ch == "/" && maybeEnd) {
state.tokenize = tokenBase;
break;
}
maybeEnd = (ch == "*");
}
return ret("comment", "comment");
}
function tokenQuasi(stream, state) {
var escaped = false, next;
while ((next = stream.next()) != null) {
if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
state.tokenize = tokenBase;
break;
}
escaped = !escaped && next == "\\";
}
return ret("quasi", "string-2", stream.current());
}
var brackets = "([{}])";
// This is a crude lookahead trick to try and notice that we're
// parsing the argument patterns for a fat-arrow function before we
// actually hit the arrow token. It only works if the arrow is on
// the same line as the arguments and there's no strange noise
// (comments) in between. Fallback is to only notice when we hit the
// arrow, and not declare the arguments as locals for the arrow
// body.
function findFatArrow(stream, state) {
if (state.fatArrowAt) state.fatArrowAt = null;
var arrow = stream.string.indexOf("=>", stream.start);
if (arrow < 0) return;
if (isTS) { // Try to skip TypeScript return type declarations after the arguments
var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow))
if (m) arrow = m.index
}
var depth = 0, sawSomething = false;
for (var pos = arrow - 1; pos >= 0; --pos) {
var ch = stream.string.charAt(pos);
var bracket = brackets.indexOf(ch);
if (bracket >= 0 && bracket < 3) {
if (!depth) { ++pos; break; }
if (--depth == 0) { if (ch == "(") sawSomething = true; break; }
} else if (bracket >= 3 && bracket < 6) {
++depth;
} else if (wordRE.test(ch)) {
sawSomething = true;
} else if (/["'\/]/.test(ch)) {
return;
} else if (sawSomething && !depth) {
++pos;
break;
}
}
if (sawSomething && !depth) state.fatArrowAt = pos;
}
// Parser
var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true};
function JSLexical(indented, column, type, align, prev, info) {
this.indented = indented;
this.column = column;
this.type = type;
this.prev = prev;
this.info = info;
if (align != null) this.align = align;
}
function inScope(state, varname) {
for (var v = state.localVars; v; v = v.next)
if (v.name == varname) return true;
for (var cx = state.context; cx; cx = cx.prev) {
for (var v = cx.vars; v; v = v.next)
if (v.name == varname) return true;
}
}
function parseJS(state, style, type, content, stream) {
var cc = state.cc;
// Communicate our context to the combinators.
// (Less wasteful than consing up a hundred closures on every call.)
cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;
if (!state.lexical.hasOwnProperty("align"))
state.lexical.align = true;
while(true) {
var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
if (combinator(type, content)) {
while(cc.length && cc[cc.length - 1].lex)
cc.pop()();
if (cx.marked) return cx.marked;
if (type == "variable" && inScope(state, content)) return "variable-2";
return style;
}
}
}
// Combinator utils
var cx = {state: null, column: null, marked: null, cc: null};
function pass() {
for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
}
function cont() {
pass.apply(null, arguments);
return true;
}
function inList(name, list) {
for (var v = list; v; v = v.next) if (v.name == name) return true
return false;
}
function register(varname) {
var state = cx.state;
cx.marked = "def";
if (state.context) {
if (state.lexical.info == "var" && state.context && state.context.block) {
// FIXME function decls are also not block scoped
var newContext = registerVarScoped(varname, state.context)
if (newContext != null) {
state.context = newContext
return
}
} else if (!inList(varname, state.localVars)) {
state.localVars = new Var(varname, state.localVars)
return
}
}
// Fall through means this is global
if (parserConfig.globalVars && !inList(varname, state.globalVars))
state.globalVars = new Var(varname, state.globalVars)
}
function registerVarScoped(varname, context) {
if (!context) {
return null
} else if (context.block) {
var inner = registerVarScoped(varname, context.prev)
if (!inner) return null
if (inner == context.prev) return context
return new Context(inner, context.vars, true)
} else if (inList(varname, context.vars)) {
return context
} else {
return new Context(context.prev, new Var(varname, context.vars), false)
}
}
function isModifier(name) {
return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"
}
// Combinators
function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }
function Var(name, next) { this.name = name; this.next = next }
var defaultVars = new Var("this", new Var("arguments", null))
function pushcontext() {
cx.state.context = new Context(cx.state.context, cx.state.localVars, false)
cx.state.localVars = defaultVars
}
function pushblockcontext() {
cx.state.context = new Context(cx.state.context, cx.state.localVars, true)
cx.state.localVars = null
}
function popcontext() {
cx.state.localVars = cx.state.context.vars
cx.state.context = cx.state.context.prev
}
popcontext.lex = true
function pushlex(type, info) {
var result = function() {
var state = cx.state, indent = state.indented;
if (state.lexical.type == "stat") indent = state.lexical.indented;
else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
indent = outer.indented;
state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
};
result.lex = true;
return result;
}
function poplex() {
var state = cx.state;
if (state.lexical.prev) {
if (state.lexical.type == ")")
state.indented = state.lexical.indented;
state.lexical = state.lexical.prev;
}
}
poplex.lex = true;
function expect(wanted) {
function exp(type) {
if (type == wanted) return cont();
else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass();
else return cont(exp);
};
return exp;
}
function statement(type, value) {
if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex);
if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex);
if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex);
if (type == "debugger") return cont(expect(";"));
if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext);
if (type == ";") return cont();
if (type == "if") {
if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
cx.state.cc.pop()();
return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse);
}
if (type == "function") return cont(functiondef);
if (type == "for") return cont(pushlex("form"), forspec, statement, poplex);
if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), className, poplex); }
if (type == "variable") {
if (isTS && value == "declare") {
cx.marked = "keyword"
return cont(statement)
} else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) {
cx.marked = "keyword"
if (value == "enum") return cont(enumdef);
else if (value == "type") return cont(typeexpr, expect("operator"), typeexpr, expect(";"));
else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex)
} else if (isTS && value == "namespace") {
cx.marked = "keyword"
return cont(pushlex("form"), expression, block, poplex)
} else if (isTS && value == "abstract") {
cx.marked = "keyword"
return cont(statement)
} else {
return cont(pushlex("stat"), maybelabel);
}
}
if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext,
block, poplex, poplex, popcontext);
if (type == "case") return cont(expression, expect(":"));
if (type == "default") return cont(expect(":"));
if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);
if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
if (type == "async") return cont(statement)
if (value == "@") return cont(expression, statement)
return pass(pushlex("stat"), expression, expect(";"), poplex);
}
function maybeCatchBinding(type) {
if (type == "(") return cont(funarg, expect(")"))
}
function expression(type, value) {
return expressionInner(type, value, false);
}
function expressionNoComma(type, value) {
return expressionInner(type, value, true);
}
function parenExpr(type) {
if (type != "(") return pass()
return cont(pushlex(")"), expression, expect(")"), poplex)
}
function expressionInner(type, value, noComma) {
if (cx.state.fatArrowAt == cx.stream.start) {
var body = noComma ? arrowBodyNoComma : arrowBody;
if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);
else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
}
var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
if (type == "function") return cont(functiondef, maybeop);
if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); }
if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression);
if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop);
if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
if (type == "{") return contCommasep(objprop, "}", null, maybeop);
if (type == "quasi") return pass(quasi, maybeop);
if (type == "new") return cont(maybeTarget(noComma));
if (type == "import") return cont(expression);
return cont();
}
function maybeexpression(type) {
if (type.match(/[;\}\)\],]/)) return pass();
return pass(expression);
}
function maybeoperatorComma(type, value) {
if (type == ",") return cont(expression);
return maybeoperatorNoComma(type, value, false);
}
function maybeoperatorNoComma(type, value, noComma) {
var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
var expr = noComma == false ? expression : expressionNoComma;
if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
if (type == "operator") {
if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me);
if (isTS && value == "<" && cx.stream.match(/^([^>]|<.*?>)*>\s*\(/, false))
return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me);
if (value == "?") return cont(expression, expect(":"), expr);
return cont(expr);
}
if (type == "quasi") { return pass(quasi, me); }
if (type == ";") return;
if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
if (type == ".") return cont(property, me);
if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) }
if (type == "regexp") {
cx.state.lastType = cx.marked = "operator"
cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)
return cont(expr)
}
}
function quasi(type, value) {
if (type != "quasi") return pass();
if (value.slice(value.length - 2) != "${") return cont(quasi);
return cont(expression, continueQuasi);
}
function continueQuasi(type) {
if (type == "}") {
cx.marked = "string-2";
cx.state.tokenize = tokenQuasi;
return cont(quasi);
}
}
function arrowBody(type) {
findFatArrow(cx.stream, cx.state);
return pass(type == "{" ? statement : expression);
}
function arrowBodyNoComma(type) {
findFatArrow(cx.stream, cx.state);
return pass(type == "{" ? statement : expressionNoComma);
}
function maybeTarget(noComma) {
return function(type) {
if (type == ".") return cont(noComma ? targetNoComma : target);
else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)
else return pass(noComma ? expressionNoComma : expression);
};
}
function target(_, value) {
if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); }
}
function targetNoComma(_, value) {
if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); }
}
function maybelabel(type) {
if (type == ":") return cont(poplex, statement);
return pass(maybeoperatorComma, expect(";"), poplex);
}
function property(type) {
if (type == "variable") {cx.marked = "property"; return cont();}
}
function objprop(type, value) {
if (type == "async") {
cx.marked = "property";
return cont(objprop);
} else if (type == "variable" || cx.style == "keyword") {
cx.marked = "property";
if (value == "get" || value == "set") return cont(getterSetter);
var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params
if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false)))
cx.state.fatArrowAt = cx.stream.pos + m[0].length
return cont(afterprop);
} else if (type == "number" || type == "string") {
cx.marked = jsonldMode ? "property" : (cx.style + " property");
return cont(afterprop);
} else if (type == "jsonld-keyword") {
return cont(afterprop);
} else if (isTS && isModifier(value)) {
cx.marked = "keyword"
return cont(objprop)
} else if (type == "[") {
return cont(expression, maybetype, expect("]"), afterprop);
} else if (type == "spread") {
return cont(expressionNoComma, afterprop);
} else if (value == "*") {
cx.marked = "keyword";
return cont(objprop);
} else if (type == ":") {
return pass(afterprop)
}
}
function getterSetter(type) {
if (type != "variable") return pass(afterprop);
cx.marked = "property";
return cont(functiondef);
}
function afterprop(type) {
if (type == ":") return cont(expressionNoComma);
if (type == "(") return pass(functiondef);
}
function commasep(what, end, sep) {
function proceed(type, value) {
if (sep ? sep.indexOf(type) > -1 : type == ",") {
var lex = cx.state.lexical;
if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
return cont(function(type, value) {
if (type == end || value == end) return pass()
return pass(what)
}, proceed);
}
if (type == end || value == end) return cont();
return cont(expect(end));
}
return function(type, value) {
if (type == end || value == end) return cont();
return pass(what, proceed);
};
}
function contCommasep(what, end, info) {
for (var i = 3; i < arguments.length; i++)
cx.cc.push(arguments[i]);
return cont(pushlex(end, info), commasep(what, end), poplex);
}
function block(type) {
if (type == "}") return cont();
return pass(statement, block);
}
function maybetype(type, value) {
if (isTS) {
if (type == ":") return cont(typeexpr);
if (value == "?") return cont(maybetype);
}
}
function mayberettype(type) {
if (isTS && type == ":") {
if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr)
else return cont(typeexpr)
}
}
function isKW(_, value) {
if (value == "is") {
cx.marked = "keyword"
return cont()
}
}
function typeexpr(type, value) {
if (value == "keyof" || value == "typeof") {
cx.marked = "keyword"
return cont(value == "keyof" ? typeexpr : expressionNoComma)
}
if (type == "variable" || value == "void") {
cx.marked = "type"
return cont(afterType)
}
if (type == "string" || type == "number" || type == "atom") return cont(afterType);
if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType)
if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType)
if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType)
if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr)
}
function maybeReturnType(type) {
if (type == "=>") return cont(typeexpr)
}
function typeprop(type, value) {
if (type == "variable" || cx.style == "keyword") {
cx.marked = "property"
return cont(typeprop)
} else if (value == "?") {
return cont(typeprop)
} else if (type == ":") {
return cont(typeexpr)
} else if (type == "[") {
return cont(expression, maybetype, expect("]"), typeprop)
}
}
function typearg(type, value) {
if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg)
if (type == ":") return cont(typeexpr)
return pass(typeexpr)
}
function afterType(type, value) {
if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
if (value == "|" || type == "." || value == "&") return cont(typeexpr)
if (type == "[") return cont(expect("]"), afterType)
if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) }
}
function maybeTypeArgs(_, value) {
if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
}
function typeparam() {
return pass(typeexpr, maybeTypeDefault)
}
function maybeTypeDefault(_, value) {
if (value == "=") return cont(typeexpr)
}
function vardef(_, value) {
if (value == "enum") {cx.marked = "keyword"; return cont(enumdef)}
return pass(pattern, maybetype, maybeAssign, vardefCont);
}
function pattern(type, value) {
if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern) }
if (type == "variable") { register(value); return cont(); }
if (type == "spread") return cont(pattern);
if (type == "[") return contCommasep(pattern, "]");
if (type == "{") return contCommasep(proppattern, "}");
}
function proppattern(type, value) {
if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
register(value);
return cont(maybeAssign);
}
if (type == "variable") cx.marked = "property";
if (type == "spread") return cont(pattern);
if (type == "}") return pass();
return cont(expect(":"), pattern, maybeAssign);
}
function maybeAssign(_type, value) {
if (value == "=") return cont(expressionNoComma);
}
function vardefCont(type) {
if (type == ",") return cont(vardef);
}
function maybeelse(type, value) {
if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
}
function forspec(type, value) {
if (value == "await") return cont(forspec);
if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex);
}
function forspec1(type) {
if (type == "var") return cont(vardef, expect(";"), forspec2);
if (type == ";") return cont(forspec2);
if (type == "variable") return cont(formaybeinof);
return pass(expression, expect(";"), forspec2);
}
function formaybeinof(_type, value) {
if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
return cont(maybeoperatorComma, forspec2);
}
function forspec2(type, value) {
if (type == ";") return cont(forspec3);
if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
return pass(expression, expect(";"), forspec3);
}
function forspec3(type) {
if (type != ")") cont(expression);
}
function functiondef(type, value) {
if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
if (type == "variable") {register(value); return cont(functiondef);}
if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext);
if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef)
}
function funarg(type, value) {
if (value == "@") cont(expression, funarg)
if (type == "spread") return cont(funarg);
if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); }
return pass(pattern, maybetype, maybeAssign);
}
function classExpression(type, value) {
// Class expressions may have an optional name.
if (type == "variable") return className(type, value);
return classNameAfter(type, value);
}
function className(type, value) {
if (type == "variable") {register(value); return cont(classNameAfter);}
}
function classNameAfter(type, value) {
if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter)
if (value == "extends" || value == "implements" || (isTS && type == ",")) {
if (value == "implements") cx.marked = "keyword";
return cont(isTS ? typeexpr : expression, classNameAfter);
}
if (type == "{") return cont(pushlex("}"), classBody, poplex);
}
function classBody(type, value) {
if (type == "async" ||
(type == "variable" &&
(value == "static" || value == "get" || value == "set" || (isTS && isModifier(value))) &&
cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) {
cx.marked = "keyword";
return cont(classBody);
}
if (type == "variable" || cx.style == "keyword") {
cx.marked = "property";
return cont(isTS ? classfield : functiondef, classBody);
}
if (type == "[")
return cont(expression, maybetype, expect("]"), isTS ? classfield : functiondef, classBody)
if (value == "*") {
cx.marked = "keyword";
return cont(classBody);
}
if (type == ";") return cont(classBody);
if (type == "}") return cont();
if (value == "@") return cont(expression, classBody)
}
function classfield(type, value) {
if (value == "?") return cont(classfield)
if (type == ":") return cont(typeexpr, maybeAssign)
if (value == "=") return cont(expressionNoComma)
return pass(functiondef)
}
function afterExport(type, value) {
if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";"));
return pass(statement);
}
function exportField(type, value) {
if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); }
if (type == "variable") return pass(expressionNoComma, exportField);
}
function afterImport(type) {
if (type == "string") return cont();
if (type == "(") return pass(expression);
return pass(importSpec, maybeMoreImports, maybeFrom);
}
function importSpec(type, value) {
if (type == "{") return contCommasep(importSpec, "}");
if (type == "variable") register(value);
if (value == "*") cx.marked = "keyword";
return cont(maybeAs);
}
function maybeMoreImports(type) {
if (type == ",") return cont(importSpec, maybeMoreImports)
}
function maybeAs(_type, value) {
if (value == "as") { cx.marked = "keyword"; return cont(importSpec); }
}
function maybeFrom(_type, value) {
if (value == "from") { cx.marked = "keyword"; return cont(expression); }
}
function arrayLiteral(type) {
if (type == "]") return cont();
return pass(commasep(expressionNoComma, "]"));
}
function enumdef() {
return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex)
}
function enummember() {
return pass(pattern, maybeAssign);
}
function isContinuedStatement(state, textAfter) {
return state.lastType == "operator" || state.lastType == "," ||
isOperatorChar.test(textAfter.charAt(0)) ||
/[,.]/.test(textAfter.charAt(0));
}
function expressionAllowed(stream, state, backUp) {
return state.tokenize == tokenBase &&
/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) ||
(state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))
}
// Interface
return {
startState: function(basecolumn) {
var state = {
tokenize: tokenBase,
lastType: "sof",
cc: [],
lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
localVars: parserConfig.localVars,
context: parserConfig.localVars && new Context(null, null, false),
indented: basecolumn || 0
};
if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
state.globalVars = parserConfig.globalVars;
return state;
},
token: function(stream, state) {
if (stream.sol()) {
if (!state.lexical.hasOwnProperty("align"))
state.lexical.align = false;
state.indented = stream.indentation();
findFatArrow(stream, state);
}
if (state.tokenize != tokenComment && stream.eatSpace()) return null;
var style = state.tokenize(stream, state);
if (type == "comment") return style;
state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
return parseJS(state, style, type, content, stream);
},
indent: function(state, textAfter) {
if (state.tokenize == tokenComment) return CodeMirror.Pass;
if (state.tokenize != tokenBase) return 0;
var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top
// Kludge to prevent 'maybelse' from blocking lexical scope pops
if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
var c = state.cc[i];
if (c == poplex) lexical = lexical.prev;
else if (c != maybeelse) break;
}
while ((lexical.type == "stat" || lexical.type == "form") &&
(firstChar == "}" || ((top = state.cc[state.cc.length - 1]) &&
(top == maybeoperatorComma || top == maybeoperatorNoComma) &&
!/^[,\.=+\-*:?[\(]/.test(textAfter))))
lexical = lexical.prev;
if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
lexical = lexical.prev;
var type = lexical.type, closing = firstChar == type;
if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);
else if (type == "form" && firstChar == "{") return lexical.indented;
else if (type == "form") return lexical.indented + indentUnit;
else if (type == "stat")
return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);
else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
else if (lexical.align) return lexical.column + (closing ? 0 : 1);
else return lexical.indented + (closing ? 0 : indentUnit);
},
electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
blockCommentStart: jsonMode ? null : "/*",
blockCommentEnd: jsonMode ? null : "*/",
blockCommentContinue: jsonMode ? null : " * ",
lineComment: jsonMode ? null : "//",
fold: "brace",
closeBrackets: "()[]{}''\"\"``",
helperType: jsonMode ? "json" : "javascript",
jsonldMode: jsonldMode,
jsonMode: jsonMode,
expressionAllowed: expressionAllowed,
skipExpression: function(state) {
var top = state.cc[state.cc.length - 1]
if (top == expression || top == expressionNoComma) state.cc.pop()
}
};
});
CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
CodeMirror.defineMIME("text/javascript", "javascript");
CodeMirror.defineMIME("text/ecmascript", "javascript");
CodeMirror.defineMIME("application/javascript", "javascript");
CodeMirror.defineMIME("application/x-javascript", "javascript");
CodeMirror.defineMIME("application/ecmascript", "javascript");
CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true});
CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true});
CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
});
@@ -1,72 +0,0 @@
<!doctype html>
<title>CodeMirror: JSON-LD mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="../../addon/edit/matchbrackets.js"></script>
<script src="../../addon/comment/continuecomment.js"></script>
<script src="../../addon/comment/comment.js"></script>
<script src="javascript.js"></script>
<style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
<div id="nav">
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"/></a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">JSON-LD</a>
</ul>
</div>
<article>
<h2>JSON-LD mode</h2>
<div><textarea id="code" name="code">
{
"@context": {
"name": "http://schema.org/name",
"description": "http://schema.org/description",
"image": {
"@id": "http://schema.org/image",
"@type": "@id"
},
"geo": "http://schema.org/geo",
"latitude": {
"@id": "http://schema.org/latitude",
"@type": "xsd:float"
},
"longitude": {
"@id": "http://schema.org/longitude",
"@type": "xsd:float"
},
"xsd": "http://www.w3.org/2001/XMLSchema#"
},
"name": "The Empire State Building",
"description": "The Empire State Building is a 102-story landmark in New York City.",
"image": "http://www.civil.usherbrooke.ca/cours/gci215a/empire-state-building.jpg",
"geo": {
"latitude": "40.75",
"longitude": "73.98"
}
}
</textarea></div>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
matchBrackets: true,
autoCloseBrackets: true,
mode: "application/ld+json",
lineWrapping: true
});
</script>
<p>This is a specialization of the <a href="index.html">JavaScript mode</a>.</p>
</article>
@@ -1,482 +0,0 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(function() {
var mode = CodeMirror.getMode({indentUnit: 2}, "javascript");
function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); }
MT("locals",
"[keyword function] [def foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }");
MT("comma-and-binop",
"[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }");
MT("destructuring",
"([keyword function]([def a], [[[def b], [def c] ]]) {",
" [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);",
" [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];",
"})();");
MT("destructure_trailing_comma",
"[keyword let] {[def a], [def b],} [operator =] [variable foo];",
"[keyword let] [def c];"); // Parser still in good state?
MT("class_body",
"[keyword class] [def Foo] {",
" [property constructor]() {}",
" [property sayName]() {",
" [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];",
" }",
"}");
MT("class",
"[keyword class] [def Point] [keyword extends] [variable SuperThing] {",
" [keyword get] [property prop]() { [keyword return] [number 24]; }",
" [property constructor]([def x], [def y]) {",
" [keyword super]([string 'something']);",
" [keyword this].[property x] [operator =] [variable-2 x];",
" }",
"}");
MT("anonymous_class_expression",
"[keyword const] [def Adder] [operator =] [keyword class] [keyword extends] [variable Arithmetic] {",
" [property add]([def a], [def b]) {}",
"};");
MT("named_class_expression",
"[keyword const] [def Subber] [operator =] [keyword class] [def Subtract] {",
" [property sub]([def a], [def b]) {}",
"};");
MT("class_async_method",
"[keyword class] [def Foo] {",
" [property sayName1]() {}",
" [keyword async] [property sayName2]() {}",
"}");
MT("import",
"[keyword function] [def foo]() {",
" [keyword import] [def $] [keyword from] [string 'jquery'];",
" [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];",
"}");
MT("import_trailing_comma",
"[keyword import] {[def foo], [def bar],} [keyword from] [string 'baz']")
MT("import_dynamic",
"[keyword import]([string 'baz']).[property then]")
MT("import_dynamic",
"[keyword const] [def t] [operator =] [keyword import]([string 'baz']).[property then]")
MT("const",
"[keyword function] [def f]() {",
" [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];",
"}");
MT("for/of",
"[keyword for]([keyword let] [def of] [keyword of] [variable something]) {}");
MT("for await",
"[keyword for] [keyword await]([keyword let] [def of] [keyword of] [variable something]) {}");
MT("generator",
"[keyword function*] [def repeat]([def n]) {",
" [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])",
" [keyword yield] [variable-2 i];",
"}");
MT("let_scoping",
"[keyword function] [def scoped]([def n]) {",
" { [keyword var] [def i]; } [variable-2 i];",
" { [keyword let] [def j]; [variable-2 j]; } [variable j];",
" [keyword if] ([atom true]) { [keyword const] [def k]; [variable-2 k]; } [variable k];",
"}");
MT("switch_scoping",
"[keyword switch] ([variable x]) {",
" [keyword default]:",
" [keyword let] [def j];",
" [keyword return] [variable-2 j]",
"}",
"[variable j];")
MT("leaving_scope",
"[keyword function] [def a]() {",
" {",
" [keyword const] [def x] [operator =] [number 1]",
" [keyword if] ([atom true]) {",
" [keyword let] [def y] [operator =] [number 2]",
" [keyword var] [def z] [operator =] [number 3]",
" [variable console].[property log]([variable-2 x], [variable-2 y], [variable-2 z])",
" }",
" [variable console].[property log]([variable-2 x], [variable y], [variable-2 z])",
" }",
" [variable console].[property log]([variable x], [variable y], [variable-2 z])",
"}")
MT("quotedStringAddition",
"[keyword let] [def f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];");
MT("quotedFatArrow",
"[keyword let] [def f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];");
MT("fatArrow",
"[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);",
"[variable a];", // No longer in scope
"[keyword let] [def f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];",
"[variable c];");
MT("spread",
"[keyword function] [def f]([def a], [meta ...][def b]) {",
" [variable something]([variable-2 a], [meta ...][variable-2 b]);",
"}");
MT("quasi",
"[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]");
MT("quasi_no_function",
"[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]");
MT("indent_statement",
"[keyword var] [def x] [operator =] [number 10]",
"[variable x] [operator +=] [variable y] [operator +]",
" [atom Infinity]",
"[keyword debugger];");
MT("indent_if",
"[keyword if] ([number 1])",
" [keyword break];",
"[keyword else] [keyword if] ([number 2])",
" [keyword continue];",
"[keyword else]",
" [number 10];",
"[keyword if] ([number 1]) {",
" [keyword break];",
"} [keyword else] [keyword if] ([number 2]) {",
" [keyword continue];",
"} [keyword else] {",
" [number 10];",
"}");
MT("indent_for",
"[keyword for] ([keyword var] [def i] [operator =] [number 0];",
" [variable i] [operator <] [number 100];",
" [variable i][operator ++])",
" [variable doSomething]([variable i]);",
"[keyword debugger];");
MT("indent_c_style",
"[keyword function] [def foo]()",
"{",
" [keyword debugger];",
"}");
MT("indent_else",
"[keyword for] (;;)",
" [keyword if] ([variable foo])",
" [keyword if] ([variable bar])",
" [number 1];",
" [keyword else]",
" [number 2];",
" [keyword else]",
" [number 3];");
MT("indent_funarg",
"[variable foo]([number 10000],",
" [keyword function]([def a]) {",
" [keyword debugger];",
"};");
MT("indent_below_if",
"[keyword for] (;;)",
" [keyword if] ([variable foo])",
" [number 1];",
"[number 2];");
MT("indent_semicolonless_if",
"[keyword function] [def foo]() {",
" [keyword if] ([variable x])",
" [variable foo]()",
"}")
MT("indent_semicolonless_if_with_statement",
"[keyword function] [def foo]() {",
" [keyword if] ([variable x])",
" [variable foo]()",
" [variable bar]()",
"}")
MT("multilinestring",
"[keyword var] [def x] [operator =] [string 'foo\\]",
"[string bar'];");
MT("scary_regexp",
"[string-2 /foo[[/]]bar/];");
MT("indent_strange_array",
"[keyword var] [def x] [operator =] [[",
" [number 1],,",
" [number 2],",
"]];",
"[number 10];");
MT("param_default",
"[keyword function] [def foo]([def x] [operator =] [string-2 `foo${][number 10][string-2 }bar`]) {",
" [keyword return] [variable-2 x];",
"}");
MT("new_target",
"[keyword function] [def F]([def target]) {",
" [keyword if] ([variable-2 target] [operator &&] [keyword new].[keyword target].[property name]) {",
" [keyword return] [keyword new]",
" .[keyword target];",
" }",
"}");
MT("async",
"[keyword async] [keyword function] [def foo]([def args]) { [keyword return] [atom true]; }");
MT("async_assignment",
"[keyword const] [def foo] [operator =] [keyword async] [keyword function] ([def args]) { [keyword return] [atom true]; };");
MT("async_object",
"[keyword let] [def obj] [operator =] { [property async]: [atom false] };");
// async be highlighet as keyword and foo as def, but it requires potentially expensive look-ahead. See #4173
MT("async_object_function",
"[keyword let] [def obj] [operator =] { [property async] [property foo]([def args]) { [keyword return] [atom true]; } };");
MT("async_object_properties",
"[keyword let] [def obj] [operator =] {",
" [property prop1]: [keyword async] [keyword function] ([def args]) { [keyword return] [atom true]; },",
" [property prop2]: [keyword async] [keyword function] ([def args]) { [keyword return] [atom true]; },",
" [property prop3]: [keyword async] [keyword function] [def prop3]([def args]) { [keyword return] [atom true]; },",
"};");
MT("async_arrow",
"[keyword const] [def foo] [operator =] [keyword async] ([def args]) [operator =>] { [keyword return] [atom true]; };");
MT("async_jquery",
"[variable $].[property ajax]({",
" [property url]: [variable url],",
" [property async]: [atom true],",
" [property method]: [string 'GET']",
"});");
MT("async_variable",
"[keyword const] [def async] [operator =] {[property a]: [number 1]};",
"[keyword const] [def foo] [operator =] [string-2 `bar ${][variable async].[property a][string-2 }`];")
MT("bigint", "[number 1n] [operator +] [number 0x1afn] [operator +] [number 0o064n] [operator +] [number 0b100n];")
MT("async_comment",
"[keyword async] [comment /**/] [keyword function] [def foo]([def args]) { [keyword return] [atom true]; }");
MT("indent_switch",
"[keyword switch] ([variable x]) {",
" [keyword default]:",
" [keyword return] [number 2]",
"}")
MT("regexp_corner_case",
"[operator +]{} [operator /] [atom undefined];",
"[[[meta ...][string-2 /\\//] ]];",
"[keyword void] [string-2 /\\//];",
"[keyword do] [string-2 /\\//]; [keyword while] ([number 0]);",
"[keyword if] ([number 0]) {} [keyword else] [string-2 /\\//];",
"[string-2 `${][variable async][operator ++][string-2 }//`];",
"[string-2 `${]{} [operator /] [string-2 /\\//}`];")
MT("return_eol",
"[keyword return]",
"{} [string-2 /5/]")
var ts_mode = CodeMirror.getMode({indentUnit: 2}, "application/typescript")
function TS(name) {
test.mode(name, ts_mode, Array.prototype.slice.call(arguments, 1))
}
TS("typescript_extend_type",
"[keyword class] [def Foo] [keyword extends] [type Some][operator <][type Type][operator >] {}")
TS("typescript_arrow_type",
"[keyword let] [def x]: ([variable arg]: [type Type]) [operator =>] [type ReturnType]")
TS("typescript_class",
"[keyword class] [def Foo] {",
" [keyword public] [keyword static] [property main]() {}",
" [keyword private] [property _foo]: [type string];",
"}")
TS("typescript_literal_types",
"[keyword import] [keyword *] [keyword as] [def Sequelize] [keyword from] [string 'sequelize'];",
"[keyword interface] [def MyAttributes] {",
" [property truthy]: [string 'true'] [operator |] [number 1] [operator |] [atom true];",
" [property falsy]: [string 'false'] [operator |] [number 0] [operator |] [atom false];",
"}",
"[keyword interface] [def MyInstance] [keyword extends] [type Sequelize].[type Instance] [operator <] [type MyAttributes] [operator >] {",
" [property rawAttributes]: [type MyAttributes];",
" [property truthy]: [string 'true'] [operator |] [number 1] [operator |] [atom true];",
" [property falsy]: [string 'false'] [operator |] [number 0] [operator |] [atom false];",
"}")
TS("typescript_extend_operators",
"[keyword export] [keyword interface] [def UserModel] [keyword extends]",
" [type Sequelize].[type Model] [operator <] [type UserInstance], [type UserAttributes] [operator >] {",
" [property findById]: (",
" [variable userId]: [type number]",
" ) [operator =>] [type Promise] [operator <] [type Array] [operator <] { [property id], [property name] } [operator >>];",
" [property updateById]: (",
" [variable userId]: [type number],",
" [variable isActive]: [type boolean]",
" ) [operator =>] [type Promise] [operator <] [type AccountHolderNotificationPreferenceInstance] [operator >];",
" }")
TS("typescript_interface_with_const",
"[keyword const] [def hello]: {",
" [property prop1][operator ?]: [type string];",
" [property prop2][operator ?]: [type string];",
"} [operator =] {};")
TS("typescript_double_extend",
"[keyword export] [keyword interface] [def UserAttributes] {",
" [property id][operator ?]: [type number];",
" [property createdAt][operator ?]: [type Date];",
"}",
"[keyword export] [keyword interface] [def UserInstance] [keyword extends] [type Sequelize].[type Instance][operator <][type UserAttributes][operator >], [type UserAttributes] {",
" [property id]: [type number];",
" [property createdAt]: [type Date];",
"}");
TS("typescript_index_signature",
"[keyword interface] [def A] {",
" [[ [variable prop]: [type string] ]]: [type any];",
" [property prop1]: [type any];",
"}");
TS("typescript_generic_class",
"[keyword class] [def Foo][operator <][type T][operator >] {",
" [property bar]() {}",
" [property foo](): [type Foo] {}",
"}")
TS("typescript_type_when_keyword",
"[keyword export] [keyword type] [type AB] [operator =] [type A] [operator |] [type B];",
"[keyword type] [type Flags] [operator =] {",
" [property p1]: [type string];",
" [property p2]: [type boolean];",
"};")
TS("typescript_type_when_not_keyword",
"[keyword class] [def HasType] {",
" [property type]: [type string];",
" [property constructor]([def type]: [type string]) {",
" [keyword this].[property type] [operator =] [variable-2 type];",
" }",
" [property setType]({ [def type] }: { [property type]: [type string]; }) {",
" [keyword this].[property type] [operator =] [variable-2 type];",
" }",
"}")
TS("typescript_function_generics",
"[keyword function] [def a]() {}",
"[keyword function] [def b][operator <][type IA] [keyword extends] [type object], [type IB] [keyword extends] [type object][operator >]() {}",
"[keyword function] [def c]() {}")
TS("typescript_complex_return_type",
"[keyword function] [def A]() {",
" [keyword return] [keyword this].[property property];",
"}",
"[keyword function] [def B](): [type Promise][operator <]{ [[ [variable key]: [type string] ]]: [type any] } [operator |] [atom null][operator >] {",
" [keyword return] [keyword this].[property property];",
"}")
TS("typescript_complex_type_casting",
"[keyword const] [def giftpay] [operator =] [variable config].[property get]([string 'giftpay']) [keyword as] { [[ [variable platformUuid]: [type string] ]]: { [property version]: [type number]; [property apiCode]: [type string]; } };")
TS("typescript_keyof",
"[keyword function] [def x][operator <][type T] [keyword extends] [keyword keyof] [type X][operator >]([def a]: [type T]) {",
" [keyword return]")
TS("typescript_new_typeargs",
"[keyword let] [def x] [operator =] [keyword new] [variable Map][operator <][type string], [type Date][operator >]([string-2 `foo${][variable bar][string-2 }`])")
TS("modifiers",
"[keyword class] [def Foo] {",
" [keyword public] [keyword abstract] [property bar]() {}",
" [property constructor]([keyword readonly] [keyword private] [def x]) {}",
"}")
TS("arrow prop",
"({[property a]: [def p] [operator =>] [variable-2 p]})")
TS("generic in function call",
"[keyword this].[property a][operator <][type Type][operator >]([variable foo]);",
"[keyword this].[property a][operator <][variable Type][operator >][variable foo];")
TS("type guard",
"[keyword class] [def Appler] {",
" [keyword static] [property assertApple]([def fruit]: [type Fruit]): [variable-2 fruit] [keyword is] [type Apple] {",
" [keyword if] ([operator !]([variable-2 fruit] [keyword instanceof] [variable Apple]))",
" [keyword throw] [keyword new] [variable Error]();",
" }",
"}")
TS("type as variable",
"[variable type] [operator =] [variable x] [keyword as] [type Bar];");
TS("enum body",
"[keyword export] [keyword const] [keyword enum] [def CodeInspectionResultType] {",
" [def ERROR] [operator =] [string 'problem_type_error'],",
" [def WARNING] [operator =] [string 'problem_type_warning'],",
" [def META],",
"}")
TS("parenthesized type",
"[keyword class] [def Foo] {",
" [property x] [operator =] [keyword new] [variable A][operator <][type B], [type string][operator |](() [operator =>] [type void])[operator >]();",
" [keyword private] [property bar]();",
"}")
TS("abstract class",
"[keyword export] [keyword abstract] [keyword class] [def Foo] {}")
var jsonld_mode = CodeMirror.getMode(
{indentUnit: 2},
{name: "javascript", jsonld: true}
);
function LD(name) {
test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1));
}
LD("json_ld_keywords",
'{',
' [meta "@context"]: {',
' [meta "@base"]: [string "http://example.com"],',
' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],',
' [property "likesFlavor"]: {',
' [meta "@container"]: [meta "@list"]',
' [meta "@reverse"]: [string "@beFavoriteOf"]',
' },',
' [property "nick"]: { [meta "@container"]: [meta "@set"] },',
' [property "nick"]: { [meta "@container"]: [meta "@index"] }',
' },',
' [meta "@graph"]: [[ {',
' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],',
' [property "name"]: [string "John Lennon"],',
' [property "modified"]: {',
' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],',
' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]',
' }',
' } ]]',
'}');
LD("json_ld_fake",
'{',
' [property "@fake"]: [string "@fake"],',
' [property "@contextual"]: [string "@identifier"],',
' [property "user@domain.com"]: [string "@graphical"],',
' [property "@ID"]: [string "@@ID"]',
'}');
})();
@@ -1,61 +0,0 @@
<!doctype html>
<title>CodeMirror: TypeScript mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">
<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="javascript.js"></script>
<style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
<div id=nav>
<a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
<ul>
<li><a href="../../index.html">Home</a>
<li><a href="../../doc/manual.html">Manual</a>
<li><a href="https://github.com/codemirror/codemirror">Code</a>
</ul>
<ul>
<li><a href="../index.html">Language modes</a>
<li><a class=active href="#">TypeScript</a>
</ul>
</div>
<article>
<h2>TypeScript mode</h2>
<div><textarea id="code" name="code">
class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
var greeter = new Greeter("world");
var button = document.createElement('button')
button.innerText = "Say Hello"
button.onclick = function() {
alert(greeter.greet())
}
document.body.appendChild(button)
</textarea></div>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
lineNumbers: true,
matchBrackets: true,
mode: "text/typescript"
});
</script>
<p>This is a specialization of the <a href="index.html">JavaScript mode</a>.</p>
</article>
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -1,346 +0,0 @@
/* BASICS */
.CodeMirror {
/* Set height, width, borders, and global font properties here */
font-family: monospace;
height: 300px;
color: black;
direction: ltr;
}
/* PADDING */
.CodeMirror-lines {
padding: 4px 0; /* Vertical padding around content */
}
.CodeMirror pre {
padding: 0 4px; /* Horizontal padding of content */
}
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
background-color: white; /* The little square between H and V scrollbars */
}
/* GUTTER */
.CodeMirror-gutters {
border-right: 1px solid #ddd;
background-color: #f7f7f7;
white-space: nowrap;
}
.CodeMirror-linenumbers {}
.CodeMirror-linenumber {
padding: 0 3px 0 5px;
min-width: 20px;
text-align: right;
color: #999;
white-space: nowrap;
}
.CodeMirror-guttermarker { color: black; }
.CodeMirror-guttermarker-subtle { color: #999; }
/* CURSOR */
.CodeMirror-cursor {
border-left: 1px solid black;
border-right: none;
width: 0;
}
/* Shown when moving in bi-directional text */
.CodeMirror div.CodeMirror-secondarycursor {
border-left: 1px solid silver;
}
.cm-fat-cursor .CodeMirror-cursor {
width: auto;
border: 0 !important;
background: #7e7;
}
.cm-fat-cursor div.CodeMirror-cursors {
z-index: 1;
}
.cm-fat-cursor-mark {
background-color: rgba(20, 255, 20, 0.5);
-webkit-animation: blink 1.06s steps(1) infinite;
-moz-animation: blink 1.06s steps(1) infinite;
animation: blink 1.06s steps(1) infinite;
}
.cm-animate-fat-cursor {
width: auto;
border: 0;
-webkit-animation: blink 1.06s steps(1) infinite;
-moz-animation: blink 1.06s steps(1) infinite;
animation: blink 1.06s steps(1) infinite;
background-color: #7e7;
}
@-moz-keyframes blink {
0% {}
50% { background-color: transparent; }
100% {}
}
@-webkit-keyframes blink {
0% {}
50% { background-color: transparent; }
100% {}
}
@keyframes blink {
0% {}
50% { background-color: transparent; }
100% {}
}
/* Can style cursor different in overwrite (non-insert) mode */
.CodeMirror-overwrite .CodeMirror-cursor {}
.cm-tab { display: inline-block; text-decoration: inherit; }
.CodeMirror-rulers {
position: absolute;
left: 0; right: 0; top: -50px; bottom: -20px;
overflow: hidden;
}
.CodeMirror-ruler {
border-left: 1px solid #ccc;
top: 0; bottom: 0;
position: absolute;
}
/* DEFAULT THEME */
.cm-s-default .cm-header {color: blue;}
.cm-s-default .cm-quote {color: #090;}
.cm-negative {color: #d44;}
.cm-positive {color: #292;}
.cm-header, .cm-strong {font-weight: bold;}
.cm-em {font-style: italic;}
.cm-link {text-decoration: underline;}
.cm-strikethrough {text-decoration: line-through;}
.cm-s-default .cm-keyword {color: #708;}
.cm-s-default .cm-atom {color: #219;}
.cm-s-default .cm-number {color: #164;}
.cm-s-default .cm-def {color: #00f;}
.cm-s-default .cm-variable,
.cm-s-default .cm-punctuation,
.cm-s-default .cm-property,
.cm-s-default .cm-operator {}
.cm-s-default .cm-variable-2 {color: #05a;}
.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
.cm-s-default .cm-comment {color: #a50;}
.cm-s-default .cm-string {color: #a11;}
.cm-s-default .cm-string-2 {color: #f50;}
.cm-s-default .cm-meta {color: #555;}
.cm-s-default .cm-qualifier {color: #555;}
.cm-s-default .cm-builtin {color: #30a;}
.cm-s-default .cm-bracket {color: #997;}
.cm-s-default .cm-tag {color: #170;}
.cm-s-default .cm-attribute {color: #00c;}
.cm-s-default .cm-hr {color: #999;}
.cm-s-default .cm-link {color: #00c;}
.cm-s-default .cm-error {color: #f00;}
.cm-invalidchar {color: #f00;}
.CodeMirror-composing { border-bottom: 2px solid; }
/* Default styles for common addons */
div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
.CodeMirror-activeline-background {background: #e8f2ff;}
/* STOP */
/* The rest of this file contains styles related to the mechanics of
the editor. You probably shouldn't touch them. */
.CodeMirror {
position: relative;
overflow: hidden;
background: white;
}
.CodeMirror-scroll {
overflow: scroll !important; /* Things will break if this is overridden */
/* 30px is the magic margin used to hide the element's real scrollbars */
/* See overflow: hidden in .CodeMirror */
margin-bottom: -30px; margin-right: -30px;
padding-bottom: 30px;
height: 100%;
outline: none; /* Prevent dragging from highlighting the element */
position: relative;
}
.CodeMirror-sizer {
position: relative;
border-right: 30px solid transparent;
}
/* The fake, visible scrollbars. Used to force redraw during scrolling
before actual scrolling happens, thus preventing shaking and
flickering artifacts. */
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
position: absolute;
z-index: 6;
display: none;
}
.CodeMirror-vscrollbar {
right: 0; top: 0;
overflow-x: hidden;
overflow-y: scroll;
}
.CodeMirror-hscrollbar {
bottom: 0; left: 0;
overflow-y: hidden;
overflow-x: scroll;
}
.CodeMirror-scrollbar-filler {
right: 0; bottom: 0;
}
.CodeMirror-gutter-filler {
left: 0; bottom: 0;
}
.CodeMirror-gutters {
position: absolute; left: 0; top: 0;
min-height: 100%;
z-index: 3;
}
.CodeMirror-gutter {
white-space: normal;
height: 100%;
display: inline-block;
vertical-align: top;
margin-bottom: -30px;
}
.CodeMirror-gutter-wrapper {
position: absolute;
z-index: 4;
background: none !important;
border: none !important;
}
.CodeMirror-gutter-background {
position: absolute;
top: 0; bottom: 0;
z-index: 4;
}
.CodeMirror-gutter-elt {
position: absolute;
cursor: default;
z-index: 4;
}
.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
.CodeMirror-lines {
cursor: text;
min-height: 1px; /* prevents collapsing before first draw */
}
.CodeMirror pre {
/* Reset some styles that the rest of the page might have set */
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
border-width: 0;
background: transparent;
font-family: inherit;
font-size: inherit;
margin: 0;
white-space: pre;
word-wrap: normal;
line-height: inherit;
color: inherit;
z-index: 2;
position: relative;
overflow: visible;
-webkit-tap-highlight-color: transparent;
-webkit-font-variant-ligatures: contextual;
font-variant-ligatures: contextual;
}
.CodeMirror-wrap pre {
word-wrap: break-word;
white-space: pre-wrap;
word-break: normal;
}
.CodeMirror-linebackground {
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
z-index: 0;
}
.CodeMirror-linewidget {
position: relative;
z-index: 2;
padding: 0.1px; /* Force widget margins to stay inside of the container */
}
.CodeMirror-widget {}
.CodeMirror-rtl pre { direction: rtl; }
.CodeMirror-code {
outline: none;
}
/* Force content-box sizing for the elements where we expect it */
.CodeMirror-scroll,
.CodeMirror-sizer,
.CodeMirror-gutter,
.CodeMirror-gutters,
.CodeMirror-linenumber {
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.CodeMirror-measure {
position: absolute;
width: 100%;
height: 0;
overflow: hidden;
visibility: hidden;
}
.CodeMirror-cursor {
position: absolute;
pointer-events: none;
}
.CodeMirror-measure pre { position: static; }
div.CodeMirror-cursors {
visibility: hidden;
position: relative;
z-index: 3;
}
div.CodeMirror-dragcursors {
visibility: visible;
}
.CodeMirror-focused div.CodeMirror-cursors {
visibility: visible;
}
.CodeMirror-selected { background: #d9d9d9; }
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
.CodeMirror-crosshair { cursor: crosshair; }
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
.cm-searching {
background-color: #ffa;
background-color: rgba(255, 255, 0, .4);
}
/* Used to force a border model for a node */
.cm-force-border { padding-right: .1px; }
@media print {
/* Hide the cursor when printing */
.CodeMirror div.CodeMirror-cursors {
visibility: hidden;
}
}
/* See issue #2901 */
.cm-tab-wrap-hack:after { content: ''; }
/* Help users use markselection to safely style text background */
span.CodeMirror-selectedtext { background: none; }
@@ -1,41 +0,0 @@
/* Based on Sublime Text's Monokai theme */
.cm-s-monokai.CodeMirror { background: #272822; color: #f8f8f2; }
.cm-s-monokai div.CodeMirror-selected { background: #49483E; }
.cm-s-monokai .CodeMirror-line::selection, .cm-s-monokai .CodeMirror-line > span::selection, .cm-s-monokai .CodeMirror-line > span > span::selection { background: rgba(73, 72, 62, .99); }
.cm-s-monokai .CodeMirror-line::-moz-selection, .cm-s-monokai .CodeMirror-line > span::-moz-selection, .cm-s-monokai .CodeMirror-line > span > span::-moz-selection { background: rgba(73, 72, 62, .99); }
.cm-s-monokai .CodeMirror-gutters { background: #272822; border-right: 0px; }
.cm-s-monokai .CodeMirror-guttermarker { color: white; }
.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
.cm-s-monokai .CodeMirror-linenumber { color: #d0d0d0; }
.cm-s-monokai .CodeMirror-cursor { border-left: 1px solid #f8f8f0; }
.cm-s-monokai span.cm-comment { color: #75715e; }
.cm-s-monokai span.cm-atom { color: #ae81ff; }
.cm-s-monokai span.cm-number { color: #ae81ff; }
.cm-s-monokai span.cm-comment.cm-attribute { color: #97b757; }
.cm-s-monokai span.cm-comment.cm-def { color: #bc9262; }
.cm-s-monokai span.cm-comment.cm-tag { color: #bc6283; }
.cm-s-monokai span.cm-comment.cm-type { color: #5998a6; }
.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute { color: #a6e22e; }
.cm-s-monokai span.cm-keyword { color: #f92672; }
.cm-s-monokai span.cm-builtin { color: #66d9ef; }
.cm-s-monokai span.cm-string { color: #e6db74; }
.cm-s-monokai span.cm-variable { color: #f8f8f2; }
.cm-s-monokai span.cm-variable-2 { color: #9effff; }
.cm-s-monokai span.cm-variable-3, .cm-s-monokai span.cm-type { color: #66d9ef; }
.cm-s-monokai span.cm-def { color: #fd971f; }
.cm-s-monokai span.cm-bracket { color: #f8f8f2; }
.cm-s-monokai span.cm-tag { color: #f92672; }
.cm-s-monokai span.cm-header { color: #ae81ff; }
.cm-s-monokai span.cm-link { color: #ae81ff; }
.cm-s-monokai span.cm-error { background: #f92672; color: #f8f8f0; }
.cm-s-monokai .CodeMirror-activeline-background { background: #373831; }
.cm-s-monokai .CodeMirror-matchingbracket {
text-decoration: underline;
color: white !important;
}
@@ -1,28 +0,0 @@
#menu > li .fa.lightshop:before {
content: '';
display: block;
background-image: url('data:image/png;base64,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');
width: 18px;
height: 18px;
background-size: 100%;
background-repeat: no-repeat;
margin-bottom: -3px;
}
#menu > li.active .fa.lightshop:before {
background-image: url('data:image/png;base64,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');
}
/* fix collapse1 bug */
#menu-lightshop > ul > li:first-child {
display: none;
}
#menu-lightshop .badge {
font-weight: normal;
margin: -2px 0 0 5px;
background: transparent;
box-shadow: 0 0 0 1px inset;
color: inherit;
line-height: 9px;
height: 13px;
padding: 2px 5px;
font-size: 10px;
}
@@ -1,601 +0,0 @@
/* custom inclusion of right, left and below tabs */
.tabs-below > .nav-tabs,
.tabs-right > .nav-tabs,
.tabs-left > .nav-tabs {
border-bottom: 0;
}
.tab-content > .tab-pane,
.pill-content > .pill-pane {
display: none;
}
.tab-content > .active,
.pill-content > .active {
display: block;
}
.tabs-below > .nav-tabs {
border-top: 1px solid #ddd;
}
.tabs-below > .nav-tabs > li {
margin-top: -1px;
margin-bottom: 0;
}
.tabs-below > .nav-tabs > li > a {
-webkit-border-radius: 0 0 4px 4px;
-moz-border-radius: 0 0 4px 4px;
border-radius: 0 0 4px 4px;
}
.tabs-below > .nav-tabs > li > a:hover,
.tabs-below > .nav-tabs > li > a:focus {
border-top-color: #ddd;
border-bottom-color: transparent;
}
.tabs-below > .nav-tabs > .active > a,
.tabs-below > .nav-tabs > .active > a:hover,
.tabs-below > .nav-tabs > .active > a:focus {
border-color: transparent #ddd #ddd #ddd;
}
.tabs-left > .nav-tabs > li,
.tabs-right > .nav-tabs > li {
float: none;
}
.tabs-left > .nav-tabs > li > a,
.tabs-right > .nav-tabs > li > a {
min-width: 74px;
margin-right: 0;
margin-bottom: 3px;
}
.tabs-left > .nav-tabs {
float: left;
border-right: 1px solid #ddd;
width: 200px;
margin-bottom: -15px;
padding-bottom: 25px;
}
.tabs-left > .nav-tabs > li > a {
margin-right: -1px;
-webkit-border-radius: 4px 0 0 4px;
-moz-border-radius: 4px 0 0 4px;
border-radius: 4px 0 0 4px;
}
.tabs-left > .nav-tabs > li > a:hover,
.tabs-left > .nav-tabs > li > a:focus {
border-color: #eeeeee #dddddd #eeeeee #eeeeee;
}
.tabs-left > .nav-tabs .active > a,
.tabs-left > .nav-tabs .active > a:hover,
.tabs-left > .nav-tabs .active > a:focus {
border-color: #ddd transparent #ddd #ddd;
*border-right-color: #ffffff;
}
.tabs-right > .nav-tabs {
float: right;
margin-left: 19px;
border-left: 1px solid #ddd;
}
.tabs-right > .nav-tabs > li > a {
margin-left: -1px;
-webkit-border-radius: 0 4px 4px 0;
-moz-border-radius: 0 4px 4px 0;
border-radius: 0 4px 4px 0;
}
.tabs-right > .nav-tabs > li > a:hover,
.tabs-right > .nav-tabs > li > a:focus {
border-color: #eeeeee #eeeeee #eeeeee #dddddd;
}
.tabs-right > .nav-tabs .active > a,
.tabs-right > .nav-tabs .active > a:hover,
.tabs-right > .nav-tabs .active > a:focus {
border-color: #ddd #ddd #ddd transparent;
*border-left-color: #ffffff;
}
.tabs-left > .tab-content {
float: right;
width: calc(100% - 199px);
border-left: 1px solid #ddd;
margin-left: -1px;
padding-left: 15px;
padding-right: 0;
margin-bottom: -15px;
}
.form-group {
margin-left: 0 !important;
margin-right: 0 !important;
}
.code{
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
}
.btn-default.btn-on.active {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}
.btn.btn-default.btn-on,
.btn.btn-default.btn-off
{
width: 50%;
}
.btn-group.on-off {
width: 100%;
}
.radio, .checkbox {
position: relative;
padding-left: 20px;
margin-bottom: 0;
vertical-align: middle;
font-weight: normal;
cursor: pointer;
}
.radio input[type="radio"] {
vertical-align: top;
}
.thumbnail {
display: inline-block;
margin-bottom: 0;
margin-right: 30px;
}
.thumbnail p {
margin: 0;
text-align: center;
}
.panel-default {
border-color: #ddd;
}
.panel-default > .panel-heading {
color: #333333;
background-color: #f5f5f5;
border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
color: #f5f5f5;
background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #ddd;
}
.panel-primary {
border-color: #337ab7;
}
.panel-primary > .panel-heading {
color: #fff;
background-color: #337ab7;
border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
color: #337ab7;
background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #337ab7;
}
.panel-success {
border-color: #d6e9c6;
}
.panel-success > .panel-heading {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
color: #dff0d8;
background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #d6e9c6;
}
.panel-info {
border-color: #bce8f1;
}
.panel-info > .panel-heading {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
color: #d9edf7;
background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #bce8f1;
}
.panel-warning {
border-color: #faebcc;
}
.panel-warning > .panel-heading {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
color: #fcf8e3;
background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #faebcc;
}
.panel-danger {
border-color: #ebccd1;
}
.panel-danger > .panel-heading {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
color: #f2dede;
background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #ebccd1;
}
.social-extension a.list-group-item {
float: left;
margin-right: -1px;
padding: 0;
width: 36px;
height: 36px;
text-align: center;
line-height: 45px;
}
.social-extension .list-group-item:first-child {
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.social-extension .list-group-item:last-child {
margin-bottom: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.social-extension .icon{
width: 20px;
height: 20px;
fill: #444;
}
.social-extension .list-group-item.active .icon {
fill: #fff;
}
.social-extension .list-group-item span {
display: none;
}
.social-extension .list-group {
height: 71px;
overflow: auto;
margin: 0;
}
.well-table {
margin-top: 10px;
}
.well-table .well {
margin-bottom: 0;
min-height: 70px;
overflow: auto;
max-height: 150px;
background-color: #eeeeee;
border: 1px solid #dddddd;
}
.input-group label {
margin: 0;
cursor: pointer;
}
input[type="radio"], input[type="checkbox"] {
margin-bottom: -2px;
}
.theme-color {
width: calc(100% + 20px);
height: 140px;
margin: 10px 0px 0 -20px;
}
.main-color,.secondary-color {
height: 65px;
border: 0;
width: 100%;
text-align: center;
line-height: 30px;
outline: 0;
}
.color-0 .main-color {
background: #2a77ed;
}
.color-0 .secondary-color {
background: #5e96eb;
}
.color-1 .main-color {
background: #e09d3d;
}
.color-1 .secondary-color {
background: #e4ad5e;
}
.color-2 .main-color {
background: #a8cf4b;
}
.color-2 .secondary-color {
background: #bede70;
}
.color-3 .main-color {
background: #8e6048;
}
.color-3 .secondary-color {
background: #a38c76;
}
.color-4 .main-color {
background: #5b5d84;
}
.color-4 .secondary-color {
background: #c8c9e3;
}
.color-5 .main-color {
background: #343434;
}
.color-5 .secondary-color {
background: #a38c76;
}
.four-colors .main-color {
width: 50%;
float: left;
}
.four-colors .secondary-color {
width: 50%;
float: left;
}
.four-colors .main-color--1 {
background: #343434;
}
.four-colors .main-color--2 {
background: #ededed;
}
.four-colors .secondary-color--1 {
background: #2f2f2f;
}
.four-colors .secondary-color--2 {
background: #f6f6f6;
}
.about-info.thumbnail {
display: block;
margin: 40px 0px 50px 0;
padding: 0 15px 15px 15px;
background: #fff;
border-radius: 0;
border: 0;
color: #343434;
box-shadow: 0px 0px 50px rgba(0, 0, 0, 0.1);
}
.about-info .lightshop-logo {
text-align: center;
margin: 0 -15px;
padding: 40px 0 37px 0;
border-bottom: 1px solid #f2f2f0;
background: #fff;
}
.about-info a,.about-info a:hover {
border-bottom: 1px solid rgba(52, 52, 52, 0.25);
color: #343434;
}
.about-info .form-group + .form-group {
border-top: 1px solid #fff;
}
.inline-text {
margin-bottom: 0;
padding-top: 9px;
}
.license-agreement {
overflow: auto;
height: 200px;
background: #f2f2f0;
border-radius: 0;
padding: 15px;
width: 100%;
border: 0;
outline: none;
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
resize: none;
}
fieldset legend {
padding: 15px;
background: #f9f9f9;
border: 0;
font-size: 15px;
text-transform: uppercase;
}
fieldset {
padding: 0;
margin: 0;
border: 0;
min-width: 0;
border-bottom: 1px solid #ededed;
margin-bottom: 30px;
}
.about-info .label-success {
padding: 5px 10px;
display: inline-block;
margin: 0 15px 0;
background-color: #2a77ed;
border-radius: 0;
font-weight: normal;
letter-spacing: .5px;
position: absolute;
}
a.tab-new:after {
position: absolute;
content: '';
background-color: #2a77ed;
padding: 4px;
border-radius: 10px;
right: 5px;
top: 5px;
}
.nav-pills-btn {
text-align: left;
box-shadow: none;
color: #333;
}
.tooltip-custom {
border-bottom: 1px dashed rgba(51, 51, 51, 0.4);
cursor: pointer;
margin-right: 15px;
}
.tooltip-custom:after {
position: absolute;
}
.tooltip-custom + .tooltip .tooltip-inner {
max-width: 300px;
}
.tooltip-custom + .tooltip a {
color: #fff;
text-decoration: underline;
}
@media screen and (max-width: 992px) {
.input-group-addon.code {
display: none;
}
}
@media screen and (max-width: 767px) {
.tabs-left > .nav-tabs {
float: none;
border-right: 0;
width: 100%;
margin-bottom: -15px;
padding-bottom: 25px;
}
.tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover, .tabs-left > .nav-tabs .active > a:focus {
border-color: #ddd;
background: #fff;
}
.tabs-left > .nav-tabs > li > a {
margin-right: 0;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
background: #eee;
}
.tabs-left > .tab-content {
float: right;
width: 100%;
border-left: 0;
margin-left: 0;
padding-left: 0;
padding-right: 0;
margin-bottom: 0;
}
.table .table {
min-width: 125vw;
}
}
@media screen and (max-width: 480px) {
.table .table {
min-width: 150vw;
}
}
.nav-pills {
margin-bottom: 15px;
}
.is-expired span {
color: #e3503e;
font-weight: bold;
}
.new-version span {
color: #2a77ed;
font-weight: bold;
}
@@ -1,47 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-module" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if error_warning %}
<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_edit }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-module" class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="module_category_status" id="input-status" class="form-control">
{% if module_lighthop_status %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,78 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-callback" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ heading_title }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-callback" class="form-horizontal">
<div class="form-group required">
<label class="col-sm-2 control-label">{{ text_id }}</label>
<div class="col-sm-10">
<input type="text" name="call_id" value="{{ callback_id }}" placeholder="{{ callback_id }}" id="callback_id" class="form-control" disabled />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ text_name }}</label>
<div class="col-sm-10">
<input type="text" name="name" value="{{ name }}" placeholder="{{ name }}" id="name" class="form-control" disabled />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ text_telephone }}</label>
<div class="col-sm-10">
<input type="text" name="telephone" value="{{ telephone }}" placeholder="{{ telephone }}" id="telephone" class="form-control" disabled />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ text_comment }}</label>
<div class="col-sm-10">
<textarea name="comment" rows="5" placeholder="Код share кнопок" id="input-comment" class="form-control">{{ comment }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ text_status }}</label>
<div class="col-sm-10">
<select name="status_id" class="form-control">
{% if (status_id == '0') %}
<option value="0" selected="selected">{{ status_wait }}</option>
<option value="1" >{{ status_done }}</option>
{% else %}
<option value="0" >{{ status_wait }}</option>
<option value="1" selected="selected">{{ status_done }}</option>
{% endif %}
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ text_added }}</label>
<div class="col-sm-10">
<input type="text" name="date_added" value="{{ date_added }}" placeholder="{{ date_added }}" id="date_added" class="form-control" disabled />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ text_modified }}</label>
<div class="col-sm-10">
<input type="text" name="date_modified" value="{{ date_modified }}" placeholder="{{ date_modified }}" id="date_modified" class="form-control" disabled />
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,98 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button onclick="$('#form').attr('action', '{{ update }}'); $('#form').submit();" data-toggle="tooltip" title="{{ status_done }}" class="btn btn-success"><i class="fa fa-refresh"></i></button>
<a onclick="$('form').submit();" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger"><i class="fa fa-trash-o"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> Заявки</h3>
</div>
<div class="panel-body">
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form" class="form-horizontal">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td width="1" style="text-align: center;"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left">{% if (sort == 'call_id') %}
<a href="{{ sort_call_id }}" class="{{ (order)|lower }}">{{ "Номер" }}</a>
{% else %}
<a href="{{ sort_call_id }}">{{ "Номер" }}</a>
{% endif %}</td>
<td class="text-left">{% if (sort == 'name') %}
<a href="{{ sort_name }}" class="{{ (order)|lower }}">{{ column_name }}</a>
{% else %}
<a href="{{ sort_name }}">{{ column_name }}</a>
{% endif %}</td>
<td class="text-right">{% if (sort == 'telephone') %}
<a href="{{ sort_telephone }}" class="{{ (order)|lower }}">{{ column_telephone }}</a>
{% else %}
<a href="{{ sort_telephone }}">{{ column_telephone }}</a>
{% endif %}</td>
<td class="text-left">{{ text_comment }}</td>
<td class="text-right">{{ text_status }}</td>
<td class="text-right">{{ text_added }}</td>
<td class="text-right">{{ text_modified }}</td>
<td class="text-right">{{ text_action }}</td>
</tr>
</thead>
<tbody>
{% if (callbacks) %}
{% for callback in callbacks %}
<tr {% if (callback['status'] != status_done) %}class="warning"{% endif %}>
<td class="text-center">{% if (callback['selected']) %}
<input type="checkbox" name="selected[]" value="{{ callback['callback_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ callback['callback_id'] }}" />
{% endif %}</td>
<td class="text-left">{{ callback['callback_id'] }}</td>
<td class="text-left">{{ callback['name'] }}</td>
<td class="text-right">{{ callback['telephone'] }}</td>
<td class="text-left">{{ callback['comment'] }}</td>
<td class="text-right">{{ callback['status'] }}</td>
<td class="text-right">{{ callback['date_added'] }}</td>
<td class="text-right">{{ callback['date_modified'] }}</td>
<td class="text-right">
<a href="{{ callback['action'] }}" data-toggle="tooltip" title="{{ text_edit }}</a>" class="btn btn-primary"><i class="fa fa-pencil"></i></a>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="9">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{# echo $results; #}</div>
</div>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,344 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-blog" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_form }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-blog" class="form-horizontal">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab-general" data-toggle="tab">{{ tab_general }}</a></li>
<li><a href="#tab-data" data-toggle="tab">{{ tab_data }}</a></li>
<li><a href="#tab-seo" data-toggle="tab">{{ tab_seo }}</a></li>
<li><a href="#tab-design" data-toggle="tab">{{ tab_design }}</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab-general">
<ul class="nav nav-tabs" id="language">
{% for language in languages %}
<li><a href="#language{{ language['language_id'] }}" data-toggle="tab"><img src="language/{{ language['code'] }}/{{ language['code'] }}.png" title="{{ language['name'] }}" /> {{ language['name'] }}</a></li>
{% endfor %}
</ul>
<div class="tab-content">
{% for language in languages %}
<div class="tab-pane" id="language{{ language['language_id'] }}">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-title{{ language['language_id'] }}">{{ entry_title }}</label>
<div class="col-sm-10">
<input type="text" name="blog_description[{{ language['language_id'] }}][title]" value="{{ blog_description[language['language_id']] is defined ? blog_description[language['language_id']]['title'] : '' }}" placeholder="{{ entry_title }}" id="input-title{{ language['language_id'] }}" class="form-control" />
{% if (error_title[language['language_id']] is defined) %}
<div class="text-danger">{{ error_title[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-description{{ language['language_id'] }}">{{ entry_description }}</label>
<div class="col-sm-10">
<textarea name="blog_description[{{ language['language_id'] }}][description]" placeholder="{{ entry_description }}" id="input-description{{ language['language_id'] }}" data-lang="{{ lang }}" class="form-control" data-toggle="summernote" data-lang="{{ summernote }}">{{ blog_description[language['language_id']] is defined ? blog_description[language['language_id']]['description'] : '' }}</textarea>
{% if (error_description[language['language_id']] is defined) %}
<div class="text-danger">{{ error_description[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-title{{ language['language_id'] }}">{{ entry_meta_title }}</label>
<div class="col-sm-10">
<input type="text" name="blog_description[{{ language['language_id'] }}][meta_title]" value="{{ blog_description[language['language_id']] is defined ? blog_description[language['language_id']]['meta_title'] : '' }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language['language_id'] }}" class="form-control" />
{% if (error_meta_title[language['language_id']] is defined) %}
<div class="text-danger">{{ error_meta_title[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-h1{{ language['language_id'] }}">{{ entry_meta_h1 }}</label>
<div class="col-sm-10">
<input type="text" name="blog_description[{{ language['language_id'] }}][meta_h1]" value="{{ blog_description[language['language_id']] is defined ? blog_description[language['language_id']]['meta_h1'] : '' }}" placeholder="{{ entry_meta_h1 }}" id="input-meta-h1{{ language['language_id'] }}" class="form-control" />
{% if (error_meta_title[language['language_id']] is defined) %}
<div class="text-danger">{{ error_meta_title[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-description{{ language['language_id'] }}">{{ entry_meta_description }}</label>
<div class="col-sm-10">
<textarea name="blog_description[{{ language['language_id'] }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language['language_id'] }}" class="form-control">{{ blog_description[language['language_id']] is defined ? blog_description[language['language_id']]['meta_description'] : '' }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-keyword{{ language['language_id'] }}">{{ entry_meta_keyword }}</label>
<div class="col-sm-10">
<textarea name="blog_description[{{ language['language_id'] }}][meta_keyword]" rows="5" placeholder="{{ entry_meta_keyword }}" id="input-meta-keyword{{ language['language_id'] }}" class="form-control">{{ blog_description[language['language_id']] is defined ? blog_description[language['language_id']]['meta_keyword'] : '' }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-tag{{ language['language_id'] }}">{{ entry_tag }}</label>
<div class="col-sm-10">
<input type="text" name="blog_description[{{ language['language_id'] }}][tag]" value="{{ blog_description[language['language_id']] is defined ? blog_description[language['language_id']]['tag'] : '' }}" placeholder="{{ entry_tag }}" id="input-tag{{ language['language_id'] }}" class="form-control" />
{% if (error_tag[language['language_id']] is defined) %}
<div class="text-danger">{{ error_tag[language['language_id']] }}</div>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="tab-pane" id="tab-data">
<div class="form-group">
<label class="col-sm-2 control-label">{{ entry_store }}</label>
<div class="col-sm-10">
<div class="well well-sm" style="height: 150px; overflow: auto;">
{% for store in stores %}
<div class="checkbox">
<label> {% if store.store_id in blog_store %}
<input type="checkbox" name="blog_store[]" value="{{ store.store_id }}" checked="checked" />
{{ store.name }}
{% else %}
<input type="checkbox" name="blog_store[]" value="{{ store.store_id }}" />
{{ store.name }}
{% endif %}</label>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-category">{{ entry_main_category }}</label>
<div class="col-sm-10">
<select id="main_category_id" name="main_category_id" class="form-control">
<option value="0" selected="selected">{{ text_none }}</option>
{% for category in categories %}
{% if (category['category_id'] == main_category_id) %}
<option value="{{ category['category_id'] }}" selected="selected">{{ category['name'] }}</option>
{% else %}
<option value="{{ category['category_id'] }}">{{ category['name'] }}</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-date"><span data-toggle="tooltip" title="{{ help_date_added }}">{{ entry_date_added }}</span></label>
<div class="col-sm-10">
<div class="input-group date">
<input type="text" name="date_added" value="{{ date_added }}" placeholder="{{ entry_date_added }}" data-date-format="YYYY-MM-DD" id="input-date-available" class="form-control" />
<span class="input-group-btn">
<button class="btn btn-default" type="button"><i class="fa fa-calendar"></i></button>
</span></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-related"><span data-toggle="tooltip" title="{{ help_related }}">{{ entry_related }}</span></label>
<div class="col-sm-10">
<input type="text" name="related" value="" placeholder="{{ entry_related }}" id="input-related" class="form-control" />
<div id="blog-related" class="well well-sm" style="height: 150px; overflow: auto;">
{% for blog_related in blog_relateds %}
<div id="blog-related{{ blog_related['blog_id'] }}"><i class="fa fa-minus-circle"></i> {{ blog_related['name'] }}
<input type="hidden" name="blog_related[]" value="{{ blog_related['blog_id'] }}" />
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-related-products"><span data-toggle="tooltip" title="{{ help_related_products }}">{{ entry_related_products }}</span></label>
<div class="col-sm-10">
<input type="text" name="related-products" value="" placeholder="{{ entry_related_products }}" id="input-related-products" class="form-control" />
<div id="product-related" class="well well-sm" style="height: 150px; overflow: auto;">
{% for product_related in product_relateds %}
<div id="product-related{{ product_related['product_id'] }}"><i class="fa fa-minus-circle"></i> {{ product_related['name'] }}
<input type="hidden" name="product_related[]" value="{{ product_related['product_id'] }}" />
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ entry_image }}</label>
<div class="col-sm-10"><a href="" id="thumb-image" data-toggle="image" class="img-thumbnail"><img src="{{ thumb }}" alt="" title="" data-placeholder="{{ placeholder }}" /></a>
<input type="hidden" name="image" value="{{ image }}" id="input-image" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" id="input-status" class="form-control">
{% if (status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</div>
<div class="tab-pane" id="tab-seo">
<div class="alert alert-info"><i class="fa fa-info-circle"></i> {{ help_keyword }} </div>
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td class="text-left">{{ entry_store }}</td>
<td class="text-left">{{ entry_keyword }}</td>
</tr>
</thead>
<tbody>
{% for store in stores %}
<tr>
<td class="text-left">{{ store.name }}</td>
<td class="text-left">{% for language in languages %}
<div class="input-group"><span class="input-group-addon"><img src="language/{{ language.code }}/{{ language.code }}.png" title="{{ language.name }}" /></span>
<input type="text" name="blog_seo_url[{{ store.store_id }}][{{ language.language_id }}]" value="{% if blog_seo_url[store.store_id][language.language_id] %}{{ blog_seo_url[store.store_id][language.language_id] }}{% endif %}" placeholder="{{ entry_keyword }}" class="form-control" />
</div>
{% if error_keyword[store.store_id][language.language_id] %}
<div class="text-danger">{{ error_keyword[store.store_id][language.language_id] }}</div>
{% endif %}
{% endfor %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="tab-pane" id="tab-design">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td class="text-left">{{ entry_store }}</td>
<td class="text-left">{{ entry_layout }}</td>
</tr>
</thead>
<tbody>
{% for store in stores %}
<tr>
<td class="text-left">{{ store.name }}</td>
<td class="text-left"><select name="blog_layout[{{ store.store_id }}]" class="form-control">
<option value=""></option>
{% for layout in layouts %}
{% if blog_layout[store.store_id] and blog_layout[store.store_id] == layout.layout_id %}
<option value="{{ layout.layout_id }}" selected="selected">{{ layout.name }}</option>
{% else %}
<option value="{{ layout.layout_id }}">{{ layout.name }}</option>
{% endif %}
{% endfor %}
</select></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript"><!--
{% if (ckeditor) %}
{% for language in languages %}
ckeditorInit('input-description{{ language['language_id'] }}', getURLVar('user_token'));
{% endfor %}
{% endif %}
//--></script>
<script type="text/javascript"><!--
$('#language a:first').tab('show');
$('.date').datetimepicker({
pickTime: false
});
// Related
$('input[name=\'related\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=extension/module/lightshop/lightshop_blog/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['blog_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'related\']').val('');
$('#blog-related' + item['value']).remove();
$('#blog-related').append('<div id="blog-related' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="blog_related[]" value="' + item['value'] + '" /></div>');
}
});
$('#blog-related').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
// Related products
$('input[name=\'related-products\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/product/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['product_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'related-products\']').val('');
$('#product-related' + item['value']).remove();
$('#product-related').append('<div id="product-related' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_related[]" value="' + item['value'] + '" /></div>');
}
});
$('#product-related').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
//--></script></div>
{{ footer }}
@@ -1,85 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right"><a href="{{ add }}" data-toggle="tooltip" title="{{ button_add }}" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<button type="button" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger" onclick="confirm('{{ text_confirm }}') ? $('#form-blog').submit() : false;"><i class="fa fa-trash-o"></i></button>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> {{ text_list }}</h3>
</div>
<div class="panel-body">
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form-blog">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left" class="text-center" style="width: 130px;">{{ column_image }}</td>
<td class="text-left">{% if (sort == 'id.title') %}
<a href="{{ sort_title }}" class="{{ (order)|lower }}">{{ column_title }}</a>
{% else %}
<a href="{{ sort_title }}">{{ column_title }}</a>
{% endif %}</td>
<td class="text-right">{% if (sort == 'i.date_added') %}
<a href="{{ sort_date_added }}" class="{{ (order)|lower }}">{{ column_date_added }}</a>
{% else %}
<a href="{{ sort_date_added }}">{{ column_date_added }}</a>
{% endif %}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if (blogs) %}
{% for blog in blogs %}
<tr>
<td class="text-center">{% if blog['blog_id'] in selected %}
<input type="checkbox" name="selected[]" value="{{ blog['blog_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ blog['blog_id'] }}" />
{% endif %}</td>
<td class="text-center"><img src="{{ blog['image'] }}" alt="" title="" class="img-thumbnail" style="width: 50px;"></td>
<td class="text-left">{{ blog['title'] }}</td>
<td class="text-right">{{ blog['date_added'] }}</td>
<td class="text-right"><a href="{{ blog['edit'] }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="4">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{{ results }}</div>
</div>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,263 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-news" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_form }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-news" class="form-horizontal">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab-general" data-toggle="tab">{{ tab_general }}</a></li>
<li><a href="#tab-data" data-toggle="tab">{{ tab_data }}</a></li>
<li><a href="#tab-seo" data-toggle="tab">{{ tab_seo }}</a></li>
<li><a href="#tab-design" data-toggle="tab">{{ tab_design }}</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab-general">
<ul class="nav nav-tabs" id="language">
{% for language in languages %}
<li><a href="#language{{ language['language_id'] }}" data-toggle="tab"><img src="language/{{ language['code'] }}/{{ language['code'] }}.png" title="{{ language['name'] }}" /> {{ language['name'] }}</a></li>
{% endfor %}
</ul>
<div class="tab-content">
{% for language in languages %}
<div class="tab-pane" id="language{{ language['language_id'] }}">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-title{{ language['language_id'] }}">{{ entry_title }}</label>
<div class="col-sm-10">
<input type="text" name="news_description[{{ language['language_id'] }}][title]" value="{{ news_description[language['language_id']] is defined ? news_description[language['language_id']]['title'] : '' }}" placeholder="{{ entry_title }}" id="input-title{{ language['language_id'] }}" class="form-control" />
{% if (error_title[language['language_id']] is defined) %}
<div class="text-danger">{{ error_title[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-description{{ language['language_id'] }}">{{ entry_description }}</label>
<div class="col-sm-10">
<textarea name="news_description[{{ language['language_id'] }}][description]" placeholder="{{ entry_description }}" id="input-description{{ language['language_id'] }}" data-lang="{{ lang }}" class="form-control" data-toggle="summernote" data-lang="{{ summernote }}">{{ news_description[language['language_id']] is defined ? news_description[language['language_id']]['description'] : '' }}</textarea>
{% if (error_description[language['language_id']] is defined) %}
<div class="text-danger">{{ error_description[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-title{{ language['language_id'] }}">{{ entry_meta_title }}</label>
<div class="col-sm-10">
<input type="text" name="news_description[{{ language['language_id'] }}][meta_title]" value="{{ news_description[language['language_id']] is defined ? news_description[language['language_id']]['meta_title'] : '' }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language['language_id'] }}" class="form-control" />
{% if (error_meta_title[language['language_id']] is defined) %}
<div class="text-danger">{{ error_meta_title[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-h1{{ language['language_id'] }}">{{ entry_meta_h1 }}</label>
<div class="col-sm-10">
<input type="text" name="news_description[{{ language['language_id'] }}][meta_h1]" value="{{ news_description[language['language_id']] is defined ? news_description[language['language_id']]['meta_h1'] : '' }}" placeholder="{{ entry_meta_h1 }}" id="input-meta-h1{{ language['language_id'] }}" class="form-control" />
{% if (error_meta_title[language['language_id']] is defined) %}
<div class="text-danger">{{ error_meta_title[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-description{{ language['language_id'] }}">{{ entry_meta_description }}</label>
<div class="col-sm-10">
<textarea name="news_description[{{ language['language_id'] }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language['language_id'] }}" class="form-control">{{ news_description[language['language_id']] is defined ? news_description[language['language_id']]['meta_description'] : '' }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-keyword{{ language['language_id'] }}">{{ entry_meta_keyword }}</label>
<div class="col-sm-10">
<textarea name="news_description[{{ language['language_id'] }}][meta_keyword]" rows="5" placeholder="{{ entry_meta_keyword }}" id="input-meta-keyword{{ language['language_id'] }}" class="form-control">{{ news_description[language['language_id']] is defined ? news_description[language['language_id']]['meta_keyword'] : '' }}</textarea>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="tab-pane" id="tab-data">
<div class="form-group">
<label class="col-sm-2 control-label">{{ entry_store }}</label>
<div class="col-sm-10">
<div class="well well-sm" style="height: 150px; overflow: auto;">
{% for store in stores %}
<div class="checkbox">
<label> {% if store.store_id in news_store %}
<input type="checkbox" name="news_store[]" value="{{ store.store_id }}" checked="checked" />
{{ store.name }}
{% else %}
<input type="checkbox" name="news_store[]" value="{{ store.store_id }}" />
{{ store.name }}
{% endif %}</label>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-date"><span data-toggle="tooltip" title="{{ help_date_added }}">{{ entry_date_added }}</span></label>
<div class="col-sm-10">
<div class="input-group date">
<input type="text" name="date_added" value="{{ date_added }}" placeholder="{{ entry_date_added }}" data-date-format="YYYY-MM-DD" id="input-date-available" class="form-control" />
<span class="input-group-btn">
<button class="btn btn-default" type="button"><i class="fa fa-calendar"></i></button>
</span></div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-related"><span data-toggle="tooltip" title="{{ help_related }}">{{ entry_related }}</span></label>
<div class="col-sm-10">
<input type="text" name="related" value="" placeholder="{{ entry_related }}" id="input-related" class="form-control" />
<div id="product-related" class="well well-sm" style="height: 150px; overflow: auto;">
{% for product_related in product_relateds %}
<div id="product-related{{ product_related['product_id'] }}"><i class="fa fa-minus-circle"></i> {{ product_related['name'] }}
<input type="hidden" name="product_related[]" value="{{ product_related['product_id'] }}" />
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" id="input-status" class="form-control">
{% if (status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</div>
<div class="tab-pane" id="tab-seo">
<div class="alert alert-info"><i class="fa fa-info-circle"></i> {{ help_keyword }}</div>
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td class="text-left">{{ entry_store }}</td>
<td class="text-left">{{ entry_keyword }}</td>
</tr>
</thead>
<tbody>
{% for store in stores %}
<tr>
<td class="text-left">{{ store.name }}</td>
<td class="text-left">{% for language in languages %}
<div class="input-group"><span class="input-group-addon"><img src="language/{{ language.code }}/{{ language.code }}.png" title="{{ language.name }}" /></span>
<input type="text" name="news_seo_url[{{ store.store_id }}][{{ language.language_id }}]" value="{% if news_seo_url[store.store_id][language.language_id] %}{{ news_seo_url[store.store_id][language.language_id] }}{% endif %}" placeholder="{{ entry_keyword }}" class="form-control" />
</div>
{% if error_keyword[store.store_id][language.language_id] %}
<div class="text-danger">{{ error_keyword[store.store_id][language.language_id] }}</div>
{% endif %}
{% endfor %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="tab-pane" id="tab-design">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td class="text-left">{{ entry_store }}</td>
<td class="text-left">{{ entry_layout }}</td>
</tr>
</thead>
<tbody>
{% for store in stores %}
<tr>
<td class="text-left">{{ store.name }}</td>
<td class="text-left"><select name="news_layout[{{ store.store_id }}]" class="form-control">
<option value=""></option>
{% for layout in layouts %}
{% if news_layout[store.store_id] and news_layout[store.store_id] == layout.layout_id %}
<option value="{{ layout.layout_id }}" selected="selected">{{ layout.name }}</option>
{% else %}
<option value="{{ layout.layout_id }}">{{ layout.name }}</option>
{% endif %}
{% endfor %}
</select></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript"><!--
{% if (ckeditor) %}
{% for language in languages %}
ckeditorInit('input-description{{ language['language_id'] }}', getURLVar('user_token'));
{% endfor %}
{% endif %}
//--></script>
<script type="text/javascript"><!--
$('#language a:first').tab('show');
$('.date').datetimepicker({
pickTime: false
});
// Related
$('input[name=\'related\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/product/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['product_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'related\']').val('');
$('#product-related' + item['value']).remove();
$('#product-related').append('<div id="product-related' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_related[]" value="' + item['value'] + '" /></div>');
}
});
$('#product-related').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
//--></script></div>
{{ footer }}
@@ -1,84 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right"><a href="{{ add }}" data-toggle="tooltip" title="{{ button_add }}" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<button type="button" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger" onclick="confirm('{{ text_confirm }}') ? $('#form-news').submit() : false;"><i class="fa fa-trash-o"></i></button>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> {{ text_list }}</h3>
</div>
<div class="panel-body">
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form-news">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left">{% if (sort == 'id.title') %}
<a href="{{ sort_title }}" class="{{ (order)|lower }}">{{ column_title }}</a>
{% else %}
<a href="{{ sort_title }}">{{ column_title }}</a>
{% endif %}</td>
<td class="text-right">{% if (sort == 'i.date_added') %}
<a href="{{ sort_date_added }}" class="{{ (order)|lower }}">{{ column_date_added }}</a>
{% else %}
<a href="{{ sort_date_added }}">{{ column_date_added }}</a>
{% endif %}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if (newss) %}
{% for news in newss %}
<tr>
<td class="text-center">{% if news['news_id'] in selected %}
<input type="checkbox" name="selected[]" value="{{ news['news_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ news['news_id'] }}" />
{% endif %}</td>
<td class="text-left">{{ news['title'] }}</td>
<td class="text-right">{{ news['date_added'] }}</td>
<td class="text-right"><a href="{{ news['edit'] }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="4">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{{ results }}</div>
</div>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,249 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-set" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_form }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-set" class="form-horizontal">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab-general" data-toggle="tab">{{ tab_general }}</a></li>
<li><a href="#tab-data" data-toggle="tab">{{ tab_data }}</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab-general">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-theme_lightshop_set_name">{{ text_name }}</label>
<div class="col-sm-10">
{% for language in languages %}
<div class="input-group"><span class="input-group-addon"><img src="language/{{ language['code'] }}/{{ language['code'] }}.png" title="{{ language['name'] }}" /></span>
<input type="text" name="set_description[{{ language['language_id'] }}][title]" value="{{ set_description[language['language_id']] is defined ? set_description[language['language_id']]['title'] : '' }}" placeholder="{{ entry_title }}" id="input-title{{ language['language_id'] }}" class="form-control" />
</div>
{% endfor %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-mode">{{ entry_mode }}</label>
<div class="col-sm-10">
<select name="mode" id="input-mode" class="form-control">
{% if (mode) %}
<option value="1" selected="selected">{{ text_percent }}</option>
<option value="0">{{ text_fix }}</option>
{% else %}
<option value="1">{{ text_percent }}</option>
<option value="0" selected="selected">{{ text_fix }}</option>
{% endif %}
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ text_discount }}</label>
<div class="col-sm-2">
<input type="text" name="discount" value="{{ discount }}" placeholder="{{ entry_title }}" class="form-control" />
</div>
</div>
<table id="products" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<td class="text-left"><span data-toggle="tooltip" data-container="#tab-general" title="{{ entry_product_info }}">{{ entry_product }}</span></td>
<td class="text-left">{{ entry_product_qty }}</td>
<td class="text-right">{{ entry_sort_order }}</td>
<td></td>
</tr>
</thead>
<tbody>
{% set product_row = 0 %}
{% for product in products %}
<tr id="product-row-{{ product_row }}">
<td class="text-left">
<input type="text" name="product[{{ product_row }}][name]" value="" placeholder="{{ entry_product }}" id="input-set-{{ product_row }}" class="product_input form-control" />
<div id="setproductsrow-{{ product_row }}" class="well well-sm" style="overflow: auto;">
{% set addsrow = 0 %}
{% for id,product2row in product['products'] %}
<div id="set_row-{{ product_row }}-product-{{ id }}"><i class="fa fa-minus-circle"></i>{{ product2row['name'] }}<input type="hidden" name="product[{{ product_row }}][items][{{ product2row['product_id'] }}][id]; ?>]" value="{{ product2row['product_id'] }}"></div>
{% set addsrow = addsrow + 1 %}
{% endfor %}
</div>
</td>
<td class="text-right"><input type="text" name="product[{{ product_row }}][qty]" value="{{ product['qty'] }}" placeholder="{{ entry_sort_order }}" class="form-control" /></td>
<td class="text-right"><input type="text" name="product[{{ product_row }}][sort_order]" value="{{ product['sort_order'] }}" placeholder="{{ entry_sort_order }}" class="form-control" /></td>
<td class="text-left"><button type="button" onclick="$('#product-row-{{ product_row }}').remove();" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger"><i class="fa fa-minus-circle"></i></button></td>
</tr>
{% set product_row = product_row + 1 %}
{% endfor %}
</tbody>
<tfoot>
<tr>
<td colspan="3"></td>
<td class="text-left"><button type="button" onclick="addProduct();" data-toggle="tooltip" title="{{ text_add_product }}" class="btn btn-primary"><i class="fa fa-plus-circle"></i></button></td>
</tr>
</tfoot>
</table>
</div>
<div class="tab-pane" id="tab-data">
<div class="form-group">
<label class="col-sm-2 control-label">{{ entry_store }}</label>
<div class="col-sm-10">
<div class="well well-sm" style="height: 150px; overflow: auto;">
<div class="checkbox">
<label>
{% if 0 in set_store %}
<input type="checkbox" name="set_store[]" value="0" checked="checked" />
{{ text_default }}
{% else %}
<input type="checkbox" name="set_store[]" value="0" />
{{ text_default }}
{% endif %}
</label>
</div>
{% for store in stores %}
<div class="checkbox">
<label>
{% if store['store_id'] in set_store %}
<input type="checkbox" name="set_store[]" value="{{ store['store_id'] }}" checked="checked" />
{{ store['name'] }}
{% else %}
<input type="checkbox" name="set_store[]" value="{{ store['store_id'] }}" />
{{ store['name'] }}
{% endif %}
</label>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" id="input-status" class="form-control">
{% if (status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript"><!--
{% if (ckeditor) %}
{% for language in languages %}
ckeditorInit('input-description{{ language['language_id'] }}', getURLVar('user_token'));
{% endfor %}
{% endif %}
//--></script>
<script type="text/javascript"><!--
$('#language a:first').tab('show');
$('.date').datetimepicker({
pickTime: false
});
function addAutocomplete() {
$('.product_input').autocomplete({
'source': function(request, response) {
var row = $(this).prop("id");
$.ajax({
url: 'index.php?route=catalog/product/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['product_id'],
rowid: row
}
}));
}
});
},
'select': function(item) {
var sel = '#'+item['rowid'];
console.log(sel);
$(sel).val(item['label']);
$(sel).siblings('.product_data').val(item['value']);
var row = $(this).attr('id');
var rownum = row.split('-');
rownum = rownum[2];
$(this).val('');
$('#setproductsrow-'+rownum).append('<div id="set_row-'+rownum+'-product-' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product['+rownum+'][items]['+item['value']+'][id]" value="' + item['value'] + '" /></div>');
}
});
}
$('#product-related').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
var product_row = {{ product_row }};
function addProduct() {
html = '<tr id="product-row-' + product_row + '">';
html += ' <td class="text-left"><input class="product_input form-control" name="product[' + product_row + '][name]" value="" id="input-set-' + product_row + '" /><input class="product_data" type="hidden" name="product[' + product_row + '][id]" value="" id="input-product-' + product_row + '" />';
html += '<div id="setproductsrow-' + product_row + '" class="well well-sm" style="overflow: auto;">';
html += '</div></td>';
html += '<td class="text-right"><input type="text" name="product[' + product_row + '][qty]" value="1" class="form-control" /></td>';
html += ' <td class="text-right"><input type="text" name="product[' + product_row + '][sort_order]" value="1" placeholder="{{ entry_sort_order }}" class="form-control" /></td>';
html += ' <td class="text-left"><button type="button" onclick="$(\'#product-row-' + product_row + '\').remove();" data-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger"><i class="fa fa-minus-circle"></i></button></td>';
html += '</tr>';
$('#products tbody').append(html);
product_row++;
addAutocomplete();
}
$(document).ready(function() {
addAutocomplete();
$(document).on('click', '.well-sm .fa-minus-circle', function() {
$(this).parent().remove();
});
})
//--></script></div>
{{ footer }}
@@ -1,85 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right"><a href="{{ add }}" data-toggle="tooltip" title="{{ button_add }}" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<button type="button" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger" onclick="confirm('{{ text_confirm }}') ? $('#form-set').submit() : false;"><i class="fa fa-trash-o"></i></button>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> {{ text_list }}</h3>
</div>
<div class="panel-body">
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form-set">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left">{% if (sort == 'id.title') %}
<a href="{{ sort_title }}" class="{{ (order)|lower }}">{{ column_title }}</a>
{% else %}
<a href="{{ sort_title }}">{{ column_title }}</a>
{% endif %}</td>
<td class="text-right">{% if (sort == 'i.date_added') %}
<a href="{{ sort_date_added }}" class="{{ (order)|lower }}">{{ column_date_added }}</a>
{% else %}
<a href="{{ sort_date_added }}">{{ column_date_added }}</a>
{% endif %}</td>
<td class="text-right">{{ column_status }}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if (sets) %}
{% for set in sets %}
<tr>
<td class="text-center">{% if set['set_id'] in selected %}
<input type="checkbox" name="selected[]" value="{{ set['set_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ set['set_id'] }}" />
{% endif %}</td>
<td class="text-left">{{ set['title'] }}</td>
<td class="text-right">{{ set['date_added'] }}</td>
<td class="text-left">{{ set['status'] }}</td>
<td class="text-right"><a href="{{ set['edit'] }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="5">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{{ results }}</div>
</div>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,247 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-set" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_form }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-set" class="form-horizontal">
<div class="tab-content">
<div class="form-group">
<label class="col-sm-2 control-label" for="input-description1"><span data-toggle="tooltip" title="" data-original-title="{{ help_product_tabs_main }}">{{ text_tabs_shablon }}</span></label>
<div class="col-sm-10">
<select name="view" class="form-control">
<option value="tab" {{ view == "tab" ? 'selected="selected"' : '' }}>{{ text_tabs_tab }}</option>
<option value="popup" {{ view == "popup" ? 'selected="selected"' : '' }}>{{ text_tabs_popup }}</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-description1">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" class="form-control">
<option value="1" {{ status == 1 ? 'selected="selected"' : '' }}>{{ text_enabled }}</option>
<option value="0" {{ status == 0 ? 'selected="selected"' : '' }}>{{ text_disabled }}</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-description1">{{ text_tabs_links }}</label>
<div class="col-sm-10">
<select name="mode" class="form-control cust_tabs_mode">
<option value="products" {{ mode == "products" ? 'selected="selected"' : '' }}>{{ text_tabs_to_products }}</option>
<option value="categories" {{ mode == "categories" ? 'selected="selected"' : '' }}>{{ text_tabs_tab_to_categories }}</option>
</select>
</div>
</div>
<div class="form-group tabsmode" id="customtab-products" style="display: {{ mode == "products" ? 'block' : 'none' }};">
<label class="col-sm-2 control-label" for="input-product"><span data-toggle="tooltip" title="" data-original-title="{{ help_product_tabs_select }}">{{ text_products }}</span></label>
<div class="col-sm-10 required">
<input type="text" name="product" value="" placeholder="{{ text_products }}" class="form-control tab-products">
{% if (error_instanses) %}
<div class="text-danger">{{ error_instanses }}</div>
{% endif %}
<div class="well well-sm" id="cust_tabs-products" style="height: 150px; overflow: auto;">
{% if (mode == "products") %}
{% for instanse in instanses %}
<div id="product{{ instanse['id'] }}"><i class="fa fa-minus-circle"></i>{{ instanse['name'] }}<input type="hidden" name="instanses[products][]" value="{{ instanse['id'] }}">
</div>
{% endfor %}
{% endif %}
</div>
</div>
</div>
<div class="form-group tabsmode" id="customtab-categories" style="display: {{ mode == "categories" ? 'block' : 'none' }};">
<label class="col-sm-2 control-label" for="input-categories"><span data-toggle="tooltip" title="" data-original-title="{{ help_product_tabs_cat_select }}">{{ text_categories }}</span></label>
<div class="col-sm-10">
<input type="text" name="category" value="" placeholder="{{ text_categories }}" class="form-control tab-categories">
<div class="well well-sm" id="cust_tabs-categories" style="height: 150px; overflow: auto;">
{% if (mode == "categories") %}
{% for instanse in instanses %}
<div id="category{{ instanse['id'] }}"><i class="fa fa-minus-circle"></i>{{ instanse['name'] }}<input type="hidden" name="instanses[categories][]" value="{{ instanse['id'] }}">
</div>
{% endfor %}
{% endif %}
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="">{{ text_sort_order }}</label>
<div class="col-sm-10">
<input type="text" name="sort_order" value="{{ sort_order }}" placeholder="{{ text_sort_order }}" class="form-control">
</div>
</div>
<ul class="nav nav-tabs" id="language_tab">
{% for language in languages %}
<li ><a href="#language_tab-{{ language['language_id'] }}" data-toggle="tab" aria-expanded="true"><img src="language/{{ language['code'] }}/{{ language['code'] }}.png" title="{{ language['name'] }}"> {{ language['name'] }}</a></li>
{% endfor %}
</ul>
<div class="tab-content">
{% for language in languages %}
<div class="tab-pane " id="language_tab-{{ language['language_id'] }}">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-name1">{{ text_name }}</label>
<div class="col-sm-10">
<input type="text" name="title[{{ language['language_id'] }}]" value="{{ title[language['language_id']] is defined ? title[language['language_id']] : '' }}" placeholder="{{ text_name }}" class="form-control" />
{% if (error_title[language['language_id']] is defined) %}
<div class="text-danger">{{ error_title[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-description1">{{ text_description }}</label>
<div class="col-sm-10">
<textarea name="description[{{ language['language_id'] }}]" id="tabdescription-{{ language['language_id'] }}" placeholder="{{ text_description }}" data-lang="{{ language['code'] }}" class="form-control" data-toggle="summernote" data-lang="{{ summernote }}">{{ description[language['language_id']] is defined ? description[language['language_id']] : '' }}</textarea>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ entry_store }}</label>
<div class="col-sm-10">
<div class="well well-sm" style="height: 150px; overflow: auto;">
<div class="checkbox">
<label>
{% if 0 in tab_store %}
<input type="checkbox" name="stories[]" value="0" checked="checked" />
{{ text_default }}
{% else %}
<input type="checkbox" name="stories[]" value="0" />
{{ text_default }}
{% endif %}
</label>
</div>
{% for store in stores %}
<div class="checkbox">
<label>
{% if store['store_id'] in tab_store %}
<input type="checkbox" name="stories[]" value="{{ store['store_id'] }}" checked="checked" />
{{ store['name'] }}
{% else %}
<input type="checkbox" name="stories[]" value="{{ store['store_id'] }}" />
{{ store['name'] }}
{% endif %}
</label>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript"><!--
{% if (ckeditor) %}
{% for language in languages %}
ckeditorInit('tabdescription-{{ language['language_id'] }}', getURLVar('user_token'));
{% endfor %}
{% endif %}
$('#language_tab a:first').tab('show');
$('.date').datetimepicker({
pickTime: false
});
$('.tab-products').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/product/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['product_id']
}
}));
}
});
},
'select': function(item) {
$('.tab-products').val('');
$('#cust_tabs-product-' + item['value']).remove();
$('#cust_tabs-products').append('<div id="cust_tabs-product-' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="instanses[products][]" value="' + item['value'] + '" /></div>');
}
});
$('.tab-categories').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/category/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['category_id']
}
}));
}
});
},
'select': function(item) {
var row = $(this).attr('data-for');
$('.tab-categories').val('');
$('#cust_tabs-categories-' + item['value']).remove();
$('#cust_tabs-categories').append('<div id="cust_tabs-category-' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="instanses[categories][]" value="' + item['value'] + '" /></div>');
}
});
$('#product-related').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
$('#form-set').on('change','.cust_tabs_mode', function() {
$('.tabsmode').hide();
var sel = $(this).val();
$('#customtab-'+sel).show();
});
$(document).ready(function() {
$(document).on('click', '.well-sm .fa-minus-circle', function() {
$(this).parent().remove();
});
})
//--></script>
</div>
{{ footer }}
@@ -1,143 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right"><a href="{{ add }}" data-toggle="tooltip" title="{{ button_add }}" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<button type="button" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger" onclick="confirm('{{ text_confirm }}') ? $('#form-tab').submit() : false;"><i class="fa fa-trash-o"></i></button>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> {{ text_list }}</h3>
</div>
<div class="panel-body">
<div class="well">
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="control-label" for="input-name">{{ text_instanse }}</label>
<input type="text" name="filter_instanse" value="{{ filter_instanse }}" placeholder="{{ text_instanse }}" id="input-name" class="form-control" />
</div>
<button type="button" id="button-filter" class="btn btn-primary pull-right"><i class="fa fa-filter"></i> {{ button_filter }}</button>
<a href="{{ reset }}" title="{{ button_clear }}" class="btn btn-primary"><i class="fa fa-trash-o"></i></a>
</div>
</div>
</div>
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form-tab">
<input type="hidden" name="filter_instanse_id" value="{{ filter_instanse_id }}" id="input-name" class="form-control" />
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left">{% if (sort == 'id.title') %}
<a href="{{ sort_title }}" class="{{ (order)|lower }}">{{ column_title }}</a>
{% else %}
<a href="{{ sort_title }}">{{ column_title }}</a>
{% endif %}</td>
<td class="text-right">{{ column_mode }}</td>
<td class="text-right">{{ column_instanses }}</td>
<td class="text-right">{{ column_status }}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if (tabs) %}
{% for tab in tabs %}
<tr>
<td class="text-center">{% if tab['cust_tab_id'] in selected %}
<input type="checkbox" name="selected[]" value="{{ tab['cust_tab_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ tab['cust_tab_id'] }}" />
{% endif %}</td>
<td class="text-left">{{ tab['title'] }}</td>
<td class="text-left">{{ tab['mode'] }}</td>
<td class="text-right">
{% for instanse in tab['instanses'] %}
{{ instanse['name'] }}<br>
{% endfor %}</td>
</td>
<td class="text-left">{{ tab['status'] ? text_enabled : text_disabled }}</td>
<td class="text-right"><a href="{{ tab['edit'] }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="6">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{{ results }}</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript"><!--
$('#button-filter').on('click', function() {
var url = 'index.php?route=extension/module/lightshop/lightshop_tab&user_token={{ user_token }}';
var filter_id = $('input[name=\'filter_instanse_id\']').val();
var filter = $('input[name=\'filter_instanse\']').val();
if (filter_id) {
url += '&filter_instanse_id=' + encodeURIComponent(filter_id);
}
if (filter) {
url += '&filter_instanse=' + encodeURIComponent(filter);
}
location = url;
});
//--></script>
<script type="text/javascript"><!--
$('input[name=\'filter_instanse\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=extension/module/lightshop/lightshop_tab/autocomplete&user_token={{ user_token }}&filter_instanse=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['mode'] + '->' + item['name'],
value: item['id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'filter_instanse\']').val(item['label']);
$('input[name=\'filter_instanse_id\']').val(item['value']);
}
});
//--></script>
{{ footer }}
@@ -1,114 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-review" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_form }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-review" class="form-horizontal">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-author">{{ entry_author }}</label>
<div class="col-sm-10">
<input type="text" name="author" value="{{ author }}" placeholder="{{ entry_author }}" id="input-author" class="form-control" />
{% if (error_author) %}
<div class="text-danger">{{ error_author }}</div>
{% endif %}
</div>
</div>
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-blog"><span data-toggle="tooltip" title="{{ help_blog }}">{{ entry_blog }}</span></label>
<div class="col-sm-10">
<input type="text" name="blog" value="{{ blog }}" placeholder="{{ entry_blog }}" id="input-blog" class="form-control" />
<input type="hidden" name="blog_id" value="{{ blog_id }}" />
{% if (error_blog) %}
<div class="text-danger">{{ error_blog }}</div>
{% endif %}
</div>
</div>
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-text">{{ entry_text }}</label>
<div class="col-sm-10">
<textarea name="text" cols="60" rows="8" placeholder="{{ entry_text }}" id="input-text" class="form-control">{{ text }}</textarea>
{% if (error_text) %}
<div class="text-danger">{{ error_text }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-date-added">{{ entry_date_added }}</label>
<div class="col-sm-3">
<div class="input-group datetime">
<input type="text" name="date_added" value="{{ date_added }}" placeholder="{{ entry_date_added }}" data-date-format="YYYY-MM-DD HH:mm:ss" id="input-date-added" class="form-control" />
<span class="input-group-btn">
<button type="button" class="btn btn-default"><i class="fa fa-calendar"></i></button>
</span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" id="input-status" class="form-control">
{% if (status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript"><!--
$('.datetime').datetimepicker({
pickDate: true,
pickTime: true
});
//--></script>
<script type="text/javascript"><!--
$('input[name=\'blog\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=extension/module/lightshop/lightshop_blog/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['blog_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'blog\']').val(item['label']);
$('input[name=\'blog_id\']').val(item['value']);
}
});
//--></script></div>
{{ footer }}
@@ -1,170 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right"><a href="{{ add }}" data-toggle="tooltip" title="{{ button_add }}" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<button type="button" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger" onclick="confirm('{{ text_confirm }}') ? $('#form-review').submit() : false;"><i class="fa fa-trash-o"></i></button>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> {{ text_list }}</h3>
</div>
<div class="panel-body">
<div class="well">
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label class="control-label" for="input-blog">{{ entry_blog }}</label>
<input type="text" name="filter_blog" value="{{ filter_blog }}" placeholder="{{ entry_blog }}" id="input-blog" class="form-control" />
</div>
<div class="form-group">
<label class="control-label" for="input-author">{{ entry_author }}</label>
<input type="text" name="filter_author" value="{{ filter_author }}" placeholder="{{ entry_author }}" id="input-author" class="form-control" />
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label class="control-label" for="input-status">{{ entry_status }}</label>
<select name="filter_status" id="input-status" class="form-control">
<option value="*"></option>
{% if (filter_status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
{% endif %}
{% if (not filter_status and (filter_status) is not null) %}
<option value="0" selected="selected">{{ text_disabled }}</option>
{% else %}
<option value="0">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
<div class="form-group">
<label class="control-label" for="input-date-added">{{ entry_date_added }}</label>
<div class="input-group date">
<input type="text" name="filter_date_added" value="{{ filter_date_added }}" placeholder="{{ entry_date_added }}" data-date-format="YYYY-MM-DD" id="input-date-added" class="form-control" />
<span class="input-group-btn">
<button type="button" class="btn btn-default"><i class="fa fa-calendar"></i></button>
</span></div>
</div>
<button type="button" id="button-filter" class="btn btn-primary pull-right"><i class="fa fa-filter"></i> {{ button_filter }}</button>
</div>
</div>
</div>
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form-review">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left">{% if (sort == 'pd.name') %}
<a href="{{ sort_blog }}" class="{{ (order)|lower }}">{{ column_blog }}</a>
{% else %}
<a href="{{ sort_blog }}">{{ column_blog }}</a>
{% endif %}</td>
<td class="text-left">{% if (sort == 'r.author') %}
<a href="{{ sort_author }}" class="{{ (order)|lower }}">{{ column_author }}</a>
{% else %}
<a href="{{ sort_author }}">{{ column_author }}</a>
{% endif %}</td>
<td class="text-left">{% if (sort == 'r.status') %}
<a href="{{ sort_status }}" class="{{ (order)|lower }}">{{ column_status }}</a>
{% else %}
<a href="{{ sort_status }}">{{ column_status }}</a>
{% endif %}</td>
<td class="text-left">{% if (sort == 'r.date_added') %}
<a href="{{ sort_date_added }}" class="{{ (order)|lower }}">{{ column_date_added }}</a>
{% else %}
<a href="{{ sort_date_added }}">{{ column_date_added }}</a>
{% endif %}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if (reviews) %}
{% for review in reviews %}
<tr>
<td class="text-center">{% if (review['review_id'] in selected) %}
<input type="checkbox" name="selected[]" value="{{ review['review_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ review['review_id'] }}" />
{% endif %}</td>
<td class="text-left">{{ review['name'] }}</td>
<td class="text-left">{{ review['author'] }}</td>
<td class="text-left">{{ review['status'] }}</td>
<td class="text-left">{{ review['date_added'] }}</td>
<td class="text-right"><a href="{{ review['edit'] }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="7">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{{ results }}</div>
</div>
</div>
</div>
</div>
<script type="text/javascript"><!--
$('#button-filter').on('click', function() {
url = 'index.php?route=catalog/lightshopblog_review&token={{ token }}';
var filter_blog = $('input[name=\'filter_blog\']').val();
if (filter_blog) {
url += '&filter_blog=' + encodeURIComponent(filter_blog);
}
var filter_author = $('input[name=\'filter_author\']').val();
if (filter_author) {
url += '&filter_author=' + encodeURIComponent(filter_author);
}
var filter_status = $('select[name=\'filter_status\']').val();
if (filter_status != '*') {
url += '&filter_status=' + encodeURIComponent(filter_status);
}
var filter_date_added = $('input[name=\'filter_date_added\']').val();
if (filter_date_added) {
url += '&filter_date_added=' + encodeURIComponent(filter_date_added);
}
location = url;
});
//--></script>
<script type="text/javascript"><!--
$('.date').datetimepicker({
pickTime: false
});
//--></script></div>
{{ footer }}
@@ -1,299 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-category" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_form }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-category" class="form-horizontal">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab-general" data-toggle="tab">{{ tab_general }}</a></li>
<li><a href="#tab-data" data-toggle="tab">{{ tab_data }}</a></li>
<li><a href="#tab-seo" data-toggle="tab">{{ tab_seo }}</a></li>
<li><a href="#tab-design" data-toggle="tab">{{ tab_design }}</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab-general">
<ul class="nav nav-tabs" id="language">
{% for language in languages %}
<li><a href="#language{{ language['language_id'] }}" data-toggle="tab"><img src="language/{{ language['code'] }}/{{ language['code'] }}.png" title="{{ language['name'] }}" /> {{ language['name'] }}</a></li>
{% endfor %}
</ul>
<div class="tab-content">
{% for language in languages %}
<div class="tab-pane" id="language{{ language['language_id'] }}">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-name{{ language['language_id'] }}">{{ entry_name }}</label>
<div class="col-sm-10">
<input type="text" name="lightshopcatblog_description[{{ language['language_id'] }}][name]" value="{{ lightshopcatblog_description[language['language_id']] is defined ? lightshopcatblog_description[language['language_id']]['name'] : '' }}" placeholder="{{ entry_name }}" id="input-name{{ language['language_id'] }}" class="form-control" />
{% if (error_name[language['language_id']] is defined) %}
<div class="text-danger">{{ error_name[language['language_id']] }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-description{{ language['language_id'] }}">{{ entry_description }}</label>
<div class="col-sm-10">
<textarea name="lightshopcatblog_description[{{ language['language_id'] }}][description]" placeholder="{{ entry_description }}" id="input-description{{ language['language_id'] }}" data-lang="{{ lang }}" class="form-control" data-toggle="summernote" data-lang="{{ summernote }}">{{ lightshopcatblog_description[language['language_id']] is defined ? lightshopcatblog_description[language['language_id']]['description'] : '' }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-title{{ language['language_id'] }}">{{ entry_meta_title }}</label>
<div class="col-sm-10">
<input type="text" name="lightshopcatblog_description[{{ language['language_id'] }}][meta_title]" value="{{ lightshopcatblog_description[language['language_id']] is defined ? lightshopcatblog_description[language['language_id']]['meta_title'] : '' }}" placeholder="{{ entry_meta_title }}" id="input-meta-title{{ language['language_id'] }}" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-h1{{ language['language_id'] }}">{{ entry_meta_h1 }}</label>
<div class="col-sm-10">
<input type="text" name="lightshopcatblog_description[{{ language['language_id'] }}][meta_h1]" value="{{ lightshopcatblog_description[language['language_id']] is defined ? lightshopcatblog_description[language['language_id']]['meta_h1'] : '' }}" placeholder="{{ entry_meta_h1 }}" id="input-meta-h1{{ language['language_id'] }}" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-description{{ language['language_id'] }}">{{ entry_meta_description }}</label>
<div class="col-sm-10">
<textarea name="lightshopcatblog_description[{{ language['language_id'] }}][meta_description]" rows="5" placeholder="{{ entry_meta_description }}" id="input-meta-description{{ language['language_id'] }}" class="form-control">{{ lightshopcatblog_description[language['language_id']] is defined ? lightshopcatblog_description[language['language_id']]['meta_description'] : '' }}</textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-meta-keyword{{ language['language_id'] }}">{{ entry_meta_keyword }}</label>
<div class="col-sm-10">
<textarea name="lightshopcatblog_description[{{ language['language_id'] }}][meta_keyword]" rows="5" placeholder="{{ entry_meta_keyword }}" id="input-meta-keyword{{ language['language_id'] }}" class="form-control">{{ lightshopcatblog_description[language['language_id']] is defined ? lightshopcatblog_description[language['language_id']]['meta_keyword'] : '' }}</textarea>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="tab-pane" id="tab-data">
<div class="form-group">
<label class="col-sm-2 control-label">{{ entry_store }}</label>
<div class="col-sm-10">
<div class="well well-sm" style="height: 150px; overflow: auto;">
{% for store in stores %}
<div class="checkbox">
<label> {% if store.store_id in lightshopcatblog_store %}
<input type="checkbox" name="lightshopcatblog_store[]" value="{{ store.store_id }}" checked="checked" />
{{ store.name }}
{% else %}
<input type="checkbox" name="lightshopcatblog_store[]" value="{{ store.store_id }}" />
{{ store.name }}
{% endif %}</label>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="form-group" style="display: none;">
<label class="col-sm-2 control-label" for="input-parent">{{ entry_parent }}</label>
<div class="col-sm-10">
<select name="parent_id" class="form-control">
<option value="0" selected="selected">{{ text_none }}</option>
{% for category in categoriesblog %}
{% if (category['lightshopcatblog_id'] == parent_id) %}
<option value="{{ category['lightshopcatblog_id'] }}" selected="selected">{{ category['name'] }}</option>
{% else %}
<option value="{{ category['lightshopcatblog_id'] }}">{{ category['name'] }}</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
<div class="form-group" style="display: none;">
<label class="col-sm-2 control-label">{{ entry_image }}</label>
<div class="col-sm-10"><a href="" id="thumb-image" data-toggle="image" class="img-thumbnail"><img src="{{ thumb }}" alt="" title="" data-placeholder="{{ placeholder }}" /></a>
<input type="hidden" name="image" value="{{ image }}" id="input-image" />
</div>
</div>
<div class="form-group" style="display: none;">
<label class="col-sm-2 control-label" for="input-top"><span data-toggle="tooltip" title="{{ help_top }}">{{ entry_top }}</span></label>
<div class="col-sm-10">
<div class="checkbox">
<label>
{% if (top) %}
<input type="checkbox" name="top" value="1" checked="checked" id="input-top" />
{% else %}
<input type="checkbox" name="top" value="1" id="input-top" />
{% endif %}
&nbsp; </label>
</div>
</div>
</div>
<div class="form-group" style="display: none;">
<label class="col-sm-2 control-label" for="input-column"><span data-toggle="tooltip" title="{{ help_column }}">{{ entry_column }}</span></label>
<div class="col-sm-10">
<input type="text" name="column" value="{{ column }}" placeholder="{{ entry_column }}" id="input-column" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-sort-order">{{ entry_sort_order }}</label>
<div class="col-sm-10">
<input type="text" name="sort_order" value="{{ sort_order }}" placeholder="{{ entry_sort_order }}" id="input-sort-order" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" id="input-status" class="form-control">
{% if (status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</div>
<div class="tab-pane" id="tab-seo">
<div class="alert alert-info"><i class="fa fa-info-circle"></i> {{ help_keyword }}</div>
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td class="text-left">{{ entry_store }}</td>
<td class="text-left">{{ entry_keyword }}</td>
</tr>
</thead>
<tbody>
{% for store in stores %}
<tr>
<td class="text-left">{{ store.name }}</td>
<td class="text-left">{% for language in languages %}
<div class="input-group"><span class="input-group-addon"><img src="language/{{ language.code }}/{{ language.code }}.png" title="{{ language.name }}" /></span>
<input type="text" name="category_seo_url[{{ store.store_id }}][{{ language.language_id }}]" value="{% if category_seo_url[store.store_id][language.language_id] %}{{ category_seo_url[store.store_id][language.language_id] }}{% endif %}" placeholder="{{ entry_keyword }}" class="form-control" />
</div>
{% if error_keyword[store.store_id][language.language_id] %}
<div class="text-danger">{{ error_keyword[store.store_id][language.language_id] }}</div>
{% endif %}
{% endfor %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="tab-pane" id="tab-design">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td class="text-left">{{ entry_store }}</td>
<td class="text-left">{{ entry_layout }}</td>
</tr>
</thead>
<tbody>
{% for store in stores %}
<tr>
<td class="text-left">{{ store.name }}</td>
<td class="text-left"><select name="category_layout[{{ store.store_id }}]" class="form-control">
<option value=""></option>
{% for layout in layouts %}
{% if category_layout[store.store_id] and category_layout[store.store_id] == layout.layout_id %}
<option value="{{ layout.layout_id }}" selected="selected">{{ layout.name }}</option>
{% else %}
<option value="{{ layout.layout_id }}">{{ layout.name }}</option>
{% endif %}
{% endfor %}
</select></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript"><!--
{% if (ckeditor) %}
{% for language in languages %}
ckeditorInit('input-description{{ language['language_id'] }}', getURLVar('user_token'));
{% endfor %}
{% endif %}
//--></script>
<script type="text/javascript"><!--
$('input[name=\'path\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/category/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
json.unshift({
category_id: 0,
name: '{{ text_none }}'
});
response($.map(json, function(item) {
return {
label: item['name'],
value: item['category_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'path\']').val(item['label']);
$('input[name=\'parent_id\']').val(item['value']);
}
});
//--></script>
<script type="text/javascript"><!--
$('input[name=\'filter\']').autocomplete({
'source': function(request, response) {
$.ajax({
url: 'index.php?route=catalog/filter/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
dataType: 'json',
success: function(json) {
response($.map(json, function(item) {
return {
label: item['name'],
value: item['filter_id']
}
}));
}
});
},
'select': function(item) {
$('input[name=\'filter\']').val('');
$('#category-filter' + item['value']).remove();
$('#category-filter').append('<div id="category-filter' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="category_filter[]" value="' + item['value'] + '" /></div>');
}
});
$('#category-filter').delegate('.fa-minus-circle', 'click', function() {
$(this).parent().remove();
});
//--></script>
<script type="text/javascript"><!--
$('#language a:first').tab('show');
//--></script></div>
{{ footer }}
@@ -1,87 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<a href="{{ add }}" data-toggle="tooltip" title="{{ button_add }}" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<button type="button" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger" onclick="confirm('{{ text_confirm }}') ? $('#form-category').submit() : false;"><i class="fa fa-trash-o"></i></button>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-list"></i> {{ text_list }}</h3>
</div>
<div class="panel-body">
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form-category">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
<td class="text-left">{% if (sort == 'name') %}
<a href="{{ sort_name }}" class="{{ (order)|lower }}">{{ column_name }}</a>
{% else %}
<a href="{{ sort_name }}">{{ column_name }}</a>
{% endif %}</td>
<td class="text-right">{% if (sort == 'sort_order') %}
<a href="{{ sort_sort_order }}" class="{{ (order)|lower }}">{{ column_sort_order }}</a>
{% else %}
<a href="{{ sort_sort_order }}">{{ column_sort_order }}</a>
{% endif %}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if (categories) %}
{% for category in categories %}
<tr>
<td class="text-center">{% if category['lightshopcatblog_id'] in selected %}
<input type="checkbox" name="selected[]" value="{{ category['lightshopcatblog_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ category['lightshopcatblog_id'] }}" />
{% endif %}</td>
{% if (category['href']) %}
<td class="left">{{ category['indent'] }}<a href="{{ category['href'] }}">{{ category['name'] }}</a>&nbsp;&nbsp;<i class="fa fa-sort-desc"></i></td>
{% else %}
<td class="left">{{ category['indent'] }}{{ category['name'] }}</td>
{% endif %}
<td class="text-right">{{ category['sort_order'] }}</td>
<td class="text-right"><a href="{{ category['edit'] }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="4">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
<div class="col-sm-6 text-right">{{ results }}</div>
</div>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,57 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<a onclick="$('#form').submit();" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></a>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-envelope-o"></i> {{ heading_title }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form" class="form-horizontal">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-entry-email">{{ entry_email }}</label>
<div class="col-sm-10">
<input type="text" name="email" value="{{ email }}" placeholder="{{ entry_email }}" id="input-entry-email" class="form-control" />
{% if (error_email) %}
<div class="text-danger">{{ error_email }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" id="input-status" class="form-control">
{% if (status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,97 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<a href="{{ send }}" data-toggle="tooltip" title="{{ button_subscribe }}" class="btn btn-success"><i class="fa fa-paper-plane"></i></a>
<a href="{{ email }}" data-toggle="tooltip" title="{{ button_email }}" class="btn btn-primary"><i class="fa fa-envelope-o"></i></a>
<a href="{{ insert }}" data-toggle="tooltip" title="Добавить email" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<a onclick="$('form').submit();" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger"><i class="fa fa-trash-o"></i></a>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
{% if (module_install) %}
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
{% if (success) %}
<div class="alert alert-success"><i class="fa fa-check-circle"></i> {{ success }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-envelope-o"></i> {{ heading_title }}</h3>
</div>
<div class="panel-body">
<form action="{{ delete }}" method="post" enctype="multipart/form-data" id="form">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<td width="1" style="text-align: center;"><input type="checkbox" onclick="$('input[name*=\'selected\']').attr('checked', this.checked);" /></td>
<td class="text-left">{% if (sort == 'email') %}
<a href="{{ sort_email }}" class="{{ (order)|lower }}">{{ column_email }}</a>
{% else %}
<a href="{{ sort_email }}">{{ column_email }}</a>
{% endif %}</td>
<td class="text-left">{% if (sort == 'status') %}
<a href="{{ sort_status }}" class="{{ (order)|lower }}">{{ column_status }}</a>
{% else %}
<a href="{{ sort_status }}">{{ column_status }}</a>
{% endif %}</td>
<td class="text-right">{{ column_action }}</td>
</tr>
</thead>
<tbody>
{% if (subscribers) %}
{% for subscribe in subscribers %}
<tr>
<td style="text-align: center;">{% if (subscribe['selected']) %}
<input type="checkbox" name="selected[]" value="{{ subscribe['subscribe_id'] }}" checked="checked" />
{% else %}
<input type="checkbox" name="selected[]" value="{{ subscribe['subscribe_id'] }}" />
{% endif %}</td>
<td class="text-left">{{ subscribe['email'] }}</td>
<td class="text-left">{{ subscribe['status'] }}</td>
<td class="text-right">{% for action in subscribe['action'] %}
<a href="{{ action['href'] }}" data-toggle="tooltip" title="{{ action['text'] }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a>
{% endfor %}</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td class="text-center" colspan="4">{{ text_no_results }}</td>
</tr>
{% endif %}
</tbody>
</table>
</form>
<div class="row">
<div class="col-sm-6 text-left">{{ pagination }}</div>
</div>
</div>
</div>
</div>
{% else %}
<div class="container-fluid">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-envelope-o"></i> {{ heading_title }}</h3>
</div>
<div class="panel-body">
{{ text_module_not_exists }}
</div>
</div>
</div>
{% endif %}
</div>
{{ footer }}
@@ -1,61 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<a onclick="$('#form').submit();" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></a>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a>
</div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-envelope-o"></i> {{ heading_title }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form" class="form-horizontal">
<ul class="nav nav-tabs" id="language">
{% for language in languages %}
<li><a href="#language{{ language['language_id'] }}" data-toggle="tab"><img src="language/{{ language['code'] }}/{{ language['code'] }}.png" title="{{ language['name'] }}" /> {{ language['name'] }}</a></li>
{% endfor %}
</ul>
<div class="tab-content">
{% for language in languages %}
<div class="tab-pane" id="language{{ language['language_id'] }}">
<div class="form-group">
<label class="col-sm-2 control-label" for="input-description{{ language['language_id'] }}">{{ entry_text_mail }}</label>
<div class="col-sm-10">
<textarea name="subscribe_descriptions[{{ language['language_id'] }}]" placeholder="{{ entry_text_mail }}" id="subscribe-description{{ language['language_id'] }}" data-lang="{{ lang }}" class="form-control" data-toggle="summernote" data-lang="{{ summernote }}">{{ subscribe_descriptions[language['language_id']] is defined ? subscribe_descriptions[language['language_id']] : '' }}</textarea>
</div>
</div>
</div>
{% endfor %}
</div>
</form>
</div>
</div>
</div>
</div>
<script type="text/javascript"><!--
{% if (ckeditor) %}
{% for language in languages %}
ckeditorInit('input-description{{ language['language_id'] }}', getURLVar('token'));
{% endfor %}
{% endif %}
//--></script>
<script type="text/javascript"><!--
$('#language a:first').tab('show');
//--></script>
{{ footer }}
File diff suppressed because it is too large Load Diff
@@ -1,111 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_edit }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" id="form-theme-lightshop" class="form-horizontal">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab-info" data-toggle="tab">О шаблоне</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab-info">
<div class="col-sm-8 col-sm-offset-2">
<div class="about-info thumbnail">
<div class="lightshop-logo"><img src="view/image/lightshop/lightshop-logo.png" alt="lightshop"></div>
<div class="form-group">
<label class="col-sm-4 control-label" for="input-theme_lightshop_label_sale_d">Версия</label>
<div class="col-sm-8 inline-text">
{{ theme_lightshop_version }}
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label" for="input-license-key">Введите лицензионный ключ</label>
<div class="col-sm-8">
<div class="input-group">
<input type="text" id="key" name="license_key" value="" placeholder="Введите лицензионный ключ" id="license-key" class="form-control" />
<div class="input-group-btn">
<button id="sendkey" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label" for="input-theme_lightshop_label_sale_d">Техническая поддержка</label>
<div class="col-sm-8 inline-text">
<a href="mailto:support@899themes.ru">Отправить запрос в службу поддержки (support@899themes.ru)</a>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label" for="input-theme_lightshop_label_sale_d">Разработчик</label>
<div class="col-sm-8 inline-text">
<a href="http://899themes.ru/" target="_blank">899themes.ru</a>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label" for="input-theme_lightshop_label_sale_d">Лицензионное соглашение</label>
<div class="col-sm-8 inline-text">
<textarea class="license-agreement" readonly>{{ text_license }}</textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<script type="text/javascript"><!--
$(document).ready(function() {
$('#sendkey').on('click', function(e) {
e.preventDefault();
var data = $('#key').val();
$.ajax({
url: 'index.php?route=extension/theme/lightshop/activatekey&user_token={{ user_token }}&newkey=1',
type: 'post',
dataType: 'json',
data: 'license_key=' + $('#key').val(),
success: function (data) {
if (data.error) { console.log(data.error);
alert(data.error);
}
if (data.success) {
alert(data.success);
location.reload();
}
}
});
});
});
//--></script>
{{ footer }}
@@ -1,53 +0,0 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-lightshopsets" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if (error_warning) %}
<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-pencil"></i> {{ text_edit }}</h3>
</div>
<div class="panel-body">
<form action="{{ action }}" method="post" enctype="multipart/form-data" class="form-horizontal" id="form-lightshopsets">
<div class="form-group">
<label class="col-sm-2 control-label" for="input-status">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="total_lightshopsets_status" id="input-status" class="form-control">
{% if (total_lightshopsets_status) %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-sort-order">{{ entry_sort_order }}</label>
<div class="col-sm-10">
<input type="text" name="total_lightshopsets_sort_order" value="{{ total_lightshopsets_sort_order }}" placeholder="{{ entry_sort_order }}" id="input-sort-order" class="form-control" />
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{{ footer }}
@@ -1,73 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Блог';
$_['heading_title_cloud'] = 'Теги';
$_['heading_title_cat'] = 'Категории';
// Error
$_['error_name'] = 'Имя должно быть от 3 до 25 символов!';
$_['error_text'] = 'Текст отзыва должен быть от 25 до 1000 символов!';
$_['error_rating'] = 'Пожалуйста поставьте оценку!';
$_['error_logged'] = 'Запрещено оставлять комментарии незарегистрированным пользователям';
$_['text_error'] = 'Статья блога не найдера';
// Text
$_['text_related'] = 'Рекомендуем';
$_['text_related_products'] = 'Рекомендуем';
$_['text_success'] = 'Спасибо за ваш комментарий. Он был направлен на модерацию.';
$_['text_share'] = 'Поделиться';
$_['text_comments'] = 'Комментариев';
$_['text_first_comment'] = 'Ваш комментарий будет первым';
$_['text_comment_add'] = 'Отправить';
$_['text_comment_name'] = 'Имя';
$_['text_comment_text'] = 'Ваш комментарий';
$_['text_am'] = 'дп';
$_['text_pm'] = 'пп';
$_['text_AM'] = 'ДП';
$_['text_PM'] = 'ПП';
$_['text_Monday'] = 'Понедельник';
$_['text_Mon'] = 'Пн';
$_['text_Tuesday'] = 'Вторник';
$_['text_Tue'] = 'Вт';
$_['text_Wednesday'] = 'Среда';
$_['text_Wed'] = 'Ср';
$_['text_Thursday'] = 'Четверг';
$_['text_Thu'] = 'Чт';
$_['text_Friday'] = 'Пятница';
$_['text_Fri'] = 'Пт';
$_['text_Saturday'] = 'Суббота';
$_['text_Sat'] = 'Сб';
$_['text_Sunday'] = 'Воскресенье';
$_['text_Sun'] = 'Вс';
$_['text_January'] = 'Января';
$_['text_Jan'] = 'Янв';
$_['text_February'] = 'Февраля';
$_['text_Feb'] = 'Фев';
$_['text_March'] = 'Марта';
$_['text_Mar'] = 'Мар';
$_['text_April'] = 'Апреля';
$_['text_Apr'] = 'Апр';
$_['text_May'] = 'Мая';
$_['text_June'] = 'Июня';
$_['text_Jun'] = 'Июн';
$_['text_July'] = 'Июля';
$_['text_Jul'] = 'Июл';
$_['text_August'] = 'Августа';
$_['text_Aug'] = 'Авг';
$_['text_September'] = 'Сентября';
$_['text_Sep'] = 'Сен';
$_['text_October'] = 'Октября';
$_['text_Oct'] = 'Окт';
$_['text_November'] = 'Ноября';
$_['text_Nov'] = 'Ноя';
$_['text_December'] = 'Декабря';
$_['text_Dec'] = 'Дек';
$_['text_st'] = 'ое';
$_['text_nd'] = 'ое';
$_['text_rd'] = 'е';
$_['text_th'] = 'ое';
@@ -1,56 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Модуль Блога';
$_['heading_title_cloud'] = 'Теги';
$_['heading_title_cat'] = 'Категории';
$_['text_all_blogs'] = 'Весь блог';
// Text
$_['text_all_news'] = 'Все новости';
$_['text_am'] = 'дп';
$_['text_pm'] = 'пп';
$_['text_AM'] = 'ДП';
$_['text_PM'] = 'ПП';
$_['text_Monday'] = 'Понедельник';
$_['text_Mon'] = 'Пн';
$_['text_Tuesday'] = 'Вторник';
$_['text_Tue'] = 'Вт';
$_['text_Wednesday'] = 'Среда';
$_['text_Wed'] = 'Ср';
$_['text_Thursday'] = 'Четверг';
$_['text_Thu'] = 'Чт';
$_['text_Friday'] = 'Пятница';
$_['text_Fri'] = 'Пт';
$_['text_Saturday'] = 'Суббота';
$_['text_Sat'] = 'Сб';
$_['text_Sunday'] = 'Воскресенье';
$_['text_Sun'] = 'Вс';
$_['text_January'] = 'Января';
$_['text_Jan'] = 'Янв';
$_['text_February'] = 'Февраля';
$_['text_Feb'] = 'Фев';
$_['text_March'] = 'Марта';
$_['text_Mar'] = 'Мар';
$_['text_April'] = 'Апреля';
$_['text_Apr'] = 'Апр';
$_['text_May'] = 'Мая';
$_['text_June'] = 'Июня';
$_['text_Jun'] = 'Июн';
$_['text_July'] = 'Июля';
$_['text_Jul'] = 'Июл';
$_['text_August'] = 'Августа';
$_['text_Aug'] = 'Авг';
$_['text_September'] = 'Сентября';
$_['text_Sep'] = 'Сен';
$_['text_October'] = 'Октября';
$_['text_Oct'] = 'Окт';
$_['text_November'] = 'Ноября';
$_['text_Nov'] = 'Ноя';
$_['text_December'] = 'Декабря';
$_['text_Dec'] = 'Дек';
$_['text_st'] = 'ое';
$_['text_nd'] = 'ое';
$_['text_rd'] = 'е';
$_['text_th'] = 'ое';
$_['text_related'] = 'Рекомендуем';
$_['text_related_products'] = 'Рекомендуем';
@@ -1,52 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Новости';
// Text
$_['text_all_news'] = 'Все новости';
$_['text_am'] = 'дп';
$_['text_pm'] = 'пп';
$_['text_AM'] = 'ДП';
$_['text_PM'] = 'ПП';
$_['text_Monday'] = 'Понедельник';
$_['text_Mon'] = 'Пн';
$_['text_Tuesday'] = 'Вторник';
$_['text_Tue'] = 'Вт';
$_['text_Wednesday'] = 'Среда';
$_['text_Wed'] = 'Ср';
$_['text_Thursday'] = 'Четверг';
$_['text_Thu'] = 'Чт';
$_['text_Friday'] = 'Пятница';
$_['text_Fri'] = 'Пт';
$_['text_Saturday'] = 'Суббота';
$_['text_Sat'] = 'Сб';
$_['text_Sunday'] = 'Воскресенье';
$_['text_Sun'] = 'Вс';
$_['text_January'] = 'Января';
$_['text_Jan'] = 'Янв';
$_['text_February'] = 'Февраля';
$_['text_Feb'] = 'Фев';
$_['text_March'] = 'Марта';
$_['text_Mar'] = 'Мар';
$_['text_April'] = 'Апреля';
$_['text_Apr'] = 'Апр';
$_['text_May'] = 'Мая';
$_['text_June'] = 'Июня';
$_['text_Jun'] = 'Июн';
$_['text_July'] = 'Июля';
$_['text_Jul'] = 'Июл';
$_['text_August'] = 'Августа';
$_['text_Aug'] = 'Авг';
$_['text_September'] = 'Сентября';
$_['text_Sep'] = 'Сен';
$_['text_October'] = 'Октября';
$_['text_Oct'] = 'Окт';
$_['text_November'] = 'Ноября';
$_['text_Nov'] = 'Ноя';
$_['text_December'] = 'Декабря';
$_['text_Dec'] = 'Дек';
$_['text_st'] = 'ое';
$_['text_nd'] = 'ое';
$_['text_rd'] = 'е';
$_['text_th'] = 'ое';
$_['text_related'] = 'Связанные товары';
@@ -1,8 +0,0 @@
<?php
// Text
$_['text_sale'] = 'Скидка';
$_['text_quantity'] = 'шт.';
$_['text_chng_btn'] = 'Заменить товар';
$_['text_item_add'] = 'Выбрать товар';
$_['text_popup_package_title'] = 'Выберите товар для замены';
$_['text_set_added'] = 'Набор добавлен в корзину';
@@ -1,101 +0,0 @@
<?php
// lightshop
$_['text_404'] = 'Вы можете <a href="%s">связаться с нами</a>, воспользоваться <a href="%s">поиском по сайту</a> или просто перейти на <a href="%s">главную страницу</a>.';
$_['text_error'] = 'Страница не найдена';
$_['text_register_account'] = 'Создание учетной записи поможет делать следующие покупки быстрее (не надо будет снова вводить адрес и контактную информацию), видеть состояние заказа, а также видеть заказы, сделанные ранее. Вы также сможете накапливать при покупках призовые баллы (на них тоже можно что-то купить), а постоянным покупателям мы предлагаем систему скидок.';
$_['text_forgotten'] = 'Забыли пароль?';
$_['text_ls_logged'] = '%s %s';
$_['outdated_browser'] = 'Вы используете устаревший браузер. Пожалуйста, <a class="browserupgrade__link" href="http://outdatedbrowser.com/ru" target="_blank">обновите ваш браузер</a>, чтобы использовать все возможности сайта.';
$_['text_islogged'] = 'Необходимо войти в <a href="%s">Личный кабинет</a> или <a href="%s">создать учетную запись</a>, чтобы добавлять товары в свои <a href="%s">избранные</a>!';
$_['text_empty_wish'] = 'У вас в избранном ничего нет.';
$_['text_empty_compare'] = 'Вы пока не добавили товары для сравнения.';
$_['text_compare_href'] = '<a href="%s">Сравнить товары</a>';
$_['text_wish_href'] = '<a href="%s">Показать избранные</a>';
$_['text_instock'] = 'На складе';
$_['text_lighshop_name'] = 'Ваше имя:';
$_['text_lighshop_phone'] = 'Ваш телефон:';
$_['text_lighshop_comment'] = 'Комментарий:';
$_['button_lighshop_sendorder'] = 'Отправить заказ';
$_['text_lightshop_show_all'] = 'Показать все';
$_['text_header_category'] = 'Категории';
$_['text_header_callback'] = 'Обратный звонок';
$_['text_account_title'] = 'Авторизация';
$_['text_account_login'] = 'Вход';
$_['text_account_register'] = 'Регистрация';
$_['text_account_check'] = 'Запомнить';
$_['text_account_submit'] = 'Войти';
$_['text_account_password'] = 'Пароль';
$_['text_footer_subscribe_email'] = 'Эл. почта';
$_['text_social_navs'] = 'Мы в сети';
$_['text_lightshop_news'] = 'Новости';
$_['text_lightshop_blogs'] = 'Блог';
$_['text_custcart'] = 'Корзина';
$_['text_lightshop_subscribe_btn'] = 'Подписаться';
$_['text_loader'] = 'Загрузка...';
$_['text_lightshop_points'] = 'Цена в баллах:';
$_['text_product_view_btn'] = 'Быстрый просмотр';
$_['text_prev2'] = 'Предыдущий товар';
$_['text_next2'] = 'Следующий товар';
$_['text_show_more'] = 'Показать все';
$_['text_lightshop_cart_title'] = 'Корзина';
$_['text_lightshop_cart_quantity'] = 'шт.';
$_['text_lightshop_fast_order'] = 'Быстрый заказ';
$_['text_lightshop_order'] = 'Оформление заказа';
$_['text_lightshop_buy_click'] = 'Записаться на примерку';
$_['text_lightshop_wish_head'] = 'Избранное';
$_['text_lightshop_comp_head'] = 'Сравнение';
$_['text_lightshop_ship'] = 'Способ доставки';
$_['text_lightshop_pay'] = 'Способ оплаты';
$_['text_lightshop_checkout_s1'] = 'Способ оформления заказа';
$_['text_lightshop_checkout_s2'] = 'Покупатель';
$_['text_lightshop_checkout_s3'] = 'Адрес доставки';
$_['text_lightshop_checkout_s4'] = 'Доставка и оплата';
$_['text_lightshop_edit_cart'] = 'Изменить';
$_['text_lightshop_filter'] = 'Фильтр';
$_['text_lightshop_menu'] = 'Меню';
$_['text_lightshop_information'] = 'Информация';
$_['text_lightshop_filter_price'] = 'Цена';
$_['text_lightshop_coupon'] = 'Купон';
$_['text_lightshop_shipping'] = 'Стоимость доставки';
$_['text_lightshop_reward'] = 'Бонусные баллы';
$_['text_lightshop_voucher'] = 'Сертификат';
$_['text_lightshop_support'] = 'Поддержка покупателей';
$_['text_lightshop_con_soc'] = 'А также мы в сети';
$_['text_lightshop_popup_link'] = 'Открыть страницу товара';
$_['text_lightshop_popup_link_more'] = 'Подробное описание на странице товара';
$_['text_lightshop_popup_upload'] = 'Загрузить файл';
$_['text_manufacturers'] = 'Производители';
$_['text_lightshop_products_text_more'] = 'Подробное описание';
$_['text_lightshop_products_review'] = 'Оставить отзыв';
$_['text_lightshop_pdata'] = 'Нажимая на кнопку «%s», Вы даете <a href="%s" class="agree" title="%s">согласие на обработку персональных данных.</a>';
$_['text_lightshop_pdata_checkbox'] = 'Я согласен на <a href="%s" class="agree" title="%s">обработку персональных данных.</a>';
$_['error_firstname'] = '%s должно быть от 1 до 64 символов!';
$_['error_lastname'] = '%s должно быть от 1 до 64 символов!';
$_['error_email'] = '%s введён неверно!';
$_['error_fax'] = '%s должно быть от 1 до 32 символов!';
$_['error_telephone'] = '%s должен быть от 3 до 32 символов!';
$_['error_company'] = '%s должен быть от 3 до 32 символов!';
$_['error_password'] = 'Пароль должен быть от 3 до 20 символов!';
$_['error_confirm'] = 'Пароли не совпадают!';
$_['error_address_1'] = '%s должен быть от 3 до 128 символов!';
$_['error_city'] = '%s должно быть от 2 до 128 символов!';
$_['error_postcode'] = '%s должен быть от 2 до 10 символов!';
$_['error_country'] = 'Пожалуйста, выберите %s!';
$_['error_zone'] = 'Пожалуйста, выберите %s';
$_['text_lightshop_error_pdata'] = 'Вы должны согласиться с условиями';
$_['text_lightshop_show'] = 'Показать';
$_['text_lightshop_reset'] = 'Сбросить';
$_['text_lightshop_products'] = 'Выбрано';
$_['text_lightshop_from'] = 'от';
$_['text_lightshop_to'] = 'до';
$_['text_lightshop_cookieagry_btn'] = '%s';
@@ -1,2 +0,0 @@
<?php
$_['text_lightshopsets'] = 'Скидка на набор';
@@ -1,70 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Блог';
$_['heading_title_cloud'] = 'Теги';
$_['heading_title_cat'] = 'Категорії';
// Error
$_['error_name'] = 'Ім я повинно бути від 3 до 25 символів!';
$_['error_text'] = 'Текст відгуку повинен бути від 25 до 1000 символів!';
$_['error_rating'] = 'Будь ласка поставте оцінку!';
$_['error_logged'] = 'Заборонено залишати коментарі незареєстрованим користувачам';
$_['text_error'] = 'Стаття блоґу не найдера';
// Text
$_['text_related'] = 'Рекомендуємо';
$_['text_related_products'] = 'Рекомендуємо';
$_['text_success'] = 'Дякую за Ваш коментар. Він був спрямований на модерацію.';
$_['text_share'] = 'Поділитися';
$_['text_comments'] = 'Коментарів';
$_['text_first_comment'] = 'Ваш коментар буде першим';
$_['text_comment_add'] = 'Відправити';
$_['text_comment_name'] = 'Имя';
$_['text_comment_text'] = 'Ваш коментар';
$_['text_am'] = 'дп';
$_['text_pm'] = 'пп';
$_['text_AM'] = 'ДП';
$_['text_PM'] = 'ПП';
$_['text_Monday'] = 'Понеділок';
$_['text_Mon'] = 'Пн';
$_['text_Tuesday'] = 'Вівторок';
$_['text_Tue'] = 'Вт';
$_['text_Wednesday'] = 'Середа';
$_['text_Wed'] = 'Ср';
$_['text_Thursday'] = 'Четвер';
$_['text_Thu'] = 'Чт';
$_['text_Friday'] = 'П’ятниця';
$_['text_Fri'] = 'Пт';
$_['text_Saturday'] = 'Субота';
$_['text_Sat'] = 'Сб';
$_['text_Sunday'] = 'Неділя';
$_['text_Sun'] = 'Нд';
$_['text_January'] = 'Січня';
$_['text_Jan'] = 'Січ';
$_['text_February'] = 'Лютого';
$_['text_Feb'] = 'Лют';
$_['text_March'] = 'Березня';
$_['text_Mar'] = 'Бер';
$_['text_April'] = 'Квітня';
$_['text_Apr'] = 'Кві';
$_['text_May'] = 'Травня';
$_['text_June'] = 'Червня';
$_['text_Jun'] = 'Чер';
$_['text_July'] = 'Липня';
$_['text_Jul'] = 'Лип';
$_['text_August'] = 'Серпня';
$_['text_Aug'] = 'Срп';
$_['text_September'] = 'Вересня';
$_['text_Sep'] = 'Вер';
$_['text_October'] = 'Жовтня';
$_['text_Oct'] = 'Жов';
$_['text_November'] = 'Листопада';
$_['text_Nov'] = 'Лис';
$_['text_December'] = 'Грудня';
$_['text_Dec'] = 'Грд';
$_['text_st'] = 'ое';
$_['text_nd'] = 'ое';
$_['text_rd'] = 'е';
$_['text_th'] = 'ое';
@@ -1,57 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Модуль Блогу';
$_['heading_title_cloud'] = 'Теги';
$_['heading_title_cat'] = 'Категорії';
$_['text_all_blogs'] = 'Весь блог';
// Text
$_['text_all_news'] = 'Усі новіни';
$_['text_am'] = 'дп';
$_['text_pm'] = 'пп';
$_['text_AM'] = 'ДП';
$_['text_PM'] = 'ПП';
$_['text_Monday'] = 'Понеділок';
$_['text_Mon'] = 'Пн';
$_['text_Tuesday'] = 'Вівторок';
$_['text_Tue'] = 'Вт';
$_['text_Wednesday'] = 'Середа';
$_['text_Wed'] = 'Ср';
$_['text_Thursday'] = 'Четвер';
$_['text_Thu'] = 'Чт';
$_['text_Friday'] = 'П’ятниця';
$_['text_Fri'] = 'Пт';
$_['text_Saturday'] = 'Субота';
$_['text_Sat'] = 'Сб';
$_['text_Sunday'] = 'Неділя';
$_['text_Sun'] = 'Нд';
$_['text_January'] = 'Січня';
$_['text_Jan'] = 'Січ';
$_['text_February'] = 'Лютого';
$_['text_Feb'] = 'Лют';
$_['text_March'] = 'Березня';
$_['text_Mar'] = 'Бер';
$_['text_April'] = 'Квітня';
$_['text_Apr'] = 'Кві';
$_['text_May'] = 'Травня';
$_['text_June'] = 'Червня';
$_['text_Jun'] = 'Чер';
$_['text_July'] = 'Липня';
$_['text_Jul'] = 'Лип';
$_['text_August'] = 'Серпня';
$_['text_Aug'] = 'Срп';
$_['text_September'] = 'Вересня';
$_['text_Sep'] = 'Вер';
$_['text_October'] = 'Жовтня';
$_['text_Oct'] = 'Жов';
$_['text_November'] = 'Листопада';
$_['text_Nov'] = 'Лис';
$_['text_December'] = 'Грудня';
$_['text_Dec'] = 'Грд';
$_['text_st'] = 'ое';
$_['text_nd'] = 'ое';
$_['text_rd'] = 'е';
$_['text_th'] = 'ое';
$_['text_related'] = 'Рекомендуємо';
$_['text_related_products'] = 'Рекомендуємо';
@@ -1,52 +0,0 @@
<?php
// Heading
$_['heading_title'] = 'Новіни';
// Text
$_['text_all_news'] = 'Усі новіни';
$_['text_am'] = 'дп';
$_['text_pm'] = 'пп';
$_['text_AM'] = 'ДП';
$_['text_PM'] = 'ПП';
$_['text_Monday'] = 'Понеділок';
$_['text_Mon'] = 'Пн';
$_['text_Tuesday'] = 'Вівторок';
$_['text_Tue'] = 'Вт';
$_['text_Wednesday'] = 'Середа';
$_['text_Wed'] = 'Ср';
$_['text_Thursday'] = 'Четвер';
$_['text_Thu'] = 'Чт';
$_['text_Friday'] = 'П’ятниця';
$_['text_Fri'] = 'Пт';
$_['text_Saturday'] = 'Субота';
$_['text_Sat'] = 'Сб';
$_['text_Sunday'] = 'Неділя';
$_['text_Sun'] = 'Нд';
$_['text_January'] = 'Січня';
$_['text_Jan'] = 'Січ';
$_['text_February'] = 'Лютого';
$_['text_Feb'] = 'Лют';
$_['text_March'] = 'Березня';
$_['text_Mar'] = 'Бер';
$_['text_April'] = 'Квітня';
$_['text_Apr'] = 'Кві';
$_['text_May'] = 'Травня';
$_['text_June'] = 'Червня';
$_['text_Jun'] = 'Чер';
$_['text_July'] = 'Липня';
$_['text_Jul'] = 'Лип';
$_['text_August'] = 'Серпня';
$_['text_Aug'] = 'Срп';
$_['text_September'] = 'Вересня';
$_['text_Sep'] = 'Вер';
$_['text_October'] = 'Жовтня';
$_['text_Oct'] = 'Жов';
$_['text_November'] = 'Листопада';
$_['text_Nov'] = 'Лис';
$_['text_December'] = 'Грудня';
$_['text_Dec'] = 'Грд';
$_['text_st'] = 'ое';
$_['text_nd'] = 'ое';
$_['text_rd'] = 'е';
$_['text_th'] = 'ое';
$_['text_related'] = "Пов'язані товари";
@@ -1,7 +0,0 @@
<?php
// Text
$_['text_sale'] = 'Знижка';
$_['text_quantity'] = 'шт.';
$_['text_chng_btn'] = 'Замінити товар';
$_['text_item_add'] = 'Вибрати товар';
$_['text_popup_package_title'] = 'Виберіть товар для заміни';
@@ -1,99 +0,0 @@
<?php
// lightshop
$_['text_404'] = 'Ви можете <a href="%s">зв’язаться з нами</a>, скористатися <a href="%s">пошуком по сайту</a> обо просто перейти на <a href="%s">головну сторінку</a>.';
$_['text_register_account'] = 'Створення облікового запису дозволіть робити наступні покупки швидше (не треба буде знову вводити адрес та контактну інформацію), бачіти стан заказу, а також бачити закази, зроблені ранійше. Вы також зможете накопичувати при покупках призові бали (на них теж можна щось купити), а постійним покупцям ми пропонуємо систему знижок.';
$_['text_forgotten'] = 'Забули пароль?';
$_['text_ls_logged'] = '%s %s';
$_['outdated_browser'] = 'Ви використовуєте застарілий браузер. Будь ласка, <a class="browserupgrade__link" href="http://outdatedbrowser.com/ru" target="_blank">поновіть ваш браузер</a>, щоб користуватись усіма можливостями сайту.';
$_['text_islogged'] = 'Необхідно війти в <a href="%s">Особістий кабінет</a> або <a href="%s">створити обліковий запис </a>, щоб додати товар в <a href="%s">обране</a>!';
$_['text_empty_wish'] = 'У вас в обраному нічого нема.';
$_['text_empty_compare'] = 'Вы поки не додали товари для порівняння.';
$_['text_compare_href'] = '<a href="%s">Порівняти товари</a>';
$_['text_wish_href'] = '<a href="%s">Показати обране</a>';
$_['text_instock'] = 'На складі';
$_['text_lighshop_name'] = 'Ваше им’я:';
$_['text_lighshop_phone'] = 'Ваш телефон:';
$_['text_lighshop_comment'] = 'Коментар:';
$_['button_lighshop_sendorder'] = 'Відправити замовлення';
$_['text_lightshop_show_all'] = 'Показати все';
$_['text_header_category'] = 'Категорії';
$_['text_header_callback'] = 'Зворотній дзвінок';
$_['text_account_title'] = 'Авторізація';
$_['text_account_login'] = 'Вхід';
$_['text_account_register'] = 'Зареєструватися';
$_['text_account_check'] = 'Запам’ятати';
$_['text_account_submit'] = 'Війти';
$_['text_account_password'] = 'Пароль';
$_['text_footer_subscribe_email'] = 'E-Mail Адреса';
$_['text_social_navs'] = 'Мы в мережі';
$_['text_lightshop_news'] = 'Новіни';
$_['text_lightshop_blogs'] = 'Блог';
$_['text_custcart'] = 'Кошик покупок';
$_['text_lightshop_subscribe_btn'] = 'Підписатися';
$_['text_loader'] = 'Завантаження ...';
$_['text_lightshop_points'] = 'Ціна в балах:';
$_['text_product_view_btn'] = 'Швидкий перегляд';
$_['text_prev2'] = 'Попередній товар';
$_['text_next2'] = 'Наступний товар';
$_['text_show_more'] = 'Показати все';
$_['text_lightshop_cart_title'] = 'Кошик покупок';
$_['text_lightshop_cart_quantity'] = 'од.';
$_['text_lightshop_fast_order'] = 'Швидке замовлення';
$_['text_lightshop_buy_click'] = 'Придбати в один клік';
$_['text_lightshop_wish_head'] = 'Обране';
$_['text_lightshop_comp_head'] = 'Порівняння';
$_['text_lightshop_ship'] = 'Спосіб доставки';
$_['text_lightshop_pay'] = 'Спосіб оплати';
$_['text_lightshop_checkout_s1'] = 'Спосіб оформлення заказу';
$_['text_lightshop_checkout_s2'] = 'Покупець';
$_['text_lightshop_checkout_s3'] = 'Адреса доставки';
$_['text_lightshop_checkout_s4'] = 'Доставка та оплата';
$_['text_lightshop_edit_cart'] = 'Редагувати';
$_['text_lightshop_filter'] = 'Уточнення пошуку';
$_['text_lightshop_menu'] = 'Меню';
$_['text_lightshop_information'] = 'Інформація';
$_['text_lightshop_filter_price'] = 'Ціна';
$_['text_lightshop_coupon'] = 'Купон';
$_['text_lightshop_shipping'] = 'Вартість доставки';
$_['text_lightshop_reward'] = 'Бонусні бали';
$_['text_lightshop_voucher'] = 'Сертифікат';
$_['text_lightshop_support'] = 'Підтримка користувачів';
$_['text_lightshop_con_soc'] = 'А ткож ми у мережі';
$_['text_lightshop_popup_link'] = 'Відкрити страніцу товару';
$_['text_lightshop_popup_link_more'] = 'Детальний опис на сторінці товару';
$_['text_lightshop_popup_upload'] = 'Завантажити файл';
$_['text_manufacturers'] = 'Виробники';
$_['text_lightshop_products_text_more'] = 'Докладний опис';
$_['text_lightshop_products_review'] = 'Залишити відгук';
$_['text_lightshop_pdata'] = 'Натискаючи на кнопку «%s», Ви даєте <a href="%s" class="agree" title="%s"> згоду на обробку персональних даних </a>.';
$_['text_lightshop_pdata_checkbox'] = 'Я згоден на <a href="%s" class="agree" title="%s">обробку персональних даних.</a>';
$_['error_firstname'] = '%s має бути від 1 до 64 символів!';
$_['error_lastname'] = '%s має бути від 1 до 64 символів!';
$_['error_email'] = '%s введений невірно!';
$_['error_fax'] = '%s має бути від 1 до 32 символів!';
$_['error_telephone'] = '%s повинен бути від 3 до 32 символів!';
$_['error_company'] = '%s повинен бути від 3 до 32 символів!';
$_['error_password'] = 'Пароль повинен бути від 3 до 20 символів!';
$_['error_confirm'] = 'Паролі не співпадають!';
$_['error_address_1'] = '%s повинен бути від 3 до 128 символів!';
$_['error_city'] = '%s має бути від 2 до 128 символів!';
$_['error_postcode'] = '%s повинен бути від 2 до 10 символів!';
$_['error_country'] = 'Будь ласка, оберіть %s!';
$_['error_zone'] = 'Будь ласка, оберіть %s';
$_['text_lightshop_error_pdata'] = 'Ви повинні погодитися з умовами';
$_['text_lightshop_show'] = 'Показати';
$_['text_lightshop_reset'] = 'Скинути';
$_['text_lightshop_products'] = 'Обрано';
$_['text_lightshop_from'] = 'від';
$_['text_lightshop_to'] = 'до';
$_['text_lightshop_cookieagry_btn'] = '%s';
@@ -1,2 +0,0 @@
<?php
$_['text_lightshopsets'] = 'Знижка на набори';
@@ -1,430 +0,0 @@
<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
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
Dm==
@@ -1,204 +0,0 @@
<?php
class ModelExtensionModuleLightshopblog extends Model {
public function updateViewed($blog_id) {
$this->db->query("UPDATE " . DB_PREFIX . "lightshop_blog SET viewed = (viewed + 1) WHERE blog_id = '" . (int)$blog_id . "'");
}
public function getBlog($blog_id) {
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "lightshop_blog i LEFT JOIN " . DB_PREFIX . "lightshop_blog_description id ON (i.blog_id = id.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE i.blog_id = '" . (int)$blog_id . "' AND id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1'");
return $query->row;
}
public function getBlogs($data) {
$sql = "SELECT * ";
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "lightshop_blog_to_category p2c";
}
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog i ON (p2c.blog_id = i.blog_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "lightshop_blog i";
}
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog_description id ON (i.blog_id = id.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_tag bt ON (i.blog_id = bt.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' ";
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
} else {
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
}
}
if (!empty($data['filtertag'])) {
$sql .= " AND bt.tag = '" . $this->db->escape($data['filtertag']) . "'";
}
if (!empty($data['filter_name'])) {
$sql .= " AND id.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
}
$sql .= " GROUP BY i.blog_id ORDER BY i.date_added DESC LIMIT ".(int)$data['start'].",".(int)$data['limit']."";
$query = $this->db->query($sql);
return $query->rows;
}
public function getBlogsTotal() {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog WHERE status = '1'");
return $query->row['total'];
}
public function getBlogLayoutId($blog_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_to_layout WHERE blog_id = '" . (int)$blog_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
if ($query->num_rows) {
return $query->row['layout_id'];
} else {
return 0;
}
}
public function isModuleSet() {
$isSet = false;
$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_blog'");
if($query->num_rows){
$isSet = true;
}
return $isSet;
}
public function getBlogRelated($blog_id) {
$product_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_related pr LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (pr.blog_id = p.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store p2s ON (p.blog_id = p2s.blog_id) WHERE pr.blog_id = '" . (int)$blog_id . "' AND p.status = '1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
$querys = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_key'");
if($querys->num_rows){$queryss = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_key WHERE 1");}
foreach ($query->rows as $result) {
$product_data[$result['related_id']] = $result['related_id'];
}
if(!isset($queryss->row['value']) || !$queryss->row['value']){$product_data = array();}
return $product_data;
}
public function getBlogRelatedProd($blog_id) {
$product_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_related_prod pr LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (pr.blog_id = p.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store p2s ON (p.blog_id = p2s.blog_id) WHERE pr.blog_id = '" . (int)$blog_id . "' AND p.status = '1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
$querys = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_key'");
if($querys->num_rows){$queryss = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_key WHERE 1");}
foreach ($query->rows as $result) {
$product_data[$result['related_id']] = $result['related_id'];
}
if(!isset($queryss->row['value']) || !$queryss->row['value']){$product_data = array();}
return $product_data;
}
public function getTotalBlogs($data = array()) {
$sql = "SELECT COUNT(DISTINCT p.blog_id) AS total";
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "lightshop_blog_to_category p2c";
}
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog p ON (p2c.blog_id = p.blog_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "lightshop_blog p";
}
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog_description pd ON (p.blog_id = pd.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_tag bt ON (p.blog_id = bt.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store p2s ON (p.blog_id = p2s.blog_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
} else {
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
}
}
if (!empty($data['filtertag'])) {
$sql .= " AND bt.tag = '" . $this->db->escape($data['filtertag']) . "'";
}
$query = $this->db->query($sql);
$total = 0;
if(isset($query->row['total'])){
$total = $query->row['total'];
}
return $total;
}
public function getBlogsTag($data) {
$sql = "SELECT *,COUNT(i.blog_id) as total ";
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " FROM " . DB_PREFIX . "lightshopcat_blog_path cp LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "lightshop_blog_to_category p2c";
}
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog i ON (p2c.blog_id = i.blog_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "lightshop_blog i";
}
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshop_blog_tag bt ON (i.blog_id = bt.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store i2s ON (i.blog_id = i2s.blog_id) WHERE bt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND bt.tag IS NOT NULL AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' ";
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
} else {
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
}
}
$sql .= " GROUP BY bt.tag ORDER BY total DESC LIMIT ".(int)$data['start'].",".(int)$data['limit']."";
$query = $this->db->query($sql);
return $query->rows;
}
public function getBlogTag($blog_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_tag WHERE language_id = '" . (int)$this->config->get('config_language_id') . "' AND blog_id = '" . (int)$blog_id . "'");
return $query->rows;
}
public function getBlogCat($blog_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_blog_to_category b2c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cbd ON (b2c.category_id = cbd.category_id ) WHERE cbd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND b2c.blog_id= '" . (int)$blog_id . "'");
return $query->row;
}
public function getTotalReviewsByBlogId($blog_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog_comment c LEFT JOIN " . DB_PREFIX . "lightshop_blog b ON (c.blog_id = b.blog_id) WHERE b.blog_id = '" . (int)$blog_id . "' AND c.status = '1'");
return $query->row['total'];
}
}
@@ -1,128 +0,0 @@
<?php
class ModelExtensionModuleLightshopcatblog extends Model {
public function getBlogCategory($blogcategory_id) {
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$blogcategory_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
return $query->row;
}
public function getBlogCategories($parent_id = 0) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)");
return $query->rows;
}
public function getBlogCategoryFilters($blogcategory_id) {
$implode = array();
$query = $this->db->query("SELECT filter_id FROM " . DB_PREFIX . "lightshopcat_blog_filter WHERE category_id = '" . (int)$blogcategory_id . "'");
foreach ($query->rows as $result) {
$implode[] = (int)$result['filter_id'];
}
$filter_group_data = array();
if ($implode) {
$filter_group_query = $this->db->query("SELECT DISTINCT f.filter_group_id, fgd.name, fg.sort_order FROM " . DB_PREFIX . "filter f LEFT JOIN " . DB_PREFIX . "filter_group fg ON (f.filter_group_id = fg.filter_group_id) LEFT JOIN " . DB_PREFIX . "filter_group_description fgd ON (fg.filter_group_id = fgd.filter_group_id) WHERE f.filter_id IN (" . implode(',', $implode) . ") AND fgd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY f.filter_group_id ORDER BY fg.sort_order, LCASE(fgd.name)");
foreach ($filter_group_query->rows as $filter_group) {
$filter_data = array();
$filter_query = $this->db->query("SELECT DISTINCT f.filter_id, fd.name FROM " . DB_PREFIX . "filter f LEFT JOIN " . DB_PREFIX . "filter_description fd ON (f.filter_id = fd.filter_id) WHERE f.filter_id IN (" . implode(',', $implode) . ") AND f.filter_group_id = '" . (int)$filter_group['filter_group_id'] . "' AND fd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY f.sort_order, LCASE(fd.name)");
foreach ($filter_query->rows as $filter) {
$filter_data[] = array(
'filter_id' => $filter['filter_id'],
'name' => $filter['name']
);
}
if ($filter_data) {
$filter_group_data[] = array(
'filter_group_id' => $filter_group['filter_group_id'],
'name' => $filter_group['name'],
'filter' => $filter_data
);
}
}
}
return $filter_group_data;
}
public function getBlogCategoryLayoutId($blogcategory_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshopcat_blog_to_layout WHERE category_id = '" . (int)$blogcategory_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
if ($query->num_rows) {
return $query->row['layout_id'];
} else {
return 0;
}
}
public function getBlogsTotalByCategoryId($category_id = 0) {
if ($category_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog b LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_store b2s ON (b.blog_id = b2s.blog_id) LEFT JOIN " . DB_PREFIX . "lightshop_blog_to_category b2c ON (b.blog_id = b2c.blog_id) WHERE b2c.category_id = '" . (int)$category_id . "' AND b2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND b.status = '1'");
}else{
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_blog WHERE status = '1'");
}
return $query->row['total'];
}
public function getBlogTotalCategoriesByCategoryId($parent_id = 0) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshopcat_blog c LEFT JOIN " . DB_PREFIX . "lightshopcat_blog_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
return $query->row['total'];
}
public function getPathByBlog($blog_id) {
$blog_id = (int)$blog_id;
if ($blog_id < 1) return false;
static $path = null;
$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "lightshop_blog_to_category WHERE blog_id = '" . $blog_id . "' ORDER BY main_category DESC LIMIT 1");
$path[$blog_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);
return $path[$blog_id];
}
private function getPathByCategory($category_id) {
$category_id = (int)$category_id;
if ($category_id < 1) return false;
static $path = null;
$max_level = 10;
$sql = "SELECT CONCAT_WS('_'";
for ($i = $max_level-1; $i >= 0; --$i) {
$sql .= ",t$i.category_id";
}
$sql .= ") AS path FROM " . DB_PREFIX . "lightshopcat_blog t0";
for ($i = 1; $i < $max_level; ++$i) {
$sql .= " LEFT JOIN " . DB_PREFIX . "lightshopcat_blog t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";
}
$sql .= " WHERE t0.category_id = '" . $category_id . "'";
$query = $this->db->query($sql);
$path[$category_id] = $query->num_rows ? $query->row['path'] : false;
return $path[$category_id];
}
public function isModuleSet() {
$isSet = false;
$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshopcat_blog'");
if($query->num_rows){
$isSet = true;
}
return $isSet;
}
}
@@ -1,48 +0,0 @@
<?php
class ModelExtensionModuleLightshopnews extends Model {
public function getNews($news_id) {
$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "lightshop_news i LEFT JOIN " . DB_PREFIX . "lightshop_news_description id ON (i.news_id = id.news_id) LEFT JOIN " . DB_PREFIX . "lightshop_news_to_store i2s ON (i.news_id = i2s.news_id) WHERE i.news_id = '" . (int)$news_id . "' AND id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1'");
return $query->row;
}
public function getNewss($data) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news i LEFT JOIN " . DB_PREFIX . "lightshop_news_description id ON (i.news_id = id.news_id) LEFT JOIN " . DB_PREFIX . "lightshop_news_to_store i2s ON (i.news_id = i2s.news_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1' ORDER BY i.date_added DESC LIMIT ".(int)$data['start'].",".(int)$data['limit']."");
return $query->rows;
}
public function getNewssTotal() {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "lightshop_news WHERE status = '1'");
return $query->row['total'];
}
public function getNewsLayoutId($news_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_to_layout WHERE news_id = '" . (int)$news_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
if ($query->num_rows) {
return $query->row['layout_id'];
} else {
return 0;
}
}
public function isModuleSet() {
$isSet = false;
$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "lightshop_news'");
if($query->num_rows){
$isSet = true;
}
return $isSet;
}
public function getProductRelated($news_id) {
$product_data = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "lightshop_news_related pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.news_id = '" . (int)$news_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
foreach ($query->rows as $result) {
$product_data[$result['related_id']] = $result['related_id'];
}
return $product_data;
}
}
@@ -1,38 +0,0 @@
<?php
class ModelExtensionModuleLightshopsubscribe extends Model {
public function addSubscribe($data) {
$this->db->query("INSERT INTO " . DB_PREFIX . "subscribe SET email = '" . $this->db->escape($data['email']) . "', status = '" . (int) $data['status'] . "'");
}
public function editSubscribe($data) {
$this->db->query("UPDATE " . DB_PREFIX . "subscribe SET status = '" . (int) $data['status'] . "' WHERE email = '" . $this->db->escape($data['email']) . "'");
}
public function getSubscribers() {
$query = $this->db->query("SELECT email FROM " . DB_PREFIX . "subscribe WHERE status = '0'");
return $query->rows;
}
public function checkEmail($email) {
$query = $this->db->query("SELECT email FROM " . DB_PREFIX . "subscribe WHERE email ='" . $this->db->escape($email) . "'");
return isset($query->row['email']) ? $query->row['email'] : 0;
}
public function getAuthDescription($language_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "subscribe_auth_description WHERE language_id='" .(int)$language_id . "'");
return isset($query->row['subscribe_authorization']) ? $query->row['subscribe_authorization'] : '';
}
public function getEmailDescription($language_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "subscribe_email_description WHERE language_id='" . (int)$language_id . "'");
return isset($query->row['subscribe_descriptions']) ? $query->row['subscribe_descriptions'] : '';
}
}
?>
@@ -1,52 +0,0 @@
<?php
class ModelExtensionTotalLightshopsets extends Model {
public function getTotal($total) {
$this->load->language('extension/total/lightshopsets');
$this->load->model('extension/module/lightshop');
$setids = array();
if (isset($this->session->data['lightshopsetid']) && $this->session->data['lightshopsetid']) {
$setids = $this->session->data['lightshopsetid'];
}
$cartProducts = array();
foreach ($this->cart->getProducts() as $product) {
$cartProducts[$product['product_id']]['quantity'] = $product['quantity'];
$cartProducts[$product['product_id']]['price'] = $product['price'];
}
foreach ($setids as $setid) {
$lightshopsets = $this->model_extension_module_lightshop->getSetDiscount($total,$setid,$cartProducts);
if (!empty($this->session->data['vouchers'])) {
foreach ($this->session->data['vouchers'] as $voucher) {
$lightshopsets += $voucher['amount'];
}
}
if ($lightshopsets['discount']) {
$setInfo = $this->model_extension_module_lightshop->getSetInfo($setid);
$total['totals'][] = array(
'code' => 'lightshopsets',
'title' => $this->language->get('text_lightshopsets').' - '.$setInfo['title'],
'value' => -$lightshopsets['discount'],
'sort_order' => $this->config->get('total_lightshopsets_sort_order')
);
$total['total'] -= $lightshopsets['discount'];
$cartProducts = $lightshopsets['cartproducts'];
}
}
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,998 +0,0 @@
/*!
* Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['fontawesome-free-conflict-detection'] = {})));
}(this, (function (exports) { 'use strict';
function _typeof(obj) {
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
var _WINDOW = {};
var _DOCUMENT = {};
try {
if (typeof window !== 'undefined') _WINDOW = window;
if (typeof document !== 'undefined') _DOCUMENT = document;
} catch (e) {}
var _ref = _WINDOW.navigator || {},
_ref$userAgent = _ref.userAgent,
userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;
var WINDOW = _WINDOW;
var DOCUMENT = _DOCUMENT;
var IS_BROWSER = !!WINDOW.document;
var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
var functions = [];
var listener = function listener() {
DOCUMENT.removeEventListener('DOMContentLoaded', listener);
loaded = 1;
functions.map(function (fn) {
return fn();
});
};
var loaded = false;
if (IS_DOM) {
loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);
if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);
}
function domready (fn) {
if (!IS_DOM) return;
loaded ? setTimeout(fn, 0) : functions.push(fn);
}
function report (_ref) {
var nodesTested = _ref.nodesTested,
nodesFound = _ref.nodesFound;
var timedOutTests = {};
for (var key in nodesFound) {
if (!(nodesTested.conflict[key] || nodesTested.noConflict[key])) {
timedOutTests[key] = nodesFound[key];
}
}
var conflictsCount = Object.keys(nodesTested.conflict).length;
if (conflictsCount > 0) {
console.info("%cConflict".concat(conflictsCount > 1 ? 's' : '', " found:"), 'color: darkred; font-size: large');
var data = {};
for (var _key in nodesTested.conflict) {
var item = nodesTested.conflict[_key];
data[_key] = {
'tagName': item.tagName,
'src/href': item.src || item.href || 'n/a',
'innerText excerpt': item.innerText && item.innerText !== '' ? item.innerText.slice(0, 200) + '...' : '(empty)'
};
}
console.table(data);
}
var noConflictsCount = Object.keys(nodesTested.noConflict).length;
if (noConflictsCount > 0) {
console.info("%cNo conflict".concat(noConflictsCount > 1 ? 's' : '', " found with ").concat(noConflictsCount == 1 ? 'this' : 'these', ":"), 'color: green; font-size: large');
var _data = {};
for (var _key2 in nodesTested.noConflict) {
var _item = nodesTested.noConflict[_key2];
_data[_key2] = {
'tagName': _item.tagName,
'src/href': _item.src || _item.href || 'n/a',
'innerText excerpt': _item.innerText && _item.innerText !== '' ? _item.innerText.slice(0, 200) + '...' : '(empty)'
};
}
console.table(_data);
}
var timeOutCount = Object.keys(timedOutTests).length;
if (timeOutCount > 0) {
console.info("%cLeftovers--we timed out before collecting test results for ".concat(timeOutCount == 1 ? 'this' : 'these', ":"), 'color: blue; font-size: large');
var _data2 = {};
for (var _key3 in timedOutTests) {
var _item2 = timedOutTests[_key3];
_data2[_key3] = {
'tagName': _item2.tagName,
'src/href': _item2.src || _item2.href || 'n/a',
'innerText excerpt': _item2.innerText && _item2.innerText !== '' ? _item2.innerText.slice(0, 200) + '...' : '(empty)'
};
}
console.table(_data2);
}
}
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var md5 = createCommonjsModule(function (module) {
(function ($) {
/**
* Add integers, wrapping at 2^32.
* This uses 16-bit operations internally to work around bugs in interpreters.
*
* @param {number} x First integer
* @param {number} y Second integer
* @returns {number} Sum
*/
function safeAdd(x, y) {
var lsw = (x & 0xffff) + (y & 0xffff);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return msw << 16 | lsw & 0xffff;
}
/**
* Bitwise rotate a 32-bit number to the left.
*
* @param {number} num 32-bit number
* @param {number} cnt Rotation count
* @returns {number} Rotated number
*/
function bitRotateLeft(num, cnt) {
return num << cnt | num >>> 32 - cnt;
}
/**
* Basic operation the algorithm uses.
*
* @param {number} q q
* @param {number} a a
* @param {number} b b
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5cmn(q, a, b, x, s, t) {
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5ff(a, b, c, d, x, s, t) {
return md5cmn(b & c | ~b & d, a, b, x, s, t);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5gg(a, b, c, d, x, s, t) {
return md5cmn(b & d | c & ~d, a, b, x, s, t);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5hh(a, b, c, d, x, s, t) {
return md5cmn(b ^ c ^ d, a, b, x, s, t);
}
/**
* Basic operation the algorithm uses.
*
* @param {number} a a
* @param {number} b b
* @param {number} c c
* @param {number} d d
* @param {number} x x
* @param {number} s s
* @param {number} t t
* @returns {number} Result
*/
function md5ii(a, b, c, d, x, s, t) {
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}
/**
* Calculate the MD5 of an array of little-endian words, and a bit length.
*
* @param {Array} x Array of little-endian words
* @param {number} len Bit length
* @returns {Array<number>} MD5 Array
*/
function binlMD5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << len % 32;
x[(len + 64 >>> 9 << 4) + 14] = len;
var i;
var olda;
var oldb;
var oldc;
var oldd;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (i = 0; i < x.length; i += 16) {
olda = a;
oldb = b;
oldc = c;
oldd = d;
a = md5ff(a, b, c, d, x[i], 7, -680876936);
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5gg(b, c, d, a, x[i], 20, -373897302);
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5hh(d, a, b, c, x[i], 11, -358537222);
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5ii(a, b, c, d, x[i], 6, -198630844);
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safeAdd(a, olda);
b = safeAdd(b, oldb);
c = safeAdd(c, oldc);
d = safeAdd(d, oldd);
}
return [a, b, c, d];
}
/**
* Convert an array of little-endian words to a string
*
* @param {Array<number>} input MD5 Array
* @returns {string} MD5 string
*/
function binl2rstr(input) {
var i;
var output = '';
var length32 = input.length * 32;
for (i = 0; i < length32; i += 8) {
output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff);
}
return output;
}
/**
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*
* @param {string} input Raw input string
* @returns {Array<number>} Array of little-endian words
*/
function rstr2binl(input) {
var i;
var output = [];
output[(input.length >> 2) - 1] = undefined;
for (i = 0; i < output.length; i += 1) {
output[i] = 0;
}
var length8 = input.length * 8;
for (i = 0; i < length8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32;
}
return output;
}
/**
* Calculate the MD5 of a raw string
*
* @param {string} s Input string
* @returns {string} Raw MD5 string
*/
function rstrMD5(s) {
return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
}
/**
* Calculates the HMAC-MD5 of a key and some data (raw strings)
*
* @param {string} key HMAC key
* @param {string} data Raw input string
* @returns {string} Raw MD5 string
*/
function rstrHMACMD5(key, data) {
var i;
var bkey = rstr2binl(key);
var ipad = [];
var opad = [];
var hash;
ipad[15] = opad[15] = undefined;
if (bkey.length > 16) {
bkey = binlMD5(bkey, key.length * 8);
}
for (i = 0; i < 16; i += 1) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5c5c5c5c;
}
hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
}
/**
* Convert a raw string to a hex string
*
* @param {string} input Raw input string
* @returns {string} Hex encoded string
*/
function rstr2hex(input) {
var hexTab = '0123456789abcdef';
var output = '';
var x;
var i;
for (i = 0; i < input.length; i += 1) {
x = input.charCodeAt(i);
output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f);
}
return output;
}
/**
* Encode a string as UTF-8
*
* @param {string} input Input string
* @returns {string} UTF8 string
*/
function str2rstrUTF8(input) {
return unescape(encodeURIComponent(input));
}
/**
* Encodes input string as raw MD5 string
*
* @param {string} s Input string
* @returns {string} Raw MD5 string
*/
function rawMD5(s) {
return rstrMD5(str2rstrUTF8(s));
}
/**
* Encodes input string as Hex encoded string
*
* @param {string} s Input string
* @returns {string} Hex encoded string
*/
function hexMD5(s) {
return rstr2hex(rawMD5(s));
}
/**
* Calculates the raw HMAC-MD5 for the given key and data
*
* @param {string} k HMAC key
* @param {string} d Input string
* @returns {string} Raw MD5 string
*/
function rawHMACMD5(k, d) {
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
}
/**
* Calculates the Hex encoded HMAC-MD5 for the given key and data
*
* @param {string} k HMAC key
* @param {string} d Input string
* @returns {string} Raw MD5 string
*/
function hexHMACMD5(k, d) {
return rstr2hex(rawHMACMD5(k, d));
}
/**
* Calculates MD5 value for a given string.
* If a key is provided, calculates the HMAC-MD5 value.
* Returns a Hex encoded string unless the raw argument is given.
*
* @param {string} string Input string
* @param {string} [key] HMAC key
* @param {boolean} raw Raw oytput switch
* @returns {string} MD5 output
*/
function md5(string, key, raw) {
if (!key) {
if (!raw) {
return hexMD5(string);
}
return rawMD5(string);
}
if (!raw) {
return hexHMACMD5(key, string);
}
return rawHMACMD5(key, string);
}
if (module.exports) {
module.exports = md5;
} else {
$.md5 = md5;
}
})(commonjsGlobal);
});
function md5ForNode(node) {
if (null === node || 'object' !== _typeof(node)) return undefined;
if (node.src) {
return md5(node.src);
} else if (node.href) {
return md5(node.href);
} else if (node.innerText && '' !== node.innerText) {
// eslint-disable-line yoda
return md5(node.innerText);
} else {
return undefined;
}
}
var diagScriptId = 'fa-kits-diag';
var nodeUnderTestId = 'fa-kits-node-under-test';
var md5Attr = 'data-md5';
var detectionIgnoreAttr = 'data-fa-detection-ignore';
var timeoutAttr = 'data-fa-detection-timeout';
var resultsCollectionMaxWaitAttr = 'data-fa-detection-results-collection-max-wait';
var silenceErrors = function silenceErrors(e) {
e.preventDefault();
e.stopPropagation();
};
function pollUntil(_ref) {
var _ref$fn = _ref.fn,
fn = _ref$fn === void 0 ? function () {
return true;
} : _ref$fn,
_ref$initialDuration = _ref.initialDuration,
initialDuration = _ref$initialDuration === void 0 ? 1 : _ref$initialDuration,
_ref$maxDuration = _ref.maxDuration,
maxDuration = _ref$maxDuration === void 0 ? WINDOW.FontAwesomeDetection.timeout : _ref$maxDuration,
_ref$showProgress = _ref.showProgress,
showProgress = _ref$showProgress === void 0 ? false : _ref$showProgress,
progressIndicator = _ref.progressIndicator;
return new Promise(function (resolve, reject) {
// eslint-disable-line compat/compat
function poll(duration, cumulativeDuration) {
setTimeout(function () {
var result = fn();
if (showProgress) {
console.info(progressIndicator);
}
if (!!result) {
// eslint-disable-line no-extra-boolean-cast
resolve(result);
} else {
var nextDuration = 250;
var nextCumulativeDuration = nextDuration + cumulativeDuration;
if (nextCumulativeDuration <= maxDuration) {
poll(nextDuration, nextCumulativeDuration);
} else {
reject('timeout'); // eslint-disable-line prefer-promise-reject-errors
}
}
}, duration);
}
poll(initialDuration, 0);
});
}
function detectWebfontConflicts() {
var linkTags = Array.from(DOCUMENT.getElementsByTagName('link')).filter(function (t) {
return !t.hasAttribute(detectionIgnoreAttr);
});
var styleTags = Array.from(DOCUMENT.getElementsByTagName('style')).filter(function (t) {
if (t.hasAttribute(detectionIgnoreAttr)) {
return false;
} // If the browser has loaded the FA5 CSS, let's not test that <style> element.
// Its enough that we'll be testing for traces of the corresponding JS being loaded, and testing
// this <style> would only produce a false negative anyway.
if (WINDOW.FontAwesomeConfig && t.innerText.match(new RegExp("svg:not\\(:root\\)\\.".concat(WINDOW.FontAwesomeConfig.replacementClass)))) {
return false;
}
return true;
});
function runDiag(scriptOrLinkTag, md5) {
var diagFrame = DOCUMENT.createElement('iframe'); // Using "visibility: hidden; position: absolute" instead of "display: none;" because
// Firefox will not return the expected results for getComputedStyle if our iframe has display: none.
diagFrame.setAttribute('style', 'visibility: hidden; position: absolute; height: 0; width: 0;');
var testIconId = 'fa-test-icon-' + md5;
var iTag = DOCUMENT.createElement('i');
iTag.setAttribute('class', 'fa fa-coffee');
iTag.setAttribute('id', testIconId);
var diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId); // WARNING: this function will be toString()'d and assigned to innerText of the diag script
// element that we'll be putting into a diagnostic iframe.
// That means that this code won't compile until after the outer script has run and injected
// this code into the iframe. There are some compile time errors that might occur there.
// For example, using single line (double-slash) comments like this one inside that function
// will probably cause it to choke. Chrome will show an error like this:
// Uncaught SyntaxError: Unexpected end of input
var diagScriptFun = function diagScriptFun(nodeUnderTestId, testIconId, md5, parentOrigin) {
parent.FontAwesomeDetection.__pollUntil({
fn: function fn() {
var iEl = document.getElementById(testIconId);
var computedStyle = window.getComputedStyle(iEl);
var fontFamily = computedStyle.getPropertyValue('font-family');
if (!!fontFamily.match(/FontAwesome/) || !!fontFamily.match(/Font Awesome 5/)) {
return true;
} else {
return false;
}
}
}).then(function () {
var node = document.getElementById(nodeUnderTestId);
parent.postMessage({
type: 'fontawesome-conflict',
technology: 'webfont',
href: node.href,
innerText: node.innerText,
tagName: node.tagName,
md5: md5
}, parentOrigin);
}).catch(function (e) {
var node = document.getElementById(nodeUnderTestId);
if (e === 'timeout') {
parent.postMessage({
type: 'no-conflict',
technology: 'webfont',
href: node.src,
innerText: node.innerText,
tagName: node.tagName,
md5: md5
}, parentOrigin);
} else {
console.error(e);
}
});
};
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(testIconId || 'foo', "', '").concat(md5, "', '").concat(parentOrigin, "');");
diagFrame.onload = function () {
diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
diagFrame.contentDocument.head.appendChild(diagScript);
diagFrame.contentDocument.head.appendChild(scriptOrLinkTag);
diagFrame.contentDocument.body.appendChild(iTag);
};
domready(function () {
return DOCUMENT.body.appendChild(diagFrame);
});
}
var cssByMD5 = {};
for (var i = 0; i < linkTags.length; i++) {
var linkUnderTest = DOCUMENT.createElement('link');
linkUnderTest.setAttribute('id', nodeUnderTestId);
linkUnderTest.setAttribute('href', linkTags[i].href);
linkUnderTest.setAttribute('rel', linkTags[i].rel);
var md5ForLink = md5ForNode(linkTags[i]);
linkUnderTest.setAttribute(md5Attr, md5ForLink);
cssByMD5[md5ForLink] = linkTags[i];
runDiag(linkUnderTest, md5ForLink);
}
for (var _i = 0; _i < styleTags.length; _i++) {
var styleUnderTest = DOCUMENT.createElement('style');
styleUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForStyle = md5ForNode(styleTags[_i]);
styleUnderTest.setAttribute(md5Attr, md5ForStyle);
styleUnderTest.innerText = styleTags[_i].innerText;
cssByMD5[md5ForStyle] = styleTags[_i];
runDiag(styleUnderTest, md5ForStyle);
}
return cssByMD5;
}
function detectSvgConflicts(currentScript) {
var scripts = Array.from(DOCUMENT.scripts).filter(function (t) {
return !t.hasAttribute(detectionIgnoreAttr) && t !== currentScript;
});
var scriptsByMD5 = {};
var _loop = function _loop(scriptIdx) {
var diagFrame = DOCUMENT.createElement('iframe');
diagFrame.setAttribute('style', 'display:none;');
var scriptUnderTest = DOCUMENT.createElement('script');
scriptUnderTest.setAttribute('id', nodeUnderTestId);
var md5ForScript = md5ForNode(scripts[scriptIdx]);
scriptUnderTest.setAttribute(md5Attr, md5ForScript);
scriptsByMD5[md5ForScript] = scripts[scriptIdx];
if (scripts[scriptIdx].src !== '') {
scriptUnderTest.src = scripts[scriptIdx].src;
}
if (scripts[scriptIdx].innerText !== '') {
scriptUnderTest.innerText = scripts[scriptIdx].innerText;
}
scriptUnderTest.async = true;
var diagScript = DOCUMENT.createElement('script');
diagScript.setAttribute('id', diagScriptId);
var parentOrigin = WINDOW.location.origin === 'file://' ? '*' : WINDOW.location.origin;
var diagScriptFun = function diagScriptFun(nodeUnderTestId, md5, parentOrigin) {
parent.FontAwesomeDetection.__pollUntil({
fn: function fn() {
return !!window.FontAwesomeConfig || !!window.FontAwesomeKitConfig;
}
}).then(function () {
var scriptNode = document.getElementById(nodeUnderTestId);
parent.postMessage({
type: 'fontawesome-conflict',
technology: 'js',
src: scriptNode.src,
innerText: scriptNode.innerText,
tagName: scriptNode.tagName,
md5: md5
}, parentOrigin);
}).catch(function (e) {
var scriptNode = document.getElementById(nodeUnderTestId);
if (e === 'timeout') {
parent.postMessage({
type: 'no-conflict',
src: scriptNode.src,
innerText: scriptNode.innerText,
tagName: scriptNode.tagName,
md5: md5
}, parentOrigin);
} else {
console.error(e);
}
});
};
diagScript.innerText = "(".concat(diagScriptFun.toString(), ")('").concat(nodeUnderTestId, "', '").concat(md5ForScript, "', '").concat(parentOrigin, "');");
diagFrame.onload = function () {
diagFrame.contentWindow.addEventListener('error', silenceErrors, true);
diagFrame.contentDocument.head.appendChild(diagScript);
diagFrame.contentDocument.head.appendChild(scriptUnderTest);
};
domready(function () {
return DOCUMENT.body.appendChild(diagFrame);
});
};
for (var scriptIdx = 0; scriptIdx < scripts.length; scriptIdx++) {
_loop(scriptIdx);
}
return scriptsByMD5;
}
function setDoneResults(_ref2) {
var nodesTested = _ref2.nodesTested,
nodesFound = _ref2.nodesFound;
WINDOW.FontAwesomeDetection = WINDOW.FontAwesomeDetection || {};
WINDOW.FontAwesomeDetection.nodesTested = nodesTested;
WINDOW.FontAwesomeDetection.nodesFound = nodesFound;
WINDOW.FontAwesomeDetection.detectionDone = true;
}
function conflictDetection() {
var report$$1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
var nodesTested = {
conflict: {},
noConflict: {}
};
WINDOW.onmessage = function (e) {
if (WINDOW.location.origin === 'file://' || e.origin === WINDOW.location.origin) {
if (e && e.data) {
if (e.data.type === 'fontawesome-conflict') {
nodesTested.conflict[e.data.md5] = e.data;
} else if (e.data.type === 'no-conflict') {
nodesTested.noConflict[e.data.md5] = e.data;
}
}
}
};
var scriptsToTest = detectSvgConflicts(DOCUMENT.currentScript);
var cssToTest = detectWebfontConflicts();
var nodesFound = _objectSpread({}, scriptsToTest, cssToTest);
var testCount = Object.keys(scriptsToTest).length + Object.keys(cssToTest).length; // The resultsCollectionMaxWait allows for the time between when the tests running under
// child iframes call postMessage with their results, and when the parent window
// receives and handles those events with window.onmessage.
// Making it configurable allows us to test the scenario where this timeout is exceeded.
// Naming it something very different from "timeout" is to help avoid the potential ambiguity between
// these two timeout-related settings.
var masterTimeout = WINDOW.FontAwesomeDetection.timeout + WINDOW.FontAwesomeDetection.resultsCollectionMaxWait;
console.group('Font Awesome Detector');
if (testCount === 0) {
console.info('%cAll Good!', 'color: green; font-size: large');
console.info('We didn\'t find anything that needs testing for conflicts. Ergo, no conflicts.');
} else {
console.info("Testing ".concat(testCount, " possible conflicts."));
console.info("We'll wait about ".concat(Math.round(WINDOW.FontAwesomeDetection.timeout / 10) / 100, " seconds while testing these and\n") + "then up to another ".concat(Math.round(WINDOW.FontAwesomeDetection.resultsCollectionMaxWait / 10) / 100, " to allow the browser time\n") + "to accumulate the results. But we'll probably be outta here way before then.\n\n");
console.info("You can adjust those durations by assigning values to these attributes on the <script> element that loads this detection:");
console.info("\t%c".concat(timeoutAttr, "%c: milliseconds to wait for each test before deciding whether it's a conflict."), 'font-weight: bold;', 'font-size: normal;');
console.info("\t%c".concat(resultsCollectionMaxWaitAttr, "%c: milliseconds to wait for the browser to accumulate test results before giving up."), 'font-weight: bold;', 'font-size: normal;');
pollUntil({
// Give this overall timer a little extra cushion
maxDuration: masterTimeout,
showProgress: true,
progressIndicator: 'waiting...',
fn: function fn() {
return Object.keys(nodesTested.conflict).length + Object.keys(nodesTested.noConflict).length >= testCount;
}
}).then(function () {
console.info('DONE!');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
});
console.groupEnd();
}).catch(function (e) {
if (e === 'timeout') {
console.info('TIME OUT! We waited until we got tired. Here\'s what we found:');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
});
} else {
console.info('Whoops! We hit an error:', e);
console.info('Here\'s what we\'d found up until that error:');
setDoneResults({
nodesTested: nodesTested,
nodesFound: nodesFound
});
report$$1({
nodesTested: nodesTested,
nodesFound: nodesFound
});
}
console.groupEnd();
});
}
} // Allow clients to access, and in some cases, override some properties
var initialConfig = WINDOW.FontAwesomeDetection || {}; // These can be overridden
var _default = {
report: report,
timeout: +(DOCUMENT.currentScript.getAttribute(timeoutAttr) || "2000"),
resultsCollectionMaxWait: +(DOCUMENT.currentScript.getAttribute(resultsCollectionMaxWaitAttr) || "5000")
};
var _config = _objectSpread({}, _default, initialConfig, {
// These cannot be overridden
__pollUntil: pollUntil,
md5ForNode: md5ForNode,
detectionDone: false,
nodesTested: null,
nodesFound: null
});
WINDOW.FontAwesomeDetection = _config;
var PRODUCTION = function () {
try {
return process.env.NODE_ENV === 'production';
} catch (e) {
return false;
}
}();
function bunker(fn) {
try {
fn();
} catch (e) {
if (!PRODUCTION) {
throw e;
}
}
}
bunker(function () {
if (IS_BROWSER && IS_DOM) {
conflictDetection(window.FontAwesomeDetection.report);
}
});
exports.conflictDetection = conflictDetection;
Object.defineProperty(exports, '__esModule', { value: true });
})));
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,280 +0,0 @@
/*!
* Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*/
(function () {
'use strict';
var _WINDOW = {};
var _DOCUMENT = {};
try {
if (typeof window !== 'undefined') _WINDOW = window;
if (typeof document !== 'undefined') _DOCUMENT = document;
} catch (e) {}
var _ref = _WINDOW.navigator || {},
_ref$userAgent = _ref.userAgent,
userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;
var WINDOW = _WINDOW;
var DOCUMENT = _DOCUMENT;
var IS_BROWSER = !!WINDOW.document;
var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';
var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');
var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';
var PRODUCTION = function () {
try {
return "production" === 'production';
} catch (e) {
return false;
}
}();
function bunker(fn) {
try {
fn();
} catch (e) {
if (!PRODUCTION) {
throw e;
}
}
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
var w = WINDOW || {};
if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};
if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};
if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};
if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];
var namespace = w[NAMESPACE_IDENTIFIER];
function defineIcons(prefix, icons) {
var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var _params$skipHooks = params.skipHooks,
skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;
var normalized = Object.keys(icons).reduce(function (acc, iconName) {
var icon = icons[iconName];
var expanded = !!icon.icon;
if (expanded) {
acc[icon.iconName] = icon.icon;
} else {
acc[iconName] = icon;
}
return acc;
}, {});
if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {
namespace.hooks.addPack(prefix, normalized);
} else {
namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);
}
/**
* Font Awesome 4 used the prefix of `fa` for all icons. With the introduction
* of new styles we needed to differentiate between them. Prefix `fa` is now an alias
* for `fas` so we'll easy the upgrade process for our users by automatically defining
* this as well.
*/
if (prefix === 'fas') {
defineIcons('fa', icons);
}
}
var icons = {
"address-book": [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"],
"address-card": [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z"],
"angry": [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z"],
"arrow-alt-circle-down": [512, 512, [], "f358", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"],
"arrow-alt-circle-left": [512, 512, [], "f359", "M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z"],
"arrow-alt-circle-right": [512, 512, [], "f35a", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z"],
"arrow-alt-circle-up": [512, 512, [], "f35b", "M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z"],
"bell": [448, 512, [], "f0f3", "M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z"],
"bell-slash": [640, 512, [], "f1f6", "M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"],
"bookmark": [384, 512, [], "f02e", "M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z"],
"building": [448, 512, [], "f1ad", "M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z"],
"calendar": [448, 512, [], "f133", "M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z"],
"calendar-alt": [448, 512, [], "f073", "M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"calendar-check": [448, 512, [], "f274", "M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z"],
"calendar-minus": [448, 512, [], "f272", "M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"calendar-plus": [448, 512, [], "f271", "M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"calendar-times": [448, 512, [], "f273", "M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"caret-square-down": [448, 512, [], "f150", "M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"caret-square-left": [448, 512, [], "f191", "M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"caret-square-right": [448, 512, [], "f152", "M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"caret-square-up": [448, 512, [], "f151", "M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"chart-bar": [512, 512, [], "f080", "M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z"],
"check-circle": [512, 512, [], "f058", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z"],
"check-square": [448, 512, [], "f14a", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z"],
"circle": [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z"],
"clipboard": [384, 512, [], "f328", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm144 418c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h42v36c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-36h42c3.3 0 6 2.7 6 6z"],
"clock": [512, 512, [], "f017", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z"],
"clone": [512, 512, [], "f24d", "M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z"],
"closed-captioning": [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z"],
"comment": [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"],
"comment-alt": [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z"],
"comment-dots": [512, 512, [], "f4ad", "M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"],
"comments": [576, 512, [], "f086", "M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z"],
"compass": [496, 512, [], "f14e", "M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"],
"copy": [448, 512, [], "f0c5", "M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"],
"copyright": [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z"],
"credit-card": [576, 512, [], "f09d", "M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z"],
"dizzy": [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z"],
"dot-circle": [512, 512, [], "f192", "M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"],
"edit": [576, 512, [], "f044", "M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z"],
"envelope": [512, 512, [], "f0e0", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"],
"envelope-open": [512, 512, [], "f2b6", "M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z"],
"eye": [576, 512, [], "f06e", "M288 144a110.94 110.94 0 0 0-31.24 5 55.4 55.4 0 0 1 7.24 27 56 56 0 0 1-56 56 55.4 55.4 0 0 1-27-7.24A111.71 111.71 0 1 0 288 144zm284.52 97.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400c-98.65 0-189.09-55-237.93-144C98.91 167 189.34 112 288 112s189.09 55 237.93 144C477.1 345 386.66 400 288 400z"],
"eye-slash": [640, 512, [], "f070", "M634 471L36 3.51A16 16 0 0 0 13.51 6l-10 12.49A16 16 0 0 0 6 41l598 467.49a16 16 0 0 0 22.49-2.49l10-12.49A16 16 0 0 0 634 471zM296.79 146.47l134.79 105.38C429.36 191.91 380.48 144 320 144a112.26 112.26 0 0 0-23.21 2.47zm46.42 219.07L208.42 260.16C210.65 320.09 259.53 368 320 368a113 113 0 0 0 23.21-2.46zM320 112c98.65 0 189.09 55 237.93 144a285.53 285.53 0 0 1-44 60.2l37.74 29.5a333.7 333.7 0 0 0 52.9-75.11 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64c-36.7 0-71.71 7-104.63 18.81l46.41 36.29c18.94-4.3 38.34-7.1 58.22-7.1zm0 288c-98.65 0-189.08-55-237.93-144a285.47 285.47 0 0 1 44.05-60.19l-37.74-29.5a333.6 333.6 0 0 0-52.89 75.1 32.35 32.35 0 0 0 0 29.19C89.72 376.41 197.08 448 320 448c36.7 0 71.71-7.05 104.63-18.81l-46.41-36.28C359.28 397.2 339.89 400 320 400z"],
"file": [384, 512, [], "f15b", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z"],
"file-alt": [384, 512, [], "f15c", "M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z"],
"file-archive": [384, 512, [], "f1c6", "M128.3 160v32h32v-32zm64-96h-32v32h32zm-64 32v32h32V96zm64 32h-32v32h32zm177.6-30.1L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h79.7v16h32V48H208v104c0 13.3 10.7 24 24 24h104zM194.2 265.7c-1.1-5.6-6-9.7-11.8-9.7h-22.1v-32h-32v32l-19.7 97.1C102 385.6 126.8 416 160 416c33.1 0 57.9-30.2 51.5-62.6zm-33.9 124.4c-17.9 0-32.4-12.1-32.4-27s14.5-27 32.4-27 32.4 12.1 32.4 27-14.5 27-32.4 27zm32-198.1h-32v32h32z"],
"file-audio": [384, 512, [], "f1c7", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z"],
"file-code": [384, 512, [], "f1c9", "M149.9 349.1l-.2-.2-32.8-28.9 32.8-28.9c3.6-3.2 4-8.8.8-12.4l-.2-.2-17.4-18.6c-3.4-3.6-9-3.7-12.4-.4l-57.7 54.1c-3.7 3.5-3.7 9.4 0 12.8l57.7 54.1c1.6 1.5 3.8 2.4 6 2.4 2.4 0 4.8-1 6.4-2.8l17.4-18.6c3.3-3.5 3.1-9.1-.4-12.4zm220-251.2L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h160v104c0 13.3 10.7 24 24 24h104zM209.6 214c-4.7-1.4-9.5 1.3-10.9 6L144 408.1c-1.4 4.7 1.3 9.6 6 10.9l24.4 7.1c4.7 1.4 9.6-1.4 10.9-6L240 231.9c1.4-4.7-1.3-9.6-6-10.9zm24.5 76.9l.2.2 32.8 28.9-32.8 28.9c-3.6 3.2-4 8.8-.8 12.4l.2.2 17.4 18.6c3.3 3.5 8.9 3.7 12.4.4l57.7-54.1c3.7-3.5 3.7-9.4 0-12.8l-57.7-54.1c-3.5-3.3-9.1-3.2-12.4.4l-17.4 18.6c-3.3 3.5-3.1 9.1.4 12.4z"],
"file-excel": [384, 512, [], "f1c3", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z"],
"file-image": [384, 512, [], "f1c5", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z"],
"file-pdf": [384, 512, [], "f1c1", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"],
"file-powerpoint": [384, 512, [], "f1c4", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z"],
"file-video": [384, 512, [], "f1c8", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z"],
"file-word": [384, 512, [], "f1c2", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z"],
"flag": [512, 512, [], "f024", "M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z"],
"flushed": [496, 512, [], "f579", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"],
"folder": [512, 512, [], "f07b", "M464 128H272l-54.63-54.63c-6-6-14.14-9.37-22.63-9.37H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm0 272H48V112h140.12l54.63 54.63c6 6 14.14 9.37 22.63 9.37H464v224z"],
"folder-open": [576, 512, [], "f07c", "M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z"],
"font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"],
"frown": [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z"],
"frown-open": [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z"],
"futbol": [496, 512, [], "f1e3", "M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z"],
"gem": [576, 512, [], "f3a5", "M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z"],
"grimace": [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z"],
"grin": [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"],
"grin-alt": [496, 512, [], "f581", "M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z"],
"grin-beam": [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z"],
"grin-beam-sweat": [496, 512, [], "f583", "M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"],
"grin-hearts": [496, 512, [], "f584", "M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z"],
"grin-squint": [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z"],
"grin-squint-tears": [512, 512, [], "f586", "M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z"],
"grin-stars": [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z"],
"grin-tears": [640, 512, [], "f588", "M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"],
"grin-tongue": [496, 512, [], "f589", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
"grin-tongue-squint": [496, 512, [], "f58a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z"],
"grin-tongue-wink": [496, 512, [], "f58b", "M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z"],
"grin-wink": [496, 512, [], "f58c", "M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"],
"hand-lizard": [576, 512, [], "f258", "M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z"],
"hand-paper": [448, 512, [], "f256", "M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z"],
"hand-peace": [448, 512, [], "f25b", "M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z"],
"hand-point-down": [448, 512, [], "f0a7", "M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"],
"hand-point-left": [512, 512, [], "f0a5", "M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"],
"hand-point-right": [512, 512, [], "f0a4", "M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"],
"hand-point-up": [448, 512, [], "f0a6", "M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"],
"hand-pointer": [448, 512, [], "f25a", "M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z"],
"hand-rock": [512, 512, [], "f255", "M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z"],
"hand-scissors": [512, 512, [], "f257", "M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z"],
"hand-spock": [512, 512, [], "f259", "M501.03053,116.17605c-19.39059-31.50779-51.24406-35.72849-66.31044-35.01756-14.11325-50.81051-62.0038-54.08-70.73816-54.08a74.03091,74.03091,0,0,0-72.23816,58.916l-4.64648,22.66014-13.68357-53.207c-9.09569-35.37107-46.412-64.05074-89.66-53.07223a73.89749,73.89749,0,0,0-55.121,78.94722,73.68273,73.68273,0,0,0-64.8495,94.42181l24.35933,82.19721c-38.24017-7.54492-62.79677,16.18358-68.11512,21.84764a73.6791,73.6791,0,0,0,3.19921,104.19329l91.36509,85.9765A154.164,154.164,0,0,0,220.62279,512h107.4549A127.30079,127.30079,0,0,0,452.3392,413.86139l57.623-241.96272A73.20274,73.20274,0,0,0,501.03053,116.17605Zm-37.7597,44.60544L405.64788,402.74812a79.46616,79.46616,0,0,1-77.57019,61.25972H220.62279a106.34052,106.34052,0,0,1-73.1366-28.998l-91.369-85.98041C31.34381,325.72669,66.61133,288.131,91.39644,311.5392l51.123,48.10739c5.42577,5.10937,13.48239.71679,13.48239-5.82617a246.79914,246.79914,0,0,0-10.17771-70.1523l-36.01362-121.539c-9.7324-32.88279,39.69916-47.27145,49.38664-14.625l31.3437,105.77923c5.59374,18.90428,33.78119,10.71288,28.9648-8.00781L177.06427,80.23662c-8.50389-33.1035,41.43157-45.64646,49.86515-12.83593l47.32609,184.035c4.42773,17.24218,29.16207,16.5039,32.71089-.80468l31.791-154.9706c6.81054-33.1074,57.51748-24.10741,50.11906,11.96288L360.32764,246.78924c-3.72265,18.10936,23.66793,24.63084,28.05659,6.21679L413.185,148.85962C421.1498,115.512,471.14,127.79713,463.27083,160.78149Z"],
"handshake": [640, 512, [], "f2b5", "M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z"],
"hdd": [576, 512, [], "f0a0", "M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z"],
"heart": [512, 512, [], "f004", "M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z"],
"hospital": [448, 512, [], "f0f8", "M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z"],
"hourglass": [384, 512, [], "f254", "M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z"],
"id-badge": [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"],
"id-card": [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"],
"image": [512, 512, [], "f03e", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z"],
"images": [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z"],
"keyboard": [576, 512, [], "f11c", "M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z"],
"kiss": [496, 512, [], "f596", "M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
"kiss-beam": [496, 512, [], "f597", "M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z"],
"kiss-wink-heart": [504, 512, [], "f598", "M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.1-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z"],
"laugh": [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
"laugh-beam": [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
"laugh-squint": [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-15.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
"laugh-wink": [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"],
"lemon": [512, 512, [], "f094", "M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z"],
"life-ring": [512, 512, [], "f1cd", "M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z"],
"lightbulb": [352, 512, [], "f0eb", "M176 80c-52.94 0-96 43.06-96 96 0 8.84 7.16 16 16 16s16-7.16 16-16c0-35.3 28.72-64 64-64 8.84 0 16-7.16 16-16s-7.16-16-16-16zM96.06 459.17c0 3.15.93 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84l.05-43.18H96.02l.04 43.18zM176 0C73.72 0 0 82.97 0 176c0 44.37 16.45 84.85 43.56 115.78 16.64 18.99 42.74 58.8 52.42 92.16v.06h48v-.12c-.01-4.77-.72-9.51-2.15-14.07-5.59-17.81-22.82-64.77-62.17-109.67-20.54-23.43-31.52-53.15-31.61-84.14-.2-73.64 59.67-128 127.95-128 70.58 0 128 57.42 128 128 0 30.97-11.24 60.85-31.65 84.14-39.11 44.61-56.42 91.47-62.1 109.46a47.507 47.507 0 0 0-2.22 14.3v.1h48v-.05c9.68-33.37 35.78-73.18 52.42-92.16C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0z"],
"list-alt": [512, 512, [], "f022", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z"],
"map": [576, 512, [], "f279", "M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z"],
"meh": [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z"],
"meh-blank": [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
"meh-rolling-eyes": [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"],
"minus-square": [448, 512, [], "f146", "M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"money-bill-alt": [640, 512, [], "f3d1", "M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z"],
"moon": [512, 512, [], "f186", "M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z"],
"newspaper": [576, 512, [], "f1ea", "M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z"],
"object-group": [512, 512, [], "f247", "M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z"],
"object-ungroup": [576, 512, [], "f248", "M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z"],
"paper-plane": [512, 512, [], "f1d8", "M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"],
"pause-circle": [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z"],
"play-circle": [512, 512, [], "f144", "M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z"],
"plus-square": [448, 512, [], "f0fe", "M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"],
"question-circle": [512, 512, [], "f059", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z"],
"registered": [512, 512, [], "f25d", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z"],
"sad-cry": [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z"],
"sad-tear": [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z"],
"save": [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z"],
"share-square": [576, 512, [], "f14d", "M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z"],
"smile": [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z"],
"smile-beam": [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z"],
"smile-wink": [496, 512, [], "f4da", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z"],
"snowflake": [448, 512, [], "f2dc", "M440.1 355.2l-39.2-23 34.1-9.3c8.4-2.3 13.4-11.1 11.1-19.6l-4.1-15.5c-2.2-8.5-10.9-13.6-19.3-11.3L343 298.2 271.2 256l71.9-42.2 79.7 21.7c8.4 2.3 17-2.8 19.3-11.3l4.1-15.5c2.2-8.5-2.7-17.3-11.1-19.6l-34.1-9.3 39.2-23c7.5-4.4 10.1-14.2 5.8-21.9l-7.9-13.9c-4.3-7.7-14-10.3-21.5-5.9l-39.2 23 9.1-34.7c2.2-8.5-2.7-17.3-11.1-19.6l-15.2-4.1c-8.4-2.3-17 2.8-19.3 11.3l-21.3 81-71.9 42.2v-84.5L306 70.4c6.1-6.2 6.1-16.4 0-22.6l-11.1-11.3c-6.1-6.2-16.1-6.2-22.2 0l-24.9 25.4V16c0-8.8-7-16-15.7-16h-15.7c-8.7 0-15.7 7.2-15.7 16v46.1l-24.9-25.4c-6.1-6.2-16.1-6.2-22.2 0L142.1 48c-6.1 6.2-6.1 16.4 0 22.6l58.3 59.3v84.5l-71.9-42.2-21.3-81c-2.2-8.5-10.9-13.6-19.3-11.3L72.7 84c-8.4 2.3-13.4 11.1-11.1 19.6l9.1 34.7-39.2-23c-7.5-4.4-17.1-1.8-21.5 5.9l-7.9 13.9c-4.3 7.7-1.8 17.4 5.8 21.9l39.2 23-34.1 9.1c-8.4 2.3-13.4 11.1-11.1 19.6L6 224.2c2.2 8.5 10.9 13.6 19.3 11.3l79.7-21.7 71.9 42.2-71.9 42.2-79.7-21.7c-8.4-2.3-17 2.8-19.3 11.3l-4.1 15.5c-2.2 8.5 2.7 17.3 11.1 19.6l34.1 9.3-39.2 23c-7.5 4.4-10.1 14.2-5.8 21.9L10 391c4.3 7.7 14 10.3 21.5 5.9l39.2-23-9.1 34.7c-2.2 8.5 2.7 17.3 11.1 19.6l15.2 4.1c8.4 2.3 17-2.8 19.3-11.3l21.3-81 71.9-42.2v84.5l-58.3 59.3c-6.1 6.2-6.1 16.4 0 22.6l11.1 11.3c6.1 6.2 16.1 6.2 22.2 0l24.9-25.4V496c0 8.8 7 16 15.7 16h15.7c8.7 0 15.7-7.2 15.7-16v-46.1l24.9 25.4c6.1 6.2 16.1 6.2 22.2 0l11.1-11.3c6.1-6.2 6.1-16.4 0-22.6l-58.3-59.3v-84.5l71.9 42.2 21.3 81c2.2 8.5 10.9 13.6 19.3 11.3L375 428c8.4-2.3 13.4-11.1 11.1-19.6l-9.1-34.7 39.2 23c7.5 4.4 17.1 1.8 21.5-5.9l7.9-13.9c4.6-7.5 2.1-17.3-5.5-21.7z"],
"square": [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z"],
"star": [576, 512, [], "f005", "M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"],
"star-half": [576, 512, [], "f089", "M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z"],
"sticky-note": [448, 512, [], "f249", "M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z"],
"stop-circle": [512, 512, [], "f28d", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z"],
"sun": [512, 512, [], "f185", "M494.2 221.9l-59.8-40.5 13.7-71c2.6-13.2-1.6-26.8-11.1-36.4-9.6-9.5-23.2-13.7-36.2-11.1l-70.9 13.7-40.4-59.9c-15.1-22.3-51.9-22.3-67 0l-40.4 59.9-70.8-13.7C98 60.4 84.5 64.5 75 74.1c-9.5 9.6-13.7 23.1-11.1 36.3l13.7 71-59.8 40.5C6.6 229.5 0 242 0 255.5s6.7 26 17.8 33.5l59.8 40.5-13.7 71c-2.6 13.2 1.6 26.8 11.1 36.3 9.5 9.5 22.9 13.7 36.3 11.1l70.8-13.7 40.4 59.9C230 505.3 242.6 512 256 512s26-6.7 33.5-17.8l40.4-59.9 70.9 13.7c13.4 2.7 26.8-1.6 36.3-11.1 9.5-9.5 13.6-23.1 11.1-36.3l-13.7-71 59.8-40.5c11.1-7.5 17.8-20.1 17.8-33.5-.1-13.6-6.7-26.1-17.9-33.7zm-112.9 85.6l17.6 91.2-91-17.6L256 458l-51.9-77-90.9 17.6 17.6-91.2-76.8-52 76.8-52-17.6-91.2 91 17.6L256 53l51.9 76.9 91-17.6-17.6 91.1 76.8 52-76.8 52.1zM256 152c-57.3 0-104 46.7-104 104s46.7 104 104 104 104-46.7 104-104-46.7-104-104-104zm0 160c-30.9 0-56-25.1-56-56s25.1-56 56-56 56 25.1 56 56-25.1 56-56 56z"],
"surprise": [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"],
"thumbs-down": [512, 512, [], "f165", "M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z"],
"thumbs-up": [512, 512, [], "f164", "M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"],
"times-circle": [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"],
"tired": [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z"],
"trash-alt": [448, 512, [], "f2ed", "M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z"],
"user": [448, 512, [], "f007", "M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z"],
"user-circle": [496, 512, [], "f2bd", "M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z"],
"window-close": [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z"],
"window-maximize": [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z"],
"window-minimize": [512, 512, [], "f2d1", "M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z"],
"window-restore": [512, 512, [], "f2d2", "M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z"]
};
bunker(function () {
defineIcons('far', icons);
});
}());
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,143 +0,0 @@
/*
* Lazy Load - jQuery plugin for lazy loading images
*
* Copyright (c) 2007-2011 Mika Tuupola
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Project home:
* http://www.appelsiini.net/projects/lazyload
*
* Version: 1.6.0-dev
*
*/
(function($) {
$.fn.lazyload = function(options) {
var settings = {
threshold : 0,
failurelimit : 0,
event : "scroll",
effect : "show",
container : window
};
if(options) {
$.extend(settings, options);
}
/* Fire one scroll event per scroll. Not one scroll event per image. */
var elements = this;
if ("scroll" == settings.event) {
$(settings.container).bind("scroll", function(event) {
var counter = 0;
elements.each(function() {
if ($.abovethetop(this, settings) ||
$.leftofbegin(this, settings)) {
/* Nothing. */
} else if (!$.belowthefold(this, settings) &&
!$.rightoffold(this, settings)) {
$(this).trigger("appear");
} else {
if (counter++ > settings.failurelimit) {
return false;
}
}
});
/* Remove image from array so it is not looped next time. */
var temp = $.grep(elements, function(element) {
return !element.loaded;
});
elements = $(temp);
});
}
this.each(function() {
var self = this;
self.loaded = false;
/* When appear is triggered load original image. */
$(self).one("appear", function() {
if (!this.loaded) {
$("<img />")
.bind("load", function() {
$(self)
.hide()
.attr("src", $(self).data("original"))
[settings.effect](settings.effectspeed);
self.loaded = true;
})
.attr("src", $(self).data("original"));
};
});
/* When wanted event is triggered load original image */
/* by triggering appear. */
if ("scroll" != settings.event) {
$(self).bind(settings.event, function(event) {
if (!self.loaded) {
$(self).trigger("appear");
}
});
}
});
/* Force initial check if images should appear. */
$(settings.container).trigger(settings.event);
return this;
};
/* Convenience methods in jQuery namespace. */
/* Use as $.belowthefold(element, {threshold : 100, container : window}) */
$.belowthefold = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).height() + $(window).scrollTop();
} else {
var fold = $(settings.container).offset().top + $(settings.container).height();
}
return fold <= $(element).offset().top - settings.threshold;
};
$.rightoffold = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).width() + $(window).scrollLeft();
} else {
var fold = $(settings.container).offset().left + $(settings.container).width();
}
return fold <= $(element).offset().left - settings.threshold;
};
$.abovethetop = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).scrollTop();
} else {
var fold = $(settings.container).offset().top;
}
return fold >= $(element).offset().top + settings.threshold + $(element).height();
};
$.leftofbegin = function(element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).scrollLeft();
} else {
var fold = $(settings.container).offset().left;
}
return fold >= $(element).offset().left + settings.threshold + $(element).width();
};
/* Custom selectors for your convenience. */
/* Use as $("img:below-the-fold").something() */
$.extend($.expr[':'], {
"below-the-fold" : "$.belowthefold(a, {threshold : 0, container: window})",
"above-the-fold" : "!$.belowthefold(a, {threshold : 0, container: window})",
"right-of-fold" : "$.rightoffold(a, {threshold : 0, container: window})",
"left-of-fold" : "!$.rightoffold(a, {threshold : 0, container: window})"
});
})(jQuery);
File diff suppressed because one or more lines are too long