From 88868cc736f3d27441aea027af11a64ef8ad22ca Mon Sep 17 00:00:00 2001 From: Banana Date: Wed, 30 Dec 2020 11:44:10 +0100 Subject: [PATCH] inital commit. Creating own repo to unclutter things. --- .gitignore | 6 + README | 43 + README.md | 3 - TODO | 15 + VERSION | 9 + documentation/bibliotheca.sql | 384 ++++ documentation/setup/bibliotheca.sql | 325 +++ documentation/setup/install.txt | 1 + documentation/usermanagement.txt | 21 + sources/imdb.class.php.txt | 1758 ++++++++++++++++ sources/moveinfos.txt | 1 + sources/uikit-3.5.3.zip | Bin 0 -> 364211 bytes sources/version-names.txt | 40 + webclient/api.php | 229 +++ webclient/config/.gitignore | 1 + webclient/config/database.php.default | 24 + webclient/config/path.php.default | 23 + webclient/config/system.php.default | 61 + webclient/index.php | 92 + webclient/lib/doomguy.class.php | 475 +++++ webclient/lib/gorenest.class.php | 106 + webclient/lib/imdbwebparser.class.php | 1808 +++++++++++++++++ .../lib/managecollectionfields.class.php | 260 +++ webclient/lib/managecollections.class.php | 489 +++++ webclient/lib/manageentry.class.php | 689 +++++++ webclient/lib/mancubus.class.php | 626 ++++++ webclient/lib/possessed.class.php | 377 ++++ webclient/lib/spectre.class.php | 108 + webclient/lib/summoner.class.php | 685 +++++++ webclient/lib/tentacle.class.php | 88 + webclient/lib/trite.class.php | 190 ++ webclient/storage/.gitignore | 2 + webclient/systemout/.gitignore | 2 + webclient/view/default/auth/auth.html | 31 + webclient/view/default/auth/auth.php | 50 + .../view/default/collections/collections.html | 55 + .../view/default/collections/collections.php | 92 + .../view/default/dashboard/dashboard.html | 54 + .../view/default/dashboard/dashboard.php | 34 + webclient/view/default/entry/entry.html | 55 + webclient/view/default/entry/entry.php | 63 + webclient/view/default/entry/field-date.html | 4 + .../default/entry/field-lookupmultiple.html | 8 + .../view/default/entry/field-selection.html | 4 + .../view/default/entry/field-text-title.html | 1 + webclient/view/default/entry/field-text.html | 1 + .../entry/field-text3-description.html | 1 + webclient/view/default/entry/field-text3.html | 1 + .../default/entry/field-textarea-content.html | 1 + .../view/default/entry/field-textarea.html | 1 + .../view/default/entry/field-unknown.html | 1 + .../entry/field-upload-coverimage.html | 6 + .../view/default/entry/field-upload.html | 3 + .../field-upload_multiple-attachment.html | 9 + .../default/entry/field-upload_multiple.html | 8 + webclient/view/default/entry/field-year.html | 4 + webclient/view/default/main.php | 34 + .../managecollectionfields.html | 60 + .../managecollectionfields.php | 71 + .../managecolletions/managecolletions.html | 166 ++ .../managecolletions/managecolletions.php | 123 ++ .../manageentry/field-lookupmultiple.html | 49 + .../default/manageentry/field-selection.html | 13 + .../view/default/manageentry/field-text.html | 9 + .../view/default/manageentry/field-text3.html | 9 + .../default/manageentry/field-textarea.html | 9 + .../default/manageentry/field-unknown.html | 3 + .../default/manageentry/field-upload.html | 17 + .../manageentry/field-upload_multiple.html | 24 + .../view/default/manageentry/field-year.html | 10 + .../view/default/manageentry/manageentry.html | 74 + .../view/default/manageentry/manageentry.php | 143 ++ .../view/default/manageusers/manageusers.html | 125 ++ .../view/default/manageusers/manageusers.php | 111 + webclient/view/default/system/menu.php | 74 + webclient/view/default/system/message.php | 42 + webclient/view/default/system/pagination.html | 36 + .../view/default/system/pagination_after.php | 54 + .../view/default/system/pagination_before.php | 51 + webclient/view/default/tags/tags.html | 37 + webclient/view/default/tags/tags.php | 64 + webclient/view/default/tool/tool-imdbweb.html | 56 + webclient/view/default/tool/tool-imdbweb.php | 153 ++ webclient/view/default/tool/tool.html | 12 + webclient/view/default/tool/tool.php | 83 + webclient/view/default/ui/css/style.css | 13 + webclient/view/default/ui/css/uikit.min.css | 1 + webclient/view/default/ui/js/suggest-tag.js | 137 ++ .../view/default/ui/js/uikit-icons.min.js | 3 + webclient/view/default/ui/js/uikit.min.js | 3 + 90 files changed, 11294 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 README delete mode 100644 README.md create mode 100644 TODO create mode 100644 VERSION create mode 100644 documentation/bibliotheca.sql create mode 100644 documentation/setup/bibliotheca.sql create mode 100644 documentation/setup/install.txt create mode 100644 documentation/usermanagement.txt create mode 100644 sources/imdb.class.php.txt create mode 100644 sources/moveinfos.txt create mode 100644 sources/uikit-3.5.3.zip create mode 100644 sources/version-names.txt create mode 100644 webclient/api.php create mode 100644 webclient/config/.gitignore create mode 100644 webclient/config/database.php.default create mode 100644 webclient/config/path.php.default create mode 100644 webclient/config/system.php.default create mode 100644 webclient/index.php create mode 100644 webclient/lib/doomguy.class.php create mode 100644 webclient/lib/gorenest.class.php create mode 100644 webclient/lib/imdbwebparser.class.php create mode 100644 webclient/lib/managecollectionfields.class.php create mode 100644 webclient/lib/managecollections.class.php create mode 100644 webclient/lib/manageentry.class.php create mode 100644 webclient/lib/mancubus.class.php create mode 100644 webclient/lib/possessed.class.php create mode 100644 webclient/lib/spectre.class.php create mode 100644 webclient/lib/summoner.class.php create mode 100644 webclient/lib/tentacle.class.php create mode 100644 webclient/lib/trite.class.php create mode 100644 webclient/storage/.gitignore create mode 100644 webclient/systemout/.gitignore create mode 100644 webclient/view/default/auth/auth.html create mode 100644 webclient/view/default/auth/auth.php create mode 100644 webclient/view/default/collections/collections.html create mode 100644 webclient/view/default/collections/collections.php create mode 100644 webclient/view/default/dashboard/dashboard.html create mode 100644 webclient/view/default/dashboard/dashboard.php create mode 100644 webclient/view/default/entry/entry.html create mode 100644 webclient/view/default/entry/entry.php create mode 100644 webclient/view/default/entry/field-date.html create mode 100644 webclient/view/default/entry/field-lookupmultiple.html create mode 100644 webclient/view/default/entry/field-selection.html create mode 100644 webclient/view/default/entry/field-text-title.html create mode 100644 webclient/view/default/entry/field-text.html create mode 100644 webclient/view/default/entry/field-text3-description.html create mode 100644 webclient/view/default/entry/field-text3.html create mode 100644 webclient/view/default/entry/field-textarea-content.html create mode 100644 webclient/view/default/entry/field-textarea.html create mode 100644 webclient/view/default/entry/field-unknown.html create mode 100644 webclient/view/default/entry/field-upload-coverimage.html create mode 100644 webclient/view/default/entry/field-upload.html create mode 100644 webclient/view/default/entry/field-upload_multiple-attachment.html create mode 100644 webclient/view/default/entry/field-upload_multiple.html create mode 100644 webclient/view/default/entry/field-year.html create mode 100644 webclient/view/default/main.php create mode 100644 webclient/view/default/managecollectionfields/managecollectionfields.html create mode 100644 webclient/view/default/managecollectionfields/managecollectionfields.php create mode 100644 webclient/view/default/managecolletions/managecolletions.html create mode 100644 webclient/view/default/managecolletions/managecolletions.php create mode 100644 webclient/view/default/manageentry/field-lookupmultiple.html create mode 100644 webclient/view/default/manageentry/field-selection.html create mode 100644 webclient/view/default/manageentry/field-text.html create mode 100644 webclient/view/default/manageentry/field-text3.html create mode 100644 webclient/view/default/manageentry/field-textarea.html create mode 100644 webclient/view/default/manageentry/field-unknown.html create mode 100644 webclient/view/default/manageentry/field-upload.html create mode 100644 webclient/view/default/manageentry/field-upload_multiple.html create mode 100644 webclient/view/default/manageentry/field-year.html create mode 100644 webclient/view/default/manageentry/manageentry.html create mode 100644 webclient/view/default/manageentry/manageentry.php create mode 100644 webclient/view/default/manageusers/manageusers.html create mode 100644 webclient/view/default/manageusers/manageusers.php create mode 100644 webclient/view/default/system/menu.php create mode 100644 webclient/view/default/system/message.php create mode 100644 webclient/view/default/system/pagination.html create mode 100644 webclient/view/default/system/pagination_after.php create mode 100644 webclient/view/default/system/pagination_before.php create mode 100644 webclient/view/default/tags/tags.html create mode 100644 webclient/view/default/tags/tags.php create mode 100644 webclient/view/default/tool/tool-imdbweb.html create mode 100644 webclient/view/default/tool/tool-imdbweb.php create mode 100644 webclient/view/default/tool/tool.html create mode 100644 webclient/view/default/tool/tool.php create mode 100644 webclient/view/default/ui/css/style.css create mode 100644 webclient/view/default/ui/css/uikit.min.css create mode 100644 webclient/view/default/ui/js/suggest-tag.js create mode 100644 webclient/view/default/ui/js/uikit-icons.min.js create mode 100644 webclient/view/default/ui/js/uikit.min.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b6974b2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idea/ +.buildpath +.project +.settings/ +*.iml +*.log diff --git a/README b/README new file mode 100644 index 0000000..523821a --- /dev/null +++ b/README @@ -0,0 +1,43 @@ +# Bibliotheca + + +## Usage + +## Requirements + +* A Webserver (tested on Apache 2.4) +* PHP 7+ +* MySQL 8+ + +## Technical information +This is build and tested on a linux based OS. Windows support not yet. + +### API +api.php?QUERY_PARAMETERS + +collection=NUMBER + ID of a collection + +p=list + Get the latest 10 for given collection + +p=add&collection=NUMBER&authKey=API_AUTH_TOKEN + POST call to add a new entry to given collection. + See p=addInfo for the details which info is needed in the add call + +p=addInfo&collection=NUMBER + Describes how the data in the POST add call should be formated. + The JSON info in the data field, tells which fields are available and in which format the value + is accepted. + Expected is a curl call with an array as payload + + +The result is json +{ + "message": "Message as string", + "status": INTEGER based on HTTP_STATUS CODE + "data": {} +} + +## third party +https://github.com/FabianBeiner/PHP-IMDB-Grabber with some modifications diff --git a/README.md b/README.md deleted file mode 100644 index ef25417..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# bibliotheca-php - -Collection management for your movies, music or books \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..f9b3001 --- /dev/null +++ b/TODO @@ -0,0 +1,15 @@ +User management: Adding secondary groups +User management: Rights for a user and group. Used in user and group selections. +Field management: Web interface +Collection fields: final remove from entry table +Management which fields should be displayed in dashboard +Use try/catch for mysql stuff +Better error handling and display while adding / update and delete +better debug. When debug true, write into log file. -> see if(DEBUG) +Mass edit of entries +delete of a collection +jdoc formatierung +sort by filter for collection display +UI +- responsive and breakpoints +Advanced search. More options and searchable fields diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..592ef28 --- /dev/null +++ b/VERSION @@ -0,0 +1,9 @@ +0.2 - Vortex Rikers (tba) + * Games and movie collection as static files with Hugo (https://gohugo.io) + * Tool: Datacrow import into Bibilotheca database +0.1 - Castle - (2019/09/31) + * First usable version + * Static collection with hugo (https://gohugo.io) + * Static collection design based on CSS/JS Uikit (https://getuikit.com) + * Tool: Datacrow (http://www.datacrow.net/) export can be imported into static files for hugo + * Tool: Datacrow import can create static md files based on a movie collection diff --git a/documentation/bibliotheca.sql b/documentation/bibliotheca.sql new file mode 100644 index 0000000..a6ff029 --- /dev/null +++ b/documentation/bibliotheca.sql @@ -0,0 +1,384 @@ +-- phpMyAdmin SQL Dump +-- version 4.9.6 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1 +-- Generation Time: Dec 30, 2020 at 10:41 AM +-- Server version: 8.0.22 +-- PHP Version: 7.4.13 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET AUTOCOMMIT = 0; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `bibliotheca` +-- +CREATE DATABASE IF NOT EXISTS `bibliotheca` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; +USE `bibliotheca`; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_collection` +-- + +DROP TABLE IF EXISTS `bib_collection`; +CREATE TABLE `bib_collection` ( + `id` int NOT NULL, + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `defaultSearchField` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int DEFAULT NULL, + `owner` int NOT NULL, + `group` int NOT NULL, + `rights` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_group` +-- + +DROP TABLE IF EXISTS `bib_group`; +CREATE TABLE `bib_group` ( + `id` int NOT NULL, + `name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `protected` tinyint(1) NOT NULL DEFAULT '0', + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int DEFAULT NULL, + `owner` int NOT NULL, + `group` int NOT NULL, + `rights` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Dumping data for table `bib_group` +-- + +INSERT INTO `bib_group` (`id`, `name`, `description`, `protected`, `created`, `modificationuser`, `owner`, `group`, `rights`) VALUES +(1, 'Administration', 'Admin group', 1, '2020-05-31 21:25:29', 0, 1, 1, 'rwx------'), +(2, 'Users', 'Default user group', 1, '2020-05-31 21:25:29', 0, 1, 1, 'rwxr--r--'), +(3, 'Anonymous', 'Anonymous users', 1, '2020-05-31 21:25:29', 0, 1, 1, 'rwxr--r--'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_menu` +-- + +DROP TABLE IF EXISTS `bib_menu`; +CREATE TABLE `bib_menu` ( + `id` int UNSIGNED NOT NULL, + `text` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `action` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `icon` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `owner` int NOT NULL DEFAULT '0', + `group` int NOT NULL DEFAULT '0', + `rights` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `position` int NOT NULL DEFAULT '0', + `category` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Dumping data for table `bib_menu` +-- + +INSERT INTO `bib_menu` (`id`, `text`, `action`, `icon`, `owner`, `group`, `rights`, `position`, `category`) VALUES +(1, 'Dashboard', '', 'home', 1, 1, 'rw-r--r--', 0, 'show'), +(2, 'Collections', 'collections', 'database', 1, 1, 'rw-r--r--', 1, 'show'), +(3, 'Tags', 'tags', 'tag', 1, 1, 'rw-r--r--', 2, 'show'), +(4, 'Add', 'manageentry', 'plus-circle', 1, 2, 'rw-rw----', 0, 'manage'), +(6, 'Tags', 'managetags', 'tag', 1, 2, 'rw-rw----', 2, 'manage'), +(7, 'Collections', 'managecolletions', 'database', 1, 2, 'rw-rw----', 3, 'manage'), +(8, 'Users', 'manageusers', 'users', 1, 1, 'rw-------', 4, 'manage'), +(9, 'Login', 'auth', '', 1, 1, 'rw-r--r--', 0, ''), +(10, 'Collection fields', 'managecollectionfields', '', 1, 1, 'rw-------', 0, ''), +(11, 'Entry', 'entry', '', 1, 1, 'rw-r--r--', 0, ''), +(12, 'Search', 'search', '', 1, 1, 'rw-r--r--', 0, ''), +(13, 'Edit', 'collections', 'pencil', 1, 2, 'rw-rw----', 1, 'manage'), +(14, 'Tool', 'tool', '', 1, 1, 'rw-------', 0, ''); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_sys_fields` +-- + +DROP TABLE IF EXISTS `bib_sys_fields`; +CREATE TABLE `bib_sys_fields` ( + `id` int NOT NULL, + `identifier` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `displayname` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `searchtype` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, + `createstring` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, + `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci, + `apiinfo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int DEFAULT NULL, + `owner` int NOT NULL, + `group` int NOT NULL, + `rights` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Dumping data for table `bib_sys_fields` +-- + +INSERT INTO `bib_sys_fields` (`id`, `identifier`, `displayname`, `type`, `searchtype`, `createstring`, `value`, `apiinfo`, `created`, `modificationuser`, `owner`, `group`, `rights`) VALUES +(1, 'title', 'Title', 'text', 'text', '`title` varchar(128) NOT NULL', NULL, 'string 128', '2019-09-01 18:26:33', 0, 1, 1, 'rw-r--r--'), +(2, 'description', 'Description', 'text3', 'text', '`description` varchar(255) NULL DEFAULT NULL', NULL, 'string 64', '2019-09-01 18:28:35', 0, 1, 1, 'rw-r--r--'), +(3, 'content', 'Main content', 'textarea', 'text', 'content` text NULL DEFAULT NULL,', NULL, 'mysql text', '2019-09-01 18:28:35', 0, 1, 1, 'rw-r--r--'), +(4, 'releasedate', 'Release date', 'date', 'text', '`releasedate` timestamp NULL DEFAULT NULL', NULL, 'mysql timestamp', '2019-09-01 19:01:39', 0, 1, 1, 'rw-r--r--'), +(5, 'tag', 'Tag', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2019-09-01 19:11:18', 0, 1, 1, 'rw-r--r--'), +(6, 'category', 'Category', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2019-09-01 19:11:18', 0, 1, 1, 'rw-r--r--'), +(7, 'publisher', 'Publisher', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2019-09-01 19:17:51', 0, 1, 1, 'rw-r--r--'), +(8, 'developer', 'Developer', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2019-09-01 19:17:51', 0, 1, 1, 'rw-r--r--'), +(9, 'platform', 'Platform', 'selection', 'tag', '`platform` varchar(32) NULL DEFAULT NULL', 'PC,Xbox,Playstation,Nintendo,Nintendo Switch', 'One of PC,Xbox,Playstation,Nintendo,Nintendo Switch', '2019-09-01 19:18:33', 0, 1, 1, 'rw-r--r--'), +(10, 'storage', 'Storage', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2019-09-01 19:18:33', 0, 1, 1, 'rw-r--r--'), +(13, 'rating', 'Rating', 'selection', 'tag', '`rating` varchar(16) NULL DEFAULT NULL', '0/10,2/10,3/10,4/10,5/10,6/10,7/10,8/10,9/10,10/10', 'One of 0/10,2/10,3/10,4/10,5/10,6/10,7/10,8/10,9/10,10/10', '2019-09-01 19:25:35', 0, 1, 1, 'rw-r--r--'), +(14, 'year', 'Year', 'year', 'tag', '`year` year NULL DEFAULT NULL', NULL, 'mysql year', '2019-09-01 19:30:11', 0, 1, 1, 'rw-r--r--'), +(15, 'coverimage', 'Cover image', 'upload', NULL, NULL, NULL, 'One file in $_FILES[uploads] of post', '2019-09-01 19:48:44', 0, 1, 1, 'rw-r--r--'), +(16, 'attachment', 'Attachments', 'upload_multiple', NULL, NULL, NULL, 'Multiple in $_FILES[uploads] of post', '2019-09-01 19:48:44', 0, 1, 1, 'rw-r--r--'), +(17, 'os', 'Operating system and version', 'selection', 'tag', '`os` varchar(32) NULL DEFAULT NULL', 'Windows 10,Windows 95, Windows 99,Windows XP, Windows ME, Windows 2000,Windows Vista,Windows 8', 'One of Windows 10,Windows 95, Windows 99,Windows XP, Windows ME, Windows 2000,Windows Vista,Windows 8', '2019-09-01 19:55:13', 0, 1, 1, 'rw-r--r--'), +(18, 'actors', 'Actors', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2020-07-26 07:12:48', NULL, 1, 1, 'rw-r--r--'), +(19, 'countries', 'Countries', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2020-07-26 07:16:08', NULL, 1, 1, 'rw-r--r--'), +(20, 'directors', 'Directors', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2020-07-26 07:17:59', NULL, 1, 1, 'rw-r--r--'), +(21, 'genres', 'Genres', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2020-07-26 07:18:55', NULL, 1, 1, 'rw-r--r--'), +(22, 'languages', 'Languages', 'lookupmultiple', 'tag', NULL, NULL, 'string 64', '2020-07-26 07:20:45', NULL, 1, 1, 'rw-r--r--'), +(23, 'runtime', 'Runtime', 'text', 'text', '`runtime` varchar(128) NULL DEFAULT NULL', NULL, 'string 128', '2020-07-26 07:22:24', NULL, 1, 1, 'rw-r--r--'), +(24, 'imdbrating', 'IMDB Rating', 'text', 'text', '`imdbrating` varchar(128) NULL DEFAULT NULL', NULL, 'string 128', '2020-12-27 10:00:33', 0, 1, 1, 'rw-r--r--'), +(25, 'viewcount', 'View counter', 'text', 'text', '`viewcount` varchar(128) NULL DEFAULT NULL', NULL, 'string 128', '2020-12-27 10:41:10', 0, 1, 1, 'rw-r--r--'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_tool` +-- + +DROP TABLE IF EXISTS `bib_tool`; +CREATE TABLE `bib_tool` ( + `id` int NOT NULL, + `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `description` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `action` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `target` varchar(16) NOT NULL, + `owner` int NOT NULL, + `group` int NOT NULL, + `rights` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Dumping data for table `bib_tool` +-- + +INSERT INTO `bib_tool` (`id`, `name`, `description`, `action`, `target`, `owner`, `group`, `rights`) VALUES +(1, 'IMDB web', 'Web parser', 'imdbweb', '_self', 1, 1, 'rw-r--r--'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_tool2collection` +-- + +DROP TABLE IF EXISTS `bib_tool2collection`; +CREATE TABLE `bib_tool2collection` ( + `fk_tool_id` int NOT NULL, + `fk_collection_id` int NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_user` +-- + +DROP TABLE IF EXISTS `bib_user`; +CREATE TABLE `bib_user` ( + `id` int NOT NULL, + `login` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `active` int NOT NULL DEFAULT '1', + `apiToken` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, + `apiTokenValidDate` timestamp NULL DEFAULT NULL, + `baseGroupId` int NOT NULL DEFAULT '0', + `protected` tinyint(1) NOT NULL DEFAULT '0', + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int DEFAULT NULL, + `owner` int NOT NULL, + `group` int NOT NULL, + `rights` char(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Dumping data for table `bib_user` +-- + +INSERT INTO `bib_user` (`id`, `login`, `password`, `name`, `active`, `apiToken`, `apiTokenValidDate`, `baseGroupId`, `protected`, `created`, `modificationuser`, `owner`, `group`, `rights`) VALUES +(1, 'admin', '$2y$10$BdLVGaeiQc12smmNKf4rk.2Dj6ockECsSlpx1eO7RWN3RbX2gYrai', 'Administrator', 1, NULL, NULL, 1, 1, '2019-09-01 17:22:02', 0, 1, 1, 'rwxr-----'), +(2, 'anonymoose', '', 'Anonymoose', 1, NULL, NULL, 3, 1, '2020-05-03 17:22:02', 0, 2, 3, 'rwxr--r--'), +(4, 'banana', '$2y$10$9NtLpBt97bCQ22Qdz3HvjOyTXIlGBXPMaHOQytF64DnoxQJZG3xe.', 'Banana', 1, 'c435168733c58b82d455d776990ff425', '2020-11-23 14:43:55', 1, 0, '2020-05-30 18:23:01', 0, 4, 2, 'rwxr--r--'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_user2group` +-- + +DROP TABLE IF EXISTS `bib_user2group`; +CREATE TABLE `bib_user2group` ( + `fk_user_id` int NOT NULL DEFAULT '0', + `fk_group_id` int NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Dumping data for table `bib_user2group` +-- + +INSERT INTO `bib_user2group` (`fk_user_id`, `fk_group_id`) VALUES +(1, 1), +(2, 3), +(4, 1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_userSession` +-- + +DROP TABLE IF EXISTS `bib_userSession`; +CREATE TABLE `bib_userSession` ( + `fk_user_id` int NOT NULL, + `loginTime` datetime NOT NULL, + `area` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '', + `token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `salt` char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Dumping data for table `bib_userSession` +-- + +INSERT INTO `bib_userSession` (`fk_user_id`, `loginTime`, `area`, `token`, `salt`) VALUES +(4, '2020-12-30 10:49:31', 'bibliotheca-session', '81e5e56bfad6200d0f5a4812b9fbd976e68359fb', '03c4f30d'); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `bib_collection` +-- +ALTER TABLE `bib_collection` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_group` +-- +ALTER TABLE `bib_group` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_menu` +-- +ALTER TABLE `bib_menu` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_sys_fields` +-- +ALTER TABLE `bib_sys_fields` + ADD PRIMARY KEY (`id`) USING BTREE; + +-- +-- Indexes for table `bib_tool` +-- +ALTER TABLE `bib_tool` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `action` (`action`); + +-- +-- Indexes for table `bib_tool2collection` +-- +ALTER TABLE `bib_tool2collection` + ADD UNIQUE KEY `fk_collection_id` (`fk_collection_id`,`fk_tool_id`); + +-- +-- Indexes for table `bib_user` +-- +ALTER TABLE `bib_user` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `login` (`login`); + +-- +-- Indexes for table `bib_user2group` +-- +ALTER TABLE `bib_user2group` + ADD PRIMARY KEY (`fk_user_id`,`fk_group_id`); + +-- +-- Indexes for table `bib_userSession` +-- +ALTER TABLE `bib_userSession` + ADD PRIMARY KEY (`area`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `bib_collection` +-- +ALTER TABLE `bib_collection` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `bib_group` +-- +ALTER TABLE `bib_group` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; + +-- +-- AUTO_INCREMENT for table `bib_menu` +-- +ALTER TABLE `bib_menu` + MODIFY `id` int UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15; + +-- +-- AUTO_INCREMENT for table `bib_sys_fields` +-- +ALTER TABLE `bib_sys_fields` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=26; + +-- +-- AUTO_INCREMENT for table `bib_tool` +-- +ALTER TABLE `bib_tool` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; + +-- +-- AUTO_INCREMENT for table `bib_user` +-- +ALTER TABLE `bib_user` + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/documentation/setup/bibliotheca.sql b/documentation/setup/bibliotheca.sql new file mode 100644 index 0000000..4567e83 --- /dev/null +++ b/documentation/setup/bibliotheca.sql @@ -0,0 +1,325 @@ +-- phpMyAdmin SQL Dump +-- version 4.8.5 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1 +-- Generation Time: Sep 01, 2019 at 08:27 PM +-- Server version: 5.7.26-log +-- PHP Version: 7.3.8 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET AUTOCOMMIT = 0; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `bibliotheca` +-- +CREATE DATABASE IF NOT EXISTS `bibliotheca` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; +USE `bibliotheca`; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_collection` +-- + +DROP TABLE IF EXISTS `bib_collection`; +CREATE TABLE `bib_collection` ( + `id` int(10) NOT NULL, + `name` varchar(64) COLLATE utf8mb4_bin NOT NULL, + `description` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int(11) NOT NULL, + `owner` int(10) NOT NULL, + `group` int(10) NOT NULL, + `rights` char(9) COLLATE utf8mb4_bin NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- +-- Dumping data for table `bib_collection` +-- + +INSERT INTO `bib_collection` (`id`, `name`, `description`, `created`, `modified`, `modificationuser`, `owner`, `group`, `rights`) VALUES +(1, 'Movies', 'Movie collection', '2019-09-01 17:26:23', NULL, 0, 2, 2, 'rwxrw-r--'), +(2, 'Games', 'Game collection', '2019-09-01 17:26:56', NULL, 0, 2, 2, 'rwxrw-r--'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_collection_entry_1` +-- + +DROP TABLE IF EXISTS `bib_collection_entry_1`; +CREATE TABLE `bib_collection_entry_1` ( + `id` int(10) NOT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int(10) NOT NULL, + `title` varchar(128) COLLATE utf8mb4_bin NOT NULL, + `description` varchar(255) COLLATE utf8mb4_bin NOT NULL, + `content` text COLLATE utf8mb4_bin NOT NULL, + `releasedate` timestamp NULL DEFAULT NULL, + `year` year(4) DEFAULT NULL, + `image` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_collection_field_1` +-- + +DROP TABLE IF EXISTS `bib_collection_field_1`; +CREATE TABLE `bib_collection_field_1` ( + `id` int(11) NOT NULL, + `identifier` varchar(16) COLLATE utf8mb4_bin NOT NULL, + `displayname` varchar(128) COLLATE utf8mb4_bin NOT NULL, + `type` varchar(32) COLLATE utf8mb4_bin NOT NULL, + `position` int(10) DEFAULT NULL, + `searchable` tinyint(1) DEFAULT NULL, + `protected` tinyint(1) NOT NULL DEFAULT '0', + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int(10) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- +-- Dumping data for table `bib_collection_field_1` +-- + +INSERT INTO `bib_collection_field_1` (`id`, `identifier`, `displayname`, `type`, `position`, `searchable`, `protected`, `created`, `modified`, `modificationuser`) VALUES +(1, 'title', 'Title', 'varchar', NULL, NULL, 1, '2019-09-01 18:26:33', '2019-09-01 18:53:00', 2), +(2, 'description', 'Description', 'varchar', NULL, NULL, 1, '2019-09-01 18:28:35', '2019-09-01 18:53:04', 2), +(3, 'content', 'Main content', 'text', NULL, NULL, 1, '2019-09-01 18:28:35', '2019-09-01 18:53:07', 2), +(4, 'releasedate', 'Release date', 'date', NULL, NULL, 0, '2019-09-01 19:01:39', '2019-09-01 19:29:13', 2), +(5, 'tag', 'Tag', 'lookupmultiple', NULL, NULL, 0, '2019-09-01 19:11:18', '2019-09-01 19:28:42', 2), +(6, 'category', 'Category', 'lookupmultiple', NULL, NULL, 0, '2019-09-01 19:11:18', '2019-09-01 19:28:48', 2), +(7, 'publisher', 'Publisher', 'lookupmultiple', NULL, NULL, 0, '2019-09-01 19:17:51', '2019-09-01 19:20:31', 2), +(8, 'developer', 'Developer', 'lookupmultiple', NULL, NULL, 0, '2019-09-01 19:17:51', '2019-09-01 19:20:36', 2), +(9, 'platform', 'Platform', 'lookup', NULL, NULL, 0, '2019-09-01 19:18:33', '2019-09-01 19:20:44', 2), +(10, 'storage', 'Storage', 'lookup', NULL, NULL, 0, '2019-09-01 19:18:33', '2019-09-01 19:20:57', 2), +(13, 'rating', 'Rating', 'lookup', NULL, NULL, 0, '2019-09-01 19:25:35', '2019-09-01 19:25:35', 2), +(14, 'year', 'Year', 'year', NULL, NULL, 0, '2019-09-01 19:30:11', '2019-09-01 19:31:11', 2), +(15, 'coverimage', 'Cover image', 'image', NULL, NULL, 0, '2019-09-01 19:48:44', '2019-09-01 19:48:44', 2), +(16, 'attachment', 'Attachments', 'upload', NULL, NULL, 0, '2019-09-01 19:48:44', '2019-09-01 19:48:44', 2), +(17, 'os', 'Operating system and version', 'lookupmultiple', NULL, NULL, 0, '2019-09-01 19:55:13', '2019-09-01 19:55:13', 2); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_collection_lookup2entry_1` +-- + +DROP TABLE IF EXISTS `bib_collection_lookup2entry_1`; +CREATE TABLE `bib_collection_lookup2entry_1` ( + `lookup` int(10) NOT NULL, + `entry` int(10) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_collection_lookup_1` +-- + +DROP TABLE IF EXISTS `bib_collection_lookup_1`; +CREATE TABLE `bib_collection_lookup_1` ( + `id` int(10) NOT NULL, + `name` varchar(32) COLLATE utf8mb4_bin NOT NULL, + `position` int(10) NOT NULL DEFAULT '0', + `field` int(10) NOT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int(10) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- +-- Dumping data for table `bib_collection_lookup_1` +-- + +INSERT INTO `bib_collection_lookup_1` (`id`, `name`, `position`, `field`, `created`, `modified`, `modificationuser`) VALUES +(1, 'PC', 0, 9, '2019-09-01 19:53:27', '2019-09-01 19:53:27', 2), +(2, 'Nintendo Switch', 0, 9, '2019-09-01 19:54:21', '2019-09-01 19:54:21', 2), +(3, 'Windows 95', 0, 17, '2019-09-01 19:55:44', '2019-09-01 19:55:44', 2), +(4, 'Windows 98', 0, 17, '2019-09-01 19:56:00', '2019-09-01 19:56:00', 2), +(5, 'Windows ME', 0, 17, '2019-09-01 19:56:21', '2019-09-01 19:56:21', 2), +(6, 'Windows 2000', 0, 17, '2019-09-01 19:56:21', '2019-09-01 19:56:21', 2), +(7, 'Windows XP', 0, 17, '2019-09-01 19:56:44', '2019-09-01 19:56:44', 2), +(8, 'Windows Vista', 0, 17, '2019-09-01 19:56:44', '2019-09-01 19:56:44', 2), +(9, '1/10', 0, 13, '2019-09-01 19:58:23', '2019-09-01 19:58:23', 2), +(10, '2/10', 0, 13, '2019-09-01 19:58:23', '2019-09-01 19:58:23', 2), +(11, '3/10', 0, 13, '2019-09-01 19:58:40', '2019-09-01 19:58:40', 2), +(12, '4/10', 0, 13, '2019-09-01 19:58:40', '2019-09-01 19:58:40', 2), +(13, '5/10', 0, 13, '2019-09-01 19:58:56', '2019-09-01 19:58:56', 2), +(14, '6/10', 0, 13, '2019-09-01 19:58:56', '2019-09-01 19:58:56', 2); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_group` +-- + +DROP TABLE IF EXISTS `bib_group`; +CREATE TABLE `bib_group` ( + `id` int(10) NOT NULL, + `name` varchar(16) CHARACTER SET utf8mb4 NOT NULL DEFAULT '', + `describtion` varchar(255) CHARACTER SET utf8mb4 NOT NULL DEFAULT '', + `active` tinyint(1) NOT NULL DEFAULT '1', + `protected` tinyint(1) NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- +-- Dumping data for table `bib_group` +-- + +INSERT INTO `bib_group` (`id`, `name`, `describtion`, `active`, `protected`) VALUES +(1, 'Administration', 'Die Gruppe die alles darf.', 1, 1), +(2, 'Benutzergruppe', 'Standard Benutzergruppe', 1, 1), +(3, 'Gast', 'Die Gast Gruppe.', 1, 1), +(8, 'Collection', 'Group to access the collection management', 1, 1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_user` +-- + +DROP TABLE IF EXISTS `bib_user`; +CREATE TABLE `bib_user` ( + `id` int(10) NOT NULL, + `login` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL, + `password` varchar(40) CHARACTER SET utf8mb4 NOT NULL DEFAULT '', + `name` varchar(64) CHARACTER SET utf8mb4 NOT NULL DEFAULT '', + `active` int(10) NOT NULL DEFAULT '1', + `email` varchar(128) CHARACTER SET utf8mb4 NOT NULL DEFAULT '', + `baseGroupId` int(10) NOT NULL DEFAULT '0', + `protected` tinyint(1) NOT NULL DEFAULT '0', + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- +-- Dumping data for table `bib_user` +-- + +INSERT INTO `bib_user` (`id`, `login`, `password`, `name`, `active`, `email`, `baseGroupId`, `protected`, `created`) VALUES +(1, 'admin', 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', 'Banana', 1, 'mail@bananas-playground.net', 1, 1, '2019-09-01 17:22:02'), +(2, 'bibuser', '', 'Mr. Gast', 1, 'test@test.com', 2, 1, '2019-09-01 17:22:02'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `bib_user2group` +-- + +DROP TABLE IF EXISTS `bib_user2group`; +CREATE TABLE `bib_user2group` ( + `fk_user_id` int(10) NOT NULL DEFAULT '0', + `fk_group_id` int(10) NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +-- +-- Dumping data for table `bib_user2group` +-- + +INSERT INTO `bib_user2group` (`fk_user_id`, `fk_group_id`) VALUES +(1, 1), +(2, 2); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `bib_collection` +-- +ALTER TABLE `bib_collection` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_collection_entry_1` +-- +ALTER TABLE `bib_collection_entry_1` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_collection_field_1` +-- +ALTER TABLE `bib_collection_field_1` + ADD PRIMARY KEY (`id`) USING BTREE; + +-- +-- Indexes for table `bib_collection_lookup_1` +-- +ALTER TABLE `bib_collection_lookup_1` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_group` +-- +ALTER TABLE `bib_group` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_user` +-- +ALTER TABLE `bib_user` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `bib_user2group` +-- +ALTER TABLE `bib_user2group` + ADD PRIMARY KEY (`fk_user_id`,`fk_group_id`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `bib_collection` +-- +ALTER TABLE `bib_collection` + MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; + +-- +-- AUTO_INCREMENT for table `bib_collection_entry_1` +-- +ALTER TABLE `bib_collection_entry_1` + MODIFY `id` int(10) NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT for table `bib_collection_field_1` +-- +ALTER TABLE `bib_collection_field_1` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18; + +-- +-- AUTO_INCREMENT for table `bib_collection_lookup_1` +-- +ALTER TABLE `bib_collection_lookup_1` + MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15; + +-- +-- AUTO_INCREMENT for table `bib_group` +-- +ALTER TABLE `bib_group` + MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; + +-- +-- AUTO_INCREMENT for table `bib_user` +-- +ALTER TABLE `bib_user` + MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/documentation/setup/install.txt b/documentation/setup/install.txt new file mode 100644 index 0000000..2683cd0 --- /dev/null +++ b/documentation/setup/install.txt @@ -0,0 +1 @@ +Default admin user pw: test diff --git a/documentation/usermanagement.txt b/documentation/usermanagement.txt new file mode 100644 index 0000000..4ef2c89 --- /dev/null +++ b/documentation/usermanagement.txt @@ -0,0 +1,21 @@ +Curently there is only a user management. Groups or default users can not be changed. + +Default users are: + +admin +Should not be changed or removed. + +anonymoose +The guest user. Should not be changed or removed. + + +Default user groups are: + +Administration +Default admin user group. Should not be changed or removed. + +Users +Default user group. Should not be changed or removed. + +Anonymous +Guest user group. Should not be changed or removed. diff --git a/sources/imdb.class.php.txt b/sources/imdb.class.php.txt new file mode 100644 index 0000000..981349b --- /dev/null +++ b/sources/imdb.class.php.txt @@ -0,0 +1,1758 @@ + + * @license https://opensource.org/licenses/MIT The MIT License + * @link https://github.com/FabianBeiner/PHP-IMDB-Grabber/ GitHub Repository + * @version 6.1.7 + */ +class IMDB +{ + /** + * Set this to true if you run into problems. + */ + const IMDB_DEBUG = false; + + /** + * Set the preferred language for the User Agent. + */ + const IMDB_LANG = 'en-US,en;q=0.9'; + + /** + * Define the timeout for cURL requests. + */ + const IMDB_TIMEOUT = 15; + + /** + * These are the regular expressions used to extract the data. + * If you don’t know what you’re doing, you shouldn’t touch them. + */ + const IMDB_AKA = '~]*>\s*Also\s*Known\s*As\s*\s*(.+)~Uis'; + const IMDB_ASPECT_RATIO = '~]*>Aspect\s*Ratio\s*(.+)~Uis'; + const IMDB_AWARDS = '~\s*Awards:(.+)~Uis'; + const IMDB_BUDGET = '~]*>Budget<\/td>\s*\s*(.*)(?:\(estimated\))\s*<\/td>~Ui'; + const IMDB_CAST = '~]*itemprop="actor"[^>]*>\s*]*>\s*(.+)~Ui'; + const IMDB_RATING = '~class="ipl-rating-star__rating">(.*)<~Ui'; + const IMDB_RATING_COUNT = '~class="ipl-rating-star__total-votes">\((.*)\)<~Ui'; + const IMDB_RELEASE_DATE = '~href="/title/[t0-9]*/releaseinfo">(.*)<~Ui'; + const IMDB_RUNTIME = '~]*>\s*Runtime\s*\s*(.+)~Ui'; + const IMDB_SEARCH = '~ (?:.*)<\/a>~Ui'; + const IMDB_SEASONS = '~episodes\?season=(?:\d+)">(\d+)<~Ui'; + const IMDB_SOUND_MIX = '~]*>\s*Sound\s*Mix\s*\s*(.+)~Ui'; + const IMDB_TAGLINE = '~]*>\s*Taglines\s*\s*(.+)~Ui'; + const IMDB_TITLE = '~itemprop="name">(.*)(<\/h3>|'; + } + if (null !== $iCache && (int) $iCache > 0) { + $this->iCache = (int) $iCache; + } + $this->fetchUrl($sSearch); + } + + /** + * @param string $sSearch IMDb URL or movie title to search for. + * + * @return bool True on success, false on failure. + */ + private function fetchUrl($sSearch) + { + $sSearch = trim($sSearch); + + // Try to find a valid URL. + $sId = IMDBHelper::matchRegex($sSearch, self::IMDB_ID, 1); + if (false !== $sId) { + $this->iId = preg_replace('~[\D]~', '', $sId); + $this->sUrl = 'https://www.imdb.com/title/tt' . $this->iId . '/reference'; + $bSearch = false; + } else { + switch (strtolower($this->sSearchFor)) { + case 'movie': + $sParameters = '&s=tt&ttype=ft'; + break; + case 'tv': + $sParameters = '&s=tt&ttype=tv'; + break; + case 'episode': + $sParameters = '&s=tt&ttype=ep'; + break; + case 'game': + $sParameters = '&s=tt&ttype=vg'; + break; + default: + $sParameters = '&s=tt'; + } + + $this->sUrl = 'https://www.imdb.com/find?q=' . rawurlencode(str_replace(' ', '+', $sSearch)) . $sParameters; + $bSearch = true; + + // Was this search already performed and cached? + $sRedirectFile = $this->sRoot . '/cache/' . sha1($this->sUrl) . '.redir'; + if (is_readable($sRedirectFile)) { + if (self::IMDB_DEBUG) { + echo '
Using redirect: ' . basename($sRedirectFile) . '
'; + } + $sRedirect = file_get_contents($sRedirectFile); + $this->sUrl = trim($sRedirect); + $this->iId = preg_replace('~[\D]~', '', IMDBHelper::matchRegex($sRedirect, self::IMDB_ID, 1)); + $bSearch = false; + } + } + + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '.cache'; + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache) { + if (true === self::IMDB_DEBUG) { + echo '
Using cache: ' . basename($sCacheFile) . '
'; + } + $this->sSource = file_get_contents($sCacheFile); + $this->isReady = true; + + return true; + } + } + + // Run cURL on the URL. + if (true === self::IMDB_DEBUG) { + echo '
Running cURL: ' . $this->sUrl . '
'; + } + + $aCurlInfo = IMDBHelper::runCurl($this->sUrl); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if (true === self::IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + // Was the movie found? + $sMatch = IMDBHelper::matchRegex($sSource, self::IMDB_SEARCH, 1); + if (false !== $sMatch) { + $sUrl = 'https://www.imdb.com/title/' . $sMatch . '/reference'; + if (true === self::IMDB_DEBUG) { + echo '
New redirect saved: ' . basename($sRedirectFile) . ' => ' . $sUrl . '
'; + } + file_put_contents($sRedirectFile, $sUrl); + $this->sSource = null; + self::fetchUrl($sUrl); + + return true; + } + $sMatch = IMDBHelper::matchRegex($sSource, self::IMDB_NOT_FOUND, 0); + if (false !== $sMatch) { + if (true === self::IMDB_DEBUG) { + echo '
Movie not found: ' . $sSearch . '
'; + } + + return false; + } + + $this->sSource = str_replace( + [ + "\n", + "\r\n", + "\r", + ], + '', + $sSource + ); + $this->isReady = true; + + // Save cache. + if (false === $bSearch) { + if (true === self::IMDB_DEBUG) { + echo '
Cache created: ' . basename($sCacheFile) . '
'; + } + file_put_contents($sCacheFile, $this->sSource); + } + + return true; + } + + /** + * @return array All data. + */ + public function getAll() + { + $aData = []; + foreach (get_class_methods(__CLASS__) as $method) { + if (substr($method, 0, 3) === 'get' && $method !== 'getAll' && $method !== 'getCastImages') { + $aData[$method] = [ + 'name' => ltrim($method, 'get'), + 'value' => $this->{$method}(), + ]; + } + } + array_multisort($aData); + + return $aData; + } + + /** + * @return string “Also Known As” or $sNotFound. + */ + public function getAka() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_AKA, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * Returns all local names + * + * @return string All local names. + */ + public function getAkas() + { + if (true === $this->isReady) { + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '_akas.cache'; + $bUseCache = false; + + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache || false) { + $bUseCache = true; + } + } + + if ($bUseCache) { + $aRawReturn = file_get_contents($sCacheFile); + $aReturn = unserialize($aRawReturn); + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } else { + $fullAkas = sprintf('https://www.imdb.com/title/tt%s/releaseinfo', $this->iId); + $aCurlInfo = IMDBHelper::runCurl($fullAkas); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if (true === self::IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + $aReturned = IMDBHelper::matchRegex($sSource, "~(.*?)<\/td>\s+(.*?)<\/td>~"); + + if ($aReturned) { + $aReturn = []; + foreach ($aReturned[1] as $i => $strName) { + if (strpos($strName, '(') === false) { + $aReturn[] = [ + 'title' => IMDBHelper::cleanString($aReturned[2][$i]), + 'country' => IMDBHelper::cleanString($strName), + ]; + } + } + + file_put_contents($sCacheFile, serialize($aReturn)); + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string “Aspect Ratio” or $sNotFound. + */ + public function getAspectRatio() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_ASPECT_RATIO, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string The awards of the movie or $sNotFound. + */ + public function getAwards() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_AWARDS, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * @param string $sTarget Add a target to the links? + * + * @return string A list with linked cast members or $sNotFound. + */ + public function getCastAsUrl($iLimit = 0, $bMore = true, $sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_CAST); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = '
' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return IMDBHelper::arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + self::$sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return self::$sNotFound; + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * + * @return string A list with cast members or $sNotFound. + */ + public function getCast($iLimit = 0, $bMore = true) + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_CAST); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = IMDBHelper::cleanString($sName); + } + + $bMore = (0 !== $iLimit && $bMore && (count($aMatch[2]) > $iLimit) ? '…' : ''); + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return IMDBHelper::arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + self::$sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @param int $iLimit How many cast images should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * @param string $sSize small, mid or big cast images + * @param bool $bDownload Return URL or Download + * + * @return array Array with cast name as key, and image as value. + */ + public function getCastImages($iLimit = 0, $bMore = true, $sSize = 'small', $bDownload = false) + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_CAST_IMAGE); + $aReturn = []; + if (count($aMatch[4])) { + foreach ($aMatch[4] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $sMatch = $aMatch[2][$i]; + + if ('big' === strtolower($sSize) && false !== strstr($aMatch[2][$i], '@._')) { + $sMatch = substr($aMatch[2][$i], 0, strpos($aMatch[2][$i], '@._')) . '@.jpg'; + } elseif ('mid' === strtolower($sSize) && false !== strstr($aMatch[2][$i], '@._')) { + $sMatch = substr($aMatch[2][$i], 0, strpos($aMatch[2][$i], '@._')) . '@._V1_UX214_AL_.jpg'; + } + + if (false === $bDownload) { + $sMatch = IMDBHelper::cleanString($sMatch); + } else { + $sLocal = IMDBHelper::saveImageCast($sMatch, $aMatch[3][$i]); + if (file_exists(dirname(__FILE__) . '/' . $sLocal)) { + $sMatch = $sLocal; + } else { + //the 'big' image isn't available, try the 'mid' one (vice versa) + if ('big' === strtolower($sSize) && false !== strstr($aMatch[2][$i], '@._')) { + //trying the 'mid' one + $sMatch = substr( + $aMatch[2][$i], + 0, + strpos($aMatch[2][$i], '@._') + ) . '@._V1_UX214_AL_.jpg'; + } else { + //trying the 'big' one + $sMatch = substr($aMatch[2][$i], 0, strpos($aMatch[2][$i], '@._')) . '@.jpg'; + } + + $sLocal = IMDBHelper::saveImageCast($sMatch, $aMatch[3][$i]); + if (file_exists(dirname(__FILE__) . '/' . $sLocal)) { + $sMatch = $sLocal; + } else { + $sMatch = IMDBHelper::cleanString($aMatch[2][$i]); + } + } + } + + $aReturn[IMDBHelper::cleanString($aMatch[4][$i])] = $sMatch; + } + + $bMore = (0 !== $iLimit && $bMore && (count($aMatch[4]) > $iLimit) ? '…' : ''); + + $bHaveMore = ($bMore && (count($aMatch[4]) > $iLimit)); + + $aReturn = array_replace( + $aReturn, + array_fill_keys( + array_keys($aReturn, self::$sNotFound), + 'cast/not-found.jpg' + ) + ); + + return $aReturn; + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than + * printed. + * @param string $sTarget Add a target to the links? + * + * @return string A list with linked cast members and their character or + * $sNotFound. + */ + public function getCastAndCharacterAsUrl($iLimit = 0, $bMore = true, $sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_CAST); + $aMatchChar = IMDBHelper::matchRegex($this->sSource, self::IMDB_CHAR); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ' as ' . IMDBHelper::cleanString($aMatchChar[1][$i]); + } + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return IMDBHelper::arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + self::$sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * + * @return string A list with cast members and their character or + * $sNotFound. + */ + public function getCastAndCharacter($iLimit = 0, $bMore = true) + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_CAST); + $aMatchChar = IMDBHelper::matchRegex($this->sSource, self::IMDB_CHAR); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = IMDBHelper::cleanString($sName) . ' as ' . IMDBHelper::cleanString($aMatchChar[1][$i]); + } + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return IMDBHelper::arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + self::$sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string The certification of the movie or $sNotFound. + */ + public function getCertification() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_CERTIFICATION, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string Color or $sNotFound. + */ + public function getColor() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_COLOR, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string The company producing the movie or $sNotFound. + */ + public function getCompany() + { + if (true === $this->isReady) { + $sMatch = $this->getCompanyAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string The linked company producing the movie or $sNotFound. + */ + public function getCompanyAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_COMPANY); + if (isset($aMatch[2][0])) { + return '' . IMDBHelper::cleanString( + $aMatch[2][0] + ) . ''; + } + } + + return self::$sNotFound; + } + + /** + * @return string A list with countries or $sNotFound. + */ + public function getCountry() + { + if (true === $this->isReady) { + $sMatch = $this->getCountryAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with linked countries or $sNotFound. + */ + public function getCountryAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_COUNTRY); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string A list with the creators or $sNotFound. + */ + public function getCreator() + { + if (true === $this->isReady) { + $sMatch = $this->getCreatorAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked creators or $sNotFound. + */ + public function getCreatorAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_CREATOR, 1); + $aMatch = IMDBHelper::matchRegex($sMatch, self::IMDB_NAME); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string The description of the movie or $sNotFound. + */ + public function getDescription() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_DESCRIPTION, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string A list with the directors or $sNotFound. + */ + public function getDirector() + { + if (true === $this->isReady) { + $sMatch = $this->getDirectorAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked directors or $sNotFound. + */ + public function getDirectorAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_DIRECTOR, 1); + $aMatch = IMDBHelper::matchRegex($sMatch, self::IMDB_NAME); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string A list with the genres or $sNotFound. + */ + public function getGenre() + { + if (true === $this->isReady) { + $sMatch = $this->getGenreAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked genres or $sNotFound. + */ + public function getGenreAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_GENRE); + $aReturn = []; + if (count($aMatch[2])) { + foreach (array_unique($aMatch[2]) as $i => $sName) { + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string cumulative worldwide gross or $sNotFound. + */ + public function getGross() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_GROSS, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string A list with the languages or $sNotFound. + */ + public function getLanguage() + { + if (true === $this->isReady) { + $sMatch = $this->getLanguageAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked languages or $sNotFound. + */ + public function getLanguageAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_LANGUAGE); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string A list with the location or $sNotFound. + */ + public function getLocation() + { + if (true === $this->isReady) { + $sMatch = $this->getLocationAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked location or $sNotFound. + */ + public function getLocationAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_LOCATION); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * Returns all locations + * + * @return string location + * @return string specification + */ + public function getLocations() + { + if (true === $this->isReady) { + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '_locations.cache'; + $bUseCache = false; + + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache || false) { + $bUseCache = true; + } + } + + if ($bUseCache) { + $aRawReturn = file_get_contents($sCacheFile); + $aReturn = unserialize($aRawReturn); + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } else { + $fullLocations = sprintf('https://www.imdb.com/title/tt%s/locations', $this->iId); + $aCurlInfo = IMDBHelper::runCurl($fullLocations); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if (true === self::IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + $aReturned = IMDBHelper::matchRegex($sSource, self::IMDB_LOCATIONS); + + if ($aReturned) { + $aReturn = []; + foreach ($aReturned[1] as $i => $strName) { + if (strpos($strName, '(') === false) { + $aReturn[] = [ + 'location' => IMDBHelper::cleanString($strName), + ]; + } + if (strpos($aReturned[2][$i], '(') !== false) { + $aReturn[] = [ + 'specification' => IMDBHelper::cleanString($aReturned[2][$i]), + ]; + } + } + + file_put_contents($sCacheFile, serialize($aReturn)); + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string The MPAA of the movie or $sNotFound. + */ + public function getMpaa() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_MPAA, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string A list with the plot keywords or $sNotFound. + */ + public function getPlotKeywords() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_PLOT_KEYWORDS, 1); + if (false !== $sMatch) { + $aReturn = explode('|', IMDBHelper::cleanString($sMatch)); + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @param int $iLimit The limit. + * + * @return string The plot of the movie or $sNotFound. + */ + public function getPlot($iLimit = 0) + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_PLOT, 1); + if (false !== $sMatch) { + if ($iLimit !== 0) { + return IMDBHelper::getShortText(IMDBHelper::cleanString($sMatch), $iLimit); + } + + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sSize Small, big, xxs, xs, s poster? + * @param bool $bDownload Return URL to the poster or download it? + * + * @return bool|string Path to the poster. + */ + public function getPoster($sSize = 'small', $bDownload = false) + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_POSTER, 1); + if (false !== $sMatch) { + if ('big' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@.jpg'; + } + if ('xxs' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@._V1_UY67_CR0,0,45,67_AL_.jpg'; + } + if ('xs' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@._V1_UY113_CR0,0,76,113_AL_.jpg'; + } + if ('s' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@._V1_UX182_CR0,0,182,268_AL_.jpg'; + } + if (false === $bDownload) { + return IMDBHelper::cleanString($sMatch); + } else { + $sLocal = IMDBHelper::saveImage($sMatch, $this->iId); + if (file_exists(dirname(__FILE__) . '/' . $sLocal)) { + return $sLocal; + } else { + return $sMatch; + } + } + } + } + + return self::$sNotFound; + } + + /** + * @return string The rating of the movie or $sNotFound. + */ + public function getRating() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_RATING, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string The rating count of the movie or $sNotFound. + */ + public function getRatingCount() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_RATING_COUNT, 1); + if (false !== $sMatch) { + return str_replace(',', '', IMDBHelper::cleanString($sMatch)); + } + } + + return self::$sNotFound; + } + + /** + * Release date doesn't contain all the information we need to create a media and + * we need this function that checks if users can vote target media (if can, it's released). + * + * @return true If the media is released + */ + public function isReleased() + { + $strReturn = $this->getReleaseDate(); + if ($strReturn == self::$sNotFound || $strReturn == 'Not yet released') { + return false; + } + + return true; + } + + /** + * @return string The release date of the movie or $sNotFound. + */ + public function getReleaseDate() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_RELEASE_DATE, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * Returns all local names + * + * @return string country + * @return string release date + */ + public function getReleaseDates() + { + if (true === $this->isReady) { + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '_akas.cache'; + $bUseCache = false; + + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache || false) { + $bUseCache = true; + } + } + + if ($bUseCache) { + $aRawReturn = file_get_contents($sCacheFile); + $aReturn = unserialize($aRawReturn); + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } else { + $fullAkas = sprintf('https://www.imdb.com/title/tt%s/releaseinfo', $this->iId); + $aCurlInfo = IMDBHelper::runCurl($fullAkas); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if (true === self::IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + $aReturned = IMDBHelper::matchRegex( + $sSource, + '~>(.*)<\/a><\/td>\s+(.*)<\/td>~' + ); + + if ($aReturned) { + $aReturn = []; + foreach ($aReturned[1] as $i => $strName) { + if (strpos($strName, '(') === false) { + $aReturn[] = [ + 'country' => IMDBHelper::cleanString($strName), + 'releasedate' => IMDBHelper::cleanString($aReturned[2][$i]), + ]; + } + } + + file_put_contents($sCacheFile, serialize($aReturn)); + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string The runtime of the movie or $sNotFound. + */ + public function getRuntime() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_RUNTIME, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string A list with the seasons or $sNotFound. + */ + public function getSeasons() + { + if (true === $this->isReady) { + $sMatch = $this->getSeasonsAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked seasons or $sNotFound. + */ + public function getSeasonsAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_SEASONS); + $aReturn = []; + if (count($aMatch[1])) { + foreach (range(1, max($aMatch[1])) as $i => $sName) { + $aReturn[] = '' . $sName . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound); + } + + /** + * @return string The sound mix of the movie or $sNotFound. + */ + public function getSoundMix() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_SOUND_MIX, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string The tagline of the movie or $sNotFound. + */ + public function getTagline() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_TAGLINE, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param bool $bForceLocal Try to return the original name of the movie. + * + * @return string The title of the movie or $sNotFound. + */ + public function getTitle($bForceLocal = false) + { + if (true === $this->isReady) { + if (true === $bForceLocal) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_TITLE_ORIG, 1); + if (false !== $sMatch && "" !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_TITLE, 1); + $sMatch = preg_replace('~\(\d{4}\)$~Ui', '', $sMatch); + if (false !== $sMatch && "" !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param bool $bEmbed Link to player directly? + * + * @return string The URL to the trailer of the movie or $sNotFound. + */ + public function getTrailerAsUrl($bEmbed = false) + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_TRAILER, 1); + if (false !== $sMatch) { + $sUrl = 'https://www.imdb.com/video/imdb/' . $sMatch . '/' . ($bEmbed ? 'player' : ''); + + return IMDBHelper::cleanString($sUrl); + } + } + + return self::$sNotFound; + } + + /** + * @return string The IMDb URL. + */ + public function getUrl() + { + if (true === $this->isReady) { + return IMDBHelper::cleanString(str_replace('reference', '', $this->sUrl)); + } + + return self::$sNotFound; + } + + /** + * @return string The user review of the movie or $sNotFound. + */ + public function getUserReview() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_USER_REVIEW, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string The votes of the movie or $sNotFound. + */ + public function getVotes() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_VOTES, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string A list with the writers or $sNotFound. + */ + public function getWriter() + { + if (true === $this->isReady) { + $sMatch = $this->getWriterAsUrl(); + if (self::$sNotFound !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked writers or $sNotFound. + */ + public function getWriterAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_WRITER, 1); + $aMatch = IMDBHelper::matchRegex($sMatch, self::IMDB_NAME); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . IMDBHelper::cleanString( + $sName + ) . ''; + } + + return IMDBHelper::arrayOutput($this->bArrayOutput, $this->sSeparator, self::$sNotFound, $aReturn); + } + } + + return self::$sNotFound; + } + + /** + * @return string The year of the movie or $sNotFound. + */ + public function getYear() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_YEAR, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } + + /** + * @return string The budget of the movie or $sNotFound. + */ + public function getBudget() + { + if (true === $this->isReady) { + $sMatch = IMDBHelper::matchRegex($this->sSource, self::IMDB_BUDGET, 1); + if (false !== $sMatch) { + return IMDBHelper::cleanString($sMatch); + } + } + + return self::$sNotFound; + } +} + +class IMDBHelper extends IMDB +{ + /** + * Regular expression helper. + * + * @param string $sContent The content to search in. + * @param string $sPattern The regular expression. + * @param null $iIndex The index to return. + * + * @return bool If no match was found. + * @return string If one match was found. + * @return array If more than one match was found. + */ + public static function matchRegex($sContent, $sPattern, $iIndex = null) + { + preg_match_all($sPattern, $sContent, $aMatches); + if ($aMatches === false) { + return false; + } + if ($iIndex !== null && is_int($iIndex)) { + if (isset($aMatches[$iIndex][0])) { + return $aMatches[$iIndex][0]; + } + + return false; + } + + return $aMatches; + } + + /** + * Preferred output in responses with multiple elements + * + * @param bool $bArrayOutput Native array or string with separators. + * @param string $sSeparator String separator. + * @param string $sNotFound Not found text. + * @param array $aReturn Original input. + * @param bool $bHaveMore Have more elements indicator. + * + * @return string|array Multiple results separated by selected separator string, or enclosed into native array. + */ + public static function arrayOutput($bArrayOutput, $sSeparator, $sNotFound, $aReturn = null, $bHaveMore = false) + { + if ($bArrayOutput) { + if ($aReturn == null || ! is_array($aReturn)) { + return []; + } + + if ($bHaveMore) { + $aReturn[] = '…'; + } + + return $aReturn; + } else { + if ($aReturn == null || ! is_array($aReturn)) { + return $sNotFound; + } + + foreach ($aReturn as $i => $value) { + if (is_array($value)) { + $aReturn[$i] = implode($sSeparator, $value); + } + } + + return implode($sSeparator, $aReturn) . (($bHaveMore) ? '…' : ''); + } + } + + /** + * @param string $sInput Input (eg. HTML). + * + * @return string Cleaned string. + */ + public static function cleanString($sInput) + { + $aSearch = [ + 'Full summary »', + 'Full synopsis »', + 'Add summary »', + 'Add synopsis »', + 'See more »', + 'See why on IMDbPro.', + "\n", + "\r", + ]; + $aReplace = [ + '', + '', + '', + '', + '', + '', + '', + '', + ]; + $sInput = str_replace('', ' | ', $sInput); + $sInput = strip_tags($sInput); + $sInput = str_replace(' ', ' ', $sInput); + $sInput = str_replace($aSearch, $aReplace, $sInput); + $sInput = html_entity_decode($sInput, ENT_QUOTES | ENT_HTML5); + $sInput = preg_replace('/\s+/', ' ', $sInput); + $sInput = trim($sInput); + $sInput = rtrim($sInput, ' |'); + + return ($sInput ? trim($sInput) : self::$sNotFound); + } + + /** + * @param string $sText The long text. + * @param int $iLength The maximum length of the text. + * + * @return string The shortened text. + */ + public static function getShortText($sText, $iLength = 100) + { + if (mb_strlen($sText) <= $iLength) { + return $sText; + } + + list($sShort) = explode("\n", wordwrap($sText, $iLength - 1)); + + if (substr($sShort, -1) !== '.') { + return $sShort . '…'; + } + + return $sShort; + } + + /** + * @param string $sUrl The URL to the image to download. + * @param int $iId The ID of the movie. + * + * @return string Local path. + */ + public static function saveImage($sUrl, $iId) + { + if (preg_match('~title_addposter.jpg|imdb-share-logo.png~', $sUrl)) { + return 'posters/not-found.jpg'; + } + + $sFilename = dirname(__FILE__) . '/posters/' . $iId . '.jpg'; + if (file_exists($sFilename)) { + return 'posters/' . $iId . '.jpg'; + } + + $aCurlInfo = self::runCurl($sUrl, true); + $sData = $aCurlInfo['contents']; + if (false === $sData) { + return 'posters/not-found.jpg'; + } + + $oFile = fopen($sFilename, 'x'); + fwrite($oFile, $sData); + fclose($oFile); + + return 'posters/' . $iId . '.jpg'; + } + + /** + * @param string $sUrl The URL to fetch. + * @param bool $bDownload Download? + * + * @return bool|mixed Array on success, false on failure. + */ + public static function runCurl($sUrl, $bDownload = false) + { + $oCurl = curl_init($sUrl); + curl_setopt_array( + $oCurl, + [ + CURLOPT_BINARYTRANSFER => ($bDownload ? true : false), + CURLOPT_CONNECTTIMEOUT => self::IMDB_TIMEOUT, + CURLOPT_ENCODING => '', + CURLOPT_FOLLOWLOCATION => 0, + CURLOPT_FRESH_CONNECT => 0, + CURLOPT_HEADER => ($bDownload ? false : true), + CURLOPT_HTTPHEADER => [ + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Charset: utf-8, iso-8859-1;q=0.5', + 'Accept-Language: ' . self::IMDB_LANG, + ], + CURLOPT_REFERER => 'https://www.imdb.com', + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_SSL_VERIFYHOST => 0, + CURLOPT_SSL_VERIFYPEER => 0, + CURLOPT_TIMEOUT => self::IMDB_TIMEOUT, + CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0', + CURLOPT_VERBOSE => 0, + ] + ); + $sOutput = curl_exec($oCurl); + $aCurlInfo = curl_getinfo($oCurl); + curl_close($oCurl); + $aCurlInfo['contents'] = $sOutput; + + if (200 !== $aCurlInfo['http_code'] && 302 !== $aCurlInfo['http_code']) { + if (true === self::IMDB_DEBUG) { + echo '
cURL returned wrong HTTP code “' . $aCurlInfo['http_code'] . '”, aborting.
'; + } + + return false; + } + + return $aCurlInfo; + } + + /** + * @param string $sUrl The URL to the image to download. + * @param int $cId The cast ID of the actor. + * + * @return string Local path. + */ + public static function saveImageCast($sUrl, $cId) + { + if ( ! preg_match('~http~', $sUrl)) { + return 'cast/not-found.jpg'; + } + + $sFilename = dirname(__FILE__) . '/cast/' . $cId . '.jpg'; + if (file_exists($sFilename)) { + return 'cast/' . $cId . '.jpg'; + } + + $aCurlInfo = self::runCurl($sUrl, true); + $sData = $aCurlInfo['contents']; + if (false === $sData) { + return 'cast/not-found.jpg'; + } + + $oFile = fopen($sFilename, 'x'); + fwrite($oFile, $sData); + fclose($oFile); + + return 'cast/' . $cId . '.jpg'; + } +} diff --git a/sources/moveinfos.txt b/sources/moveinfos.txt new file mode 100644 index 0000000..37e86f0 --- /dev/null +++ b/sources/moveinfos.txt @@ -0,0 +1 @@ +https://www.imdb.com/interfaces/ diff --git a/sources/uikit-3.5.3.zip b/sources/uikit-3.5.3.zip new file mode 100644 index 0000000000000000000000000000000000000000..6858fd0cf677ca83f11b3b89e811c4feef048617 GIT binary patch literal 364211 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 z

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

jm;3*H^b{-@>_flH1$IckRao-#KgT8%GwlS=?kW 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%0Dm0%21K6aAMMzq9N!bjIYoVEa=2Sd`%Y;s+@?&Ux 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 z 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ä&Lmi3>V6Y@d+fRlu?j6re{7wN*W})$5^OHM6sKv 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 = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT; +if ($DB->connect_errno) exit('Can not connect to MySQL Server'); +$DB->set_charset("utf8mb4"); +$DB->query("SET collation_connection = 'utf8mb4_0900_ai_ci'"); + +# user Object +$Doomguy = new Doomguy($DB); +# API object +$Spectre = new Spectre($DB, $Doomguy); + +$_requestMode = "default"; +if(isset($_GET['p']) && !empty($_GET['p'])) { + $_requestMode = trim($_GET['p']); + $_requestMode = Summoner::validate($_requestMode,'nospace') ? $_requestMode : "default"; + + if(!$Spectre->allowedRequests($_requestMode)) $_requestMode = "default"; +} +$_authKey = false; +if(isset($_GET['authKey']) && !empty($_GET['authKey'])) { + $_authKey = trim($_GET['authKey']); + $_authKey = Summoner::validate($_authKey,'nospace') ? $_authKey : false; +} + +$_apiResult = array( + 'message' => 'Nothing to see here.', + 'status' => 200, + 'data' => array() +); +switch ($_requestMode) { + case 'list': + # get the latest 10 entris for given collection + $_msg = 'Missing parameter with value: collection'; + $_status = 404; + $_data = array(); + + $_collection = false; + if(isset($_GET['collection']) && !empty($_GET['collection'])) { + $_collection = trim($_GET['collection']); + $_collection = Summoner::validate($_collection,'digit') ? $_collection : false; + } + + if(!empty($_collection)) { + $_msg = 'Invalid collection.'; + $Mancubus = new Mancubus($DB,$Doomguy); + $Trite = new Trite($DB,$Doomguy); + $collectionInfo = $Trite->load($_collection); + + $Mancubus->setCollection($Trite->param('id')); + $Mancubus->setQueryOptions(array('limit' => 10)); + + $entries = $Mancubus->getEntries(); + if(!empty($entries)) { + $_msg = 'Latest entries for collection: '.$collectionInfo['name']; + $_status = 200; + $_data = $entries; + } + } + + $_apiResult = array( + 'message' => $_msg, + 'status' => $_status, + 'data' => $_data + ); + break; + + case 'add': + # add a single new entry to given collection + # authenticated by api token + $_msg = 'Missing parameter with value: collection'; + $_status = 400; + $_data = array(); + + $Doomguy->authByApiToken($_authKey); + if(!$Doomguy->isSignedIn()) { + $_apiResult = array( + 'message' => "Missing API token.", + 'status' => 401, + 'data' => $_data + ); + break; + } + + $_collection = false; + if(isset($_GET['collection']) && !empty($_GET['collection'])) { + $_collection = trim($_GET['collection']); + $_collection = Summoner::validate($_collection,'digit') ? $_collection : false; + } + + if(!empty($_collection)) { + $_msg = 'Invalid POST data.'; + + $Mancubus = new Mancubus($DB,$Doomguy); + $ManangeEntry = new Manageentry($DB,$Doomguy); + + $ManangeEntry->setCollection($_collection); + $editFields = $ManangeEntry->getEditFields(); + + if(!empty($_POST) && !empty($editFields)) { + $fdata = $_POST; + if(!empty($_FILES)) { + $fupload = $Spectre->prepareFilesArray($_FILES); + } + + $_owner = $Doomguy->param('id'); + $_group = $Doomguy->param('baseGroupId'); + $_rights = 'rwxrwxr--'; + + foreach ($editFields as $fieldId=>$fieldData) { + if(isset($fupload['name'][$fieldData['identifier']])) { + $fieldData['uploadData'] = $fupload; + $_fieldsToSave[$fieldData['identifier']] = $fieldData; + } + elseif(isset($fdata[$fieldData['identifier']])) { + $_value = trim($fdata[$fieldData['identifier']]); + if(!empty($_value)) { + $fieldData['valueToSave'] = trim($fdata[$fieldData['identifier']]); + + $_fieldsToSave[$fieldData['identifier']] = $fieldData; + } + } + } + + // special case. Title field should be always available. + if(!empty($_fieldsToSave) && isset($_fieldsToSave['title'])) { + $do = $ManangeEntry->create($_fieldsToSave, $_owner, $_group, $_rights); + if(!empty($do)) { + $_msg = 'Added entry: '.$_fieldsToSave['title']['valueToSave']; + $_status = 200; + $_data = array(); + } + } + } + } + + $_apiResult = array( + 'message' => $_msg, + 'status' => $_status, + 'data' => $_data + ); + break; + + case 'addInfo': + # return information about the given collection to create an ad call. + $_msg = 'Missing parameter with value: collection'; + $_status = 404; + $_data = array(); + + $_collection = false; + if(isset($_GET['collection']) && !empty($_GET['collection'])) { + $_collection = trim($_GET['collection']); + $_collection = Summoner::validate($_collection,'digit') ? $_collection : false; + } + + if(!empty($_collection)) { + $_msg = 'Invalid collection.'; + $Mancubus = new Mancubus($DB,$Doomguy); + $Trite = new Trite($DB,$Doomguy); + $collectionInfo = $Trite->load($_collection); + + $Mancubus->setCollection($Trite->param('id')); + + // just get one entry fpr given collection and then build the + // json information about adding structure + $entryStructure = $Mancubus->getEntryStructure(); + $structure = $Spectre->buildAddStructure($entryStructure['fields']); + + if(!empty($structure)) { + $_msg = 'API POST and FILES data information for collection: '.$collectionInfo['name']; + $_status = 200; + $_data = $structure; + } + } + + $_apiResult = array( + 'message' => $_msg, + 'status' => $_status, + 'data' => $_data + ); + break; + + case 'default': + default: + // do nothing +} + +# header information +http_response_code($_apiResult['status']); +header('Content-type: application/json; charset=UTF-8'); +echo json_encode($_apiResult); diff --git a/webclient/config/.gitignore b/webclient/config/.gitignore new file mode 100644 index 0000000..cde8069 --- /dev/null +++ b/webclient/config/.gitignore @@ -0,0 +1 @@ +*.php diff --git a/webclient/config/database.php.default b/webclient/config/database.php.default new file mode 100644 index 0000000..450bcfd --- /dev/null +++ b/webclient/config/database.php.default @@ -0,0 +1,24 @@ +report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT; +if ($DB->connect_errno) exit('Can not connect to MySQL Server'); +$DB->set_charset("utf8mb4"); +$DB->query("SET collation_connection = 'utf8mb4_0900_ai_ci'"); + +# user Object +$Doomguy = new Doomguy($DB); +# menu Object +$Gorenest = new GoreNest($DB,$Doomguy); + +$_requestMode = false; +if(isset($_GET['p']) && !empty($_GET['p'])) { + $_requestMode = trim($_GET['p']); + $_requestMode = Summoner::validate($_requestMode,'nospace') ? $_requestMode : "dashboard"; + + $_validPages = $Gorenest->allowedPageRequests(); + $_validPages["dashboard"] = "dashboard"; + if(!isset($_validPages[$_requestMode])) $_requestMode = "dashboard"; + + $ViewScript = Summoner::themefile($_requestMode.'/'.$_requestMode.'.php', UI_THEME); + $View = Summoner::themefile($_requestMode.'/'.$_requestMode.'.html', UI_THEME); +} + +# now inlcude the script +# this sets information into $Data and can overwrite $View +if(!empty($ViewScript)) { + require_once $ViewScript; +} + +if(!empty($TemplateData['refresh'])) { + header("Location: ".$TemplateData['refresh']); +} + +# header information +header('Content-type: text/html; charset=UTF-8'); + +## now inlcude the main view +require_once Summoner::themefile('main.php', UI_THEME); + +$DB->close(); diff --git a/webclient/lib/doomguy.class.php b/webclient/lib/doomguy.class.php new file mode 100644 index 0000000..1d20d91 --- /dev/null +++ b/webclient/lib/doomguy.class.php @@ -0,0 +1,475 @@ + array( + 'read' => 'r________', + 'write' => 'rw_______', + 'delete' => 'rwx______' + ), + 'group' => array( + 'read' => '___r_____', + 'write' => '___rw____', + 'delete' => '___rwx___' + ), + 'world' => array( + 'read' => '______r__', + 'write' => '______rw_', + 'delete' => '______rwx' + ) + ); + + public function __construct($db) { + $this->_DB = $db; + + if($this->_checkSession() === true) { + $this->isSignedIn = true; + $this->_loadUser(); + } + else { + # anonymoose ;-) + $this->userID = ANON_USER_ID; + $this->_loadUser(); + } + } + + /** + * get the value of the specified param from the user data array + * @param string $param + * @return bool|mixed + */ + public function param($param) { + $ret = false; + + $param = trim($param); + + if(!empty($param) && isset($this->userData[$param])) { + $ret = $this->userData[$param]; + } + + return $ret; + } + + /** + * return the isSignedIn status. + * @return boolean + */ + public function isSignedIn() { + return $this->isSignedIn; + } + + /** + * get the data from the userSession table + * @param string $param + * @return bool + */ + public function getSessionInfo($param) { + $ret = false; + + $query = $this->_DB->query("SELECT `".$param."` + FROM `".DB_PREFIX."_userSession` + WHERE `fk_user_id` = '".$this->_DB->real_escape_string($this->userID)."'"); + if($query !== false && $query->num_rows > 0) { + $result = $query->fetch_assoc(); + $ret = $result[$param]; + } + + return $ret; + } + + /** + * Log out the current loaded user + * @return boolean + */ + public function logOut () { + $ret = false; + + if($this->_checkAgainstSessionTable() === true) { + $this->_destroySession(); + $ret = true; + } + + return $ret; + } + + /** + * check if the loaded user is in this group + * if the user is in ADMIN_GROUP_ID, the he is automatically "in" every group + * @param int $groupID + * @return bool + */ + public function isInGroup($groupID) { + $ret = false; + + if($this->userData['isRoot'] === true) { + $ret = true; + } + elseif(in_array($groupID, array_keys($this->userData['group']))) { + $ret = true; + } + + return $ret; + } + + /** + * authenticate the user. Create session and db entries + * @param string $username + * @param string $password + * @return boolean + */ + public function authenticate($username,$password) { + $ret = false; + + if(!empty($username) && !empty($password)) { + $do = $this->_checkAgainstUserTable($username); + if($do === true) { + # valid user now load the user data and compare password etc. + $this->_loadUser(); + if(password_verify($password,$this->userData['password'])) { + # everything ok + + # create the session info + $tokenInfo = $this->_createToken(); + $_SESSION[SESSION_NAME]['bibliothecatoken'] = $tokenInfo['token']; + + $this->_DB->query("INSERT INTO `".DB_PREFIX."_userSession` + SET `token` = '".$this->_DB->real_escape_string($tokenInfo['token'])."', + `loginTime` = NOW(), + `area` = '".$this->_DB->real_escape_string(SESSION_NAME)."', + `fk_user_id` = '".$this->_DB->real_escape_string($this->userID)."', + `salt` = '".$this->_DB->real_escape_string($tokenInfo['salt'])."' + ON DUPLICATE KEY UPDATE + `token` = '".$this->_DB->real_escape_string($tokenInfo['token'])."', + `salt` = '".$this->_DB->real_escape_string($tokenInfo['salt'])."', + `loginTime` = NOW()"); + + # do some actions + $this->_loginActions(); + + $ret = true; + } + } + } + + return $ret; + } + + /** + * Use the user identified by apitoken + * @param $token string + */ + public function authByApiToken($token) { + if(!empty($token)) { + $queryStr = "SELECT `id` + FROM `".DB_PREFIX."_user` + WHERE `apiToken` = '".$this->_DB->real_escape_string($token)."' + AND `apiTokenValidDate` > NOW()"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + $result = $query->fetch_assoc(); + $this->userID = $result['id']; + $this->isSignedIn = true; + $this->_loadUser(); + $this->_loginActions(); + } + } + } + + /** + * create the sql string for rights sql + * + * @param string $mode + * @param bool $tableName + * @return string $str + * @throws Exception + */ + public function getSQLRightsString($mode = "read", $tableName=false) { + $prefix = ''; + if(!empty($tableName)) { + $prefix = "`".$tableName."`."; + } + if(isset($this->_rightsArray['user'][$mode]) && isset($this->_rightsArray['group'][$mode]) && isset($this->_rightsArray['world'][$mode])) { + $uid = $this->userID; + $gids = implode("','", array_keys($this->userData['groups'])); + + if($this->userData['isRoot'] === true) { + $str = "( ($prefix`rights` LIKE '".$this->_rightsArray['user'][$mode]."') "; + $str .= "OR ($prefix`rights` LIKE '".$this->_rightsArray['group'][$mode]."') "; + $str .= "OR ($prefix`rights` LIKE '".$this->_rightsArray['world'][$mode]."') )"; + } + else { + $str = "( ($prefix`owner` = ".$uid." AND $prefix`rights` LIKE '".$this->_rightsArray['user'][$mode]."') "; + $str .= "OR ($prefix`group` IN ('".$gids."') AND $prefix`rights` LIKE '".$this->_rightsArray['group'][$mode]."') "; + $str .= "OR ($prefix`rights` LIKE '".$this->_rightsArray['world'][$mode]."') )"; + } + } + else { + throw new Exception("Site User: invalid rights string."); + } + + return $str; + } + + /** + * check if we can use session + * we only use session if we can use cookies with the session + * THIS DOES NOT CHECK IF THE USER HAS COOKIES ACTIVATED ! + */ + protected function _checkSession() { + + if(ini_set('session.use_only_cookies',true) === false || + ini_set('session.cookie_httponly',true) === false || + ini_set('session.use_cookies',true) === false) { + + return false; + } + + + $garbage_timeout = SESSION_LIFETIME + 300; + ini_set('session.gc_maxlifetime', $garbage_timeout); + # the % rate how often the session.gc is run + # http://de.php.net/manual/en/session.configuration.php#ini.session.gc-probability + ini_set('session.gc_probability',10); // 100 = everytime = 100% + + session_save_path(SESSION_SAVE_PATH); + session_set_cookie_params(SESSION_LIFETIME); + session_name(SESSION_NAME); + session_start(); + # produce problems + # multiple request at once will confuse the script and loose session information + #session_regenerate_id(true); + + if(isset($_SESSION[SESSION_NAME]['bibliothecatoken']) && !empty($_SESSION[SESSION_NAME]['bibliothecatoken'])) { + return $this->_checkAgainstSessionTable(); + } + + return false; + } + + /** + * we have session data available. Now check if those data is valid + */ + protected function _checkAgainstSessionTable() { + $ret = false; + + $timeframe = date("Y-m-d H:i:s",time()-SESSION_LIFETIME); + + $queryStr = "SELECT s.fk_user_id, s.salt, s.token FROM `".DB_PREFIX."_userSession` AS s + INNER JOIN `".DB_PREFIX."_user` AS u ON s.fk_user_id = u.id + WHERE s.token = '".$this->_DB->real_escape_string($_SESSION[SESSION_NAME]['bibliothecatoken'])."' + AND s.salt <> '' + AND s.loginTime >= '".$timeframe."'"; + $query = $this->_DB->query($queryStr); + + if($query !== false && $query->num_rows > 0) { + # existing session info + $result = $query->fetch_assoc(); + + # valide the token + $_check = $this->_createToken($result['salt']); + if(!empty($_check) && $result['token'] === $_check['token']) { + $this->userID = $result['fk_user_id']; + + $ret = true; + } + } + + return $ret; + } + + /** + * check if the given username is set in user table + * if so load the user data + * @param string $u + * @return boolean + */ + protected function _checkAgainstUserTable($u) { + $ret = false; + + if(!empty($u)) { + $query = $this->_DB->query("SELECT `id` + FROM `".DB_PREFIX."_user` + WHERE `login` = '". $this->_DB->real_escape_string($u)."' + AND `active` = '1'"); + if($query !== false && $query->num_rows > 0) { + $result = $query->fetch_assoc(); + $this->userID = $result['id']; + $ret = true; + } + } + + return $ret; + } + + /** + * if we have to run some at login + */ + protected function _loginActions() { + # @todo: + # garbage collection for error files + + # clean old sessions on session table + $timeframe = date("Y-m-d H:i:s",time()-SESSION_LIFETIME); + $query = $this->_DB->query("DELETE FROM `".DB_PREFIX."_userSession` + WHERE `loginTime` <= '".$timeframe."'"); + } + + /** + * load the user and groups + */ + protected function _loadUser() { + if(!empty($this->userID)) { + $queryStr = "SELECT `id`, `baseGroupId`,`protected`,`password`,`login` + FROM `".DB_PREFIX."_user` + WHERE `id` = '".$this->_DB->real_escape_string($this->userID)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + $result = $query->fetch_assoc(); + $this->userData = $result; + } + + # now the groups + $queryStr = "SELECT g.name AS groupName, + g.description AS groupDescription, + g.id AS groupId + FROM `".DB_PREFIX."_user2group` AS u2g, + `".DB_PREFIX."_group` AS g + WHERE u2g.fk_user_id = '".$this->_DB->real_escape_string($this->userID)."' + AND u2g.fk_group_id = g.id"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $this->userData['groups'][$result['groupId']] = array( + 'groupName' => $result['groupName'], + 'groupDescription' => $result['groupDescription'] + ); + } + } + + $this->userData['isRoot'] = false; + $grIds = array_keys($this->userData['groups']); + if(in_array(ADMIN_GROUP_ID,$grIds)) { + $this->userData['isRoot'] = true; + } + } + } + + /** + * destroy and remove the current session from SESSION and session table + * @return boolean + */ + protected function _destroySession() { + $timeframe = date("Y-m-d H:i:s",time()-SESSION_LIFETIME); + $query = $this->_DB->query("DELETE FROM `".DB_PREFIX."_userSession` + WHERE `fk_user_id` = '".$this->_DB->real_escape_string($this->userID)."' + OR `loginTime` <= '".$timeframe."'"); + + unset($_SESSION); + unset($_COOKIE); + session_destroy(); + + return true; + } + + /** + * create the usertoken based on the HEADER information: + * HTTP_USER_AGENT, REMOTE_ADDR, HTTP_ACCEPT, HTTP_ACCEPT_LANGUAGE + * HTTP_ACCEPT_ENCODING, HTTP_VIA + * and a salt + * + * @param bool $salt + * @return bool + */ + protected function _createToken($salt=false) { + $ret = false; + + $defaultStr = "unknown"; + + if(!isset($_SERVER['HTTP_USER_AGENT'])) $_SERVER['HTTP_USER_AGENT'] = $defaultStr; + if(!isset($_SERVER['REMOTE_ADDR'])) $_SERVER['REMOTE_ADDR'] = $defaultStr; + if(!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $_SERVER['HTTP_ACCEPT_LANGUAGE'] = $defaultStr; + if(!isset($_SERVER['HTTP_VIA'])) $_SERVER['HTTP_VIA'] = $defaultStr; + if(!isset($_SERVER['HTTP_DNT'])) $_SERVER['HTTP_DNT'] = $defaultStr; + + // cli info + if(!isset($_SERVER['PATH'])) $_SERVER['PATH'] = $defaultStr; + if(!isset($_SERVER['SHELL'])) $_SERVER['SHELL'] = $defaultStr; + if(!isset($_SERVER['SESSION_MANAGER'])) $_SERVER['SESSION_MANAGER'] = $defaultStr; + if(!isset($_SERVER['USER'])) $_SERVER['USER'] = $defaultStr; + + $finalString = $_SERVER['HTTP_USER_AGENT'] + .$_SERVER['REMOTE_ADDR'] + .$_SERVER['HTTP_ACCEPT_LANGUAGE'] + .$_SERVER['HTTP_DNT'] + .$_SERVER['HTTP_VIA'] + .$_SERVER['PATH'] + .$_SERVER['SHELL'] + .$_SERVER['SESSION_MANAGER'] + .$_SERVER['USER']; + + # check how often we have unknown in it + # the more the less secure... + $_count = substr_count($finalString, $defaultStr); + if($_count < 5) { + if(empty($salt)) { + # 8 chars + $salt = bin2hex(openssl_random_pseudo_bytes(4)); + } + $ret['token'] = sha1($finalString.$salt); + $ret['salt'] = $salt; + } + + return $ret; + } +} diff --git a/webclient/lib/gorenest.class.php b/webclient/lib/gorenest.class.php new file mode 100644 index 0000000..cfd5cd8 --- /dev/null +++ b/webclient/lib/gorenest.class.php @@ -0,0 +1,106 @@ +_DB = $db; + $this->_User = $user; + } + + /** + * Get the menu data for given area and category. + * This shows only entries which have a category set. + * No category can be used for hidden entries. + * + * @param $category + * @param bool $reload + * @return array + */ + public function get($category,$reload=false) { + + if(empty($category)) return false; + + if(empty($reload) && isset($this->_menuData[$category])) { + return $this->_menuData[$category]; + } + + # reset the menu + $this->_menuData[$category] = array(); + + $queryStr = "SELECT id, text, action, icon, category + FROM `".DB_PREFIX."_menu` + WHERE ".$this->_User->getSQLRightsString()." + AND `category` = '".$this->_DB->real_escape_string($category)."' + ORDER BY position"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $this->_menuData[$result['category']][$result['id']] = $result; + } + } + + return $this->_menuData[$category]; + } + + /** + * Allowed page requests based on the menu entries and user + * @return array + */ + public function allowedPageRequests() { + $ret = array(); + $queryStr = "SELECT id, action + FROM `".DB_PREFIX."_menu` + WHERE ".$this->_User->getSQLRightsString().""; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['action']] = $result['action']; + } + } + + return $ret; + } +} diff --git a/webclient/lib/imdbwebparser.class.php b/webclient/lib/imdbwebparser.class.php new file mode 100644 index 0000000..38ea398 --- /dev/null +++ b/webclient/lib/imdbwebparser.class.php @@ -0,0 +1,1808 @@ + + * @license https://opensource.org/licenses/MIT The MIT License + * @link https://github.com/FabianBeiner/PHP-IMDB-Grabber/ GitHub Repository + * @version 6.1.7 + * + * + * Functionality is the same but modified heavily to remove the does-not-make-sense static helper + * wich was not static since it depended on the IMDB class. Also some could not be extended or overwritten + * + */ +class IMDB +{ + /** + * Set this to true if you run into problems. + */ + private $IMDB_DEBUG = false; + + /** + * Set the preferred language for the User Agent. + */ + private $IMDB_LANG = 'en-US,en;q=0.9'; + + /** + * Define the timeout for cURL requests. + */ + private $IMDB_TIMEOUT = 15; + + /** + * These are the regular expressions used to extract the data. + * If you don’t know what you’re doing, you shouldn’t touch them. + */ + const IMDB_AKA = '~]*>\s*Also\s*Known\s*As\s*\s*(.+)~Uis'; + const IMDB_ASPECT_RATIO = '~]*>Aspect\s*Ratio\s*(.+)~Uis'; + const IMDB_AWARDS = '~\s*Awards:(.+)~Uis'; + const IMDB_BUDGET = '~]*>Budget<\/td>\s*\s*(.*)(?:\(estimated\))\s*<\/td>~Ui'; + const IMDB_CAST = '~]*itemprop="actor"[^>]*>\s*]*>\s*(.+)~Ui'; + const IMDB_RATING = '~class="ipl-rating-star__rating">(.*)<~Ui'; + const IMDB_RATING_COUNT = '~class="ipl-rating-star__total-votes">\((.*)\)<~Ui'; + const IMDB_RELEASE_DATE = '~href="/title/[t0-9]*/releaseinfo">(.*)<~Ui'; + const IMDB_RUNTIME = '~]*>\s*Runtime\s*\s*(.+)~Ui'; + const IMDB_SEARCH = '~ (?:.*)<\/a>~Ui'; + const IMDB_SEASONS = '~episodes\?season=(?:\d+)">(\d+)<~Ui'; + const IMDB_SOUND_MIX = '~]*>\s*Sound\s*Mix\s*\s*(.+)~Ui'; + const IMDB_TAGLINE = '~]*>\s*Taglines\s*\s*(.+)~Ui'; + const IMDB_TITLE = '~itemprop="name">(.*)(<\/h3>|'; + } + + // Try to find a valid URL. + $sId = $this->matchRegex($sSearch, self::IMDB_ID, 1); + if (false !== $sId) { + $this->iId = preg_replace('~[\D]~', '', $sId); + $this->sUrl = 'https://www.imdb.com/title/tt' . $this->iId . '/reference'; + $bSearch = false; + } else { + switch (strtolower($this->sSearchFor)) { + case 'movie': + $sParameters = '&s=tt&ttype=ft'; + break; + case 'tv': + $sParameters = '&s=tt&ttype=tv'; + break; + case 'episode': + $sParameters = '&s=tt&ttype=ep'; + break; + case 'game': + $sParameters = '&s=tt&ttype=vg'; + break; + default: + $sParameters = '&s=tt'; + } + + $this->sUrl = 'https://www.imdb.com/find?q=' . rawurlencode(str_replace(' ', '+', $sSearch)) . $sParameters; + $bSearch = true; + + // Was this search already performed and cached? + $sRedirectFile = $this->sRoot . '/cache/' . sha1($this->sUrl) . '.redir'; + if (is_readable($sRedirectFile)) { + if ($this->IMDB_DEBUG) { + echo '

Using redirect: ' . basename($sRedirectFile) . '
'; + } + $sRedirect = file_get_contents($sRedirectFile); + $this->sUrl = trim($sRedirect); + $this->iId = preg_replace('~[\D]~', '', $this->matchRegex($sRedirect, self::IMDB_ID, 1)); + $bSearch = false; + } + } + + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '.cache'; + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache) { + if ($this->IMDB_DEBUG) { + echo '
Using cache: ' . basename($sCacheFile) . '
'; + } + $this->sSource = file_get_contents($sCacheFile); + $this->isReady = true; + + return true; + } + } + + // Run cURL on the URL. + if ($this->IMDB_DEBUG) { + echo '
Running cURL: ' . $this->sUrl . '
'; + } + + $aCurlInfo = $this->runCurl($this->sUrl); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if ($this->IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + // Was the movie found? + $sMatch = $this->matchRegex($sSource, self::IMDB_SEARCH, 1); + if (false !== $sMatch) { + $sUrl = 'https://www.imdb.com/title/' . $sMatch . '/reference'; + if ($this->IMDB_DEBUG) { + echo '
New redirect saved: ' . basename($sRedirectFile) . ' => ' . $sUrl . '
'; + } + file_put_contents($sRedirectFile, $sUrl); + $this->sSource = null; + $this->fetchUrl($sUrl); + + return true; + } + $sMatch = $this->matchRegex($sSource, self::IMDB_NOT_FOUND, 0); + if (false !== $sMatch) { + if ($this->IMDB_DEBUG) { + echo '
Movie not found: ' . $sSearch . '
'; + } + + return false; + } + + $this->sSource = str_replace( + [ + "\n", + "\r\n", + "\r", + ], + '', + $sSource + ); + $this->isReady = true; + + // Save cache. + if (false === $bSearch) { + if ($this->IMDB_DEBUG) { + echo '
Cache created: ' . basename($sCacheFile) . '
'; + } + file_put_contents($sCacheFile, $this->sSource); + } + + return true; + } + + /** + * @return array All data. + */ + public function getAll() + { + $aData = []; + foreach (get_class_methods(__CLASS__) as $method) { + if (substr($method, 0, 3) === 'get' && $method !== 'getAll' && $method !== 'getCastImages') { + $aData[$method] = [ + 'name' => ltrim($method, 'get'), + 'value' => $this->{$method}(), + ]; + } + } + array_multisort($aData); + + return $aData; + } + + /** + * @return string “Also Known As” or $sNotFound. + */ + public function getAka() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_AKA, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * Returns all local names + * + * @return string All local names. + */ + public function getAkas() + { + if (true === $this->isReady) { + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '_akas.cache'; + $bUseCache = false; + + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache || false) { + $bUseCache = true; + } + } + + if ($bUseCache) { + $aRawReturn = file_get_contents($sCacheFile); + $aReturn = unserialize($aRawReturn); + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } else { + $fullAkas = sprintf('https://www.imdb.com/title/tt%s/releaseinfo', $this->iId); + $aCurlInfo = $this->runCurl($fullAkas); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if ($this->IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + $aReturned = $this->matchRegex($sSource, "~(.*?)<\/td>\s+(.*?)<\/td>~"); + + if ($aReturned) { + $aReturn = []; + foreach ($aReturned[1] as $i => $strName) { + if (strpos($strName, '(') === false) { + $aReturn[] = [ + 'title' => $this->cleanString($aReturned[2][$i]), + 'country' => $this->cleanString($strName), + ]; + } + } + + file_put_contents($sCacheFile, serialize($aReturn)); + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string “Aspect Ratio” or $sNotFound. + */ + public function getAspectRatio() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_ASPECT_RATIO, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string The awards of the movie or $sNotFound + */ + public function getAwards() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_AWARDS, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * @param string $sTarget Add a target to the links? + * + * @return string A list with linked cast members or $sNotFound. + */ + public function getCastAsUrl($iLimit = 0, $bMore = true, $sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_CAST); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = '
' . $this->cleanString( + $sName + ) . ''; + } + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return $this->arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + $this->sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return $this->sNotFound; + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * + * @return string A list with cast members or $sNotFound. + */ + public function getCast($iLimit = 0, $bMore = true) + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_CAST); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = $this->cleanString($sName); + } + + $bMore = (0 !== $iLimit && $bMore && (count($aMatch[2]) > $iLimit) ? '…' : ''); + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return $this->arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + $this->sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @param int $iLimit How many cast images should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * @param string $sSize small, mid or big cast images + * @param bool $bDownload Return URL or Download + * + * @return array Array with cast name as key, and image as value. + */ + public function getCastImages($iLimit = 0, $bMore = true, $sSize = 'small', $bDownload = false) + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_CAST_IMAGE); + $aReturn = []; + if (count($aMatch[4])) { + foreach ($aMatch[4] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $sMatch = $aMatch[2][$i]; + + if ('big' === strtolower($sSize) && false !== strstr($aMatch[2][$i], '@._')) { + $sMatch = substr($aMatch[2][$i], 0, strpos($aMatch[2][$i], '@._')) . '@.jpg'; + } elseif ('mid' === strtolower($sSize) && false !== strstr($aMatch[2][$i], '@._')) { + $sMatch = substr($aMatch[2][$i], 0, strpos($aMatch[2][$i], '@._')) . '@._V1_UX214_AL_.jpg'; + } + + if (false === $bDownload) { + $sMatch = $this->cleanString($sMatch); + } else { + $sLocal = $this->saveImageCast($sMatch, $aMatch[3][$i]); + if (file_exists(dirname(__FILE__) . '/' . $sLocal)) { + $sMatch = $sLocal; + } else { + //the 'big' image isn't available, try the 'mid' one (vice versa) + if ('big' === strtolower($sSize) && false !== strstr($aMatch[2][$i], '@._')) { + //trying the 'mid' one + $sMatch = substr( + $aMatch[2][$i], + 0, + strpos($aMatch[2][$i], '@._') + ) . '@._V1_UX214_AL_.jpg'; + } else { + //trying the 'big' one + $sMatch = substr($aMatch[2][$i], 0, strpos($aMatch[2][$i], '@._')) . '@.jpg'; + } + + $sLocal = $this->saveImageCast($sMatch, $aMatch[3][$i]); + if (file_exists(dirname(__FILE__) . '/' . $sLocal)) { + $sMatch = $sLocal; + } else { + $sMatch = $this->cleanString($aMatch[2][$i]); + } + } + } + + $aReturn[$this->cleanString($aMatch[4][$i])] = $sMatch; + } + + $bMore = (0 !== $iLimit && $bMore && (count($aMatch[4]) > $iLimit) ? '…' : ''); + + $bHaveMore = ($bMore && (count($aMatch[4]) > $iLimit)); + + $aReturn = array_replace( + $aReturn, + array_fill_keys( + array_keys($aReturn, $this->sNotFound), + 'cast/not-found.jpg' + ) + ); + + return $aReturn; + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than + * printed. + * @param string $sTarget Add a target to the links? + * + * @return string A list with linked cast members and their character or + * $sNotFound. + */ + public function getCastAndCharacterAsUrl($iLimit = 0, $bMore = true, $sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_CAST); + $aMatchChar = $this->matchRegex($this->sSource, self::IMDB_CHAR); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = '' . $this->cleanString( + $sName + ) . ' as ' . $this->cleanString($aMatchChar[1][$i]); + } + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return $this->arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + $this->sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @param int $iLimit How many cast members should be returned? + * @param bool $bMore Add … if there are more cast members than printed. + * + * @return string A list with cast members and their character or + * $sNotFound. + */ + public function getCastAndCharacter($iLimit = 0, $bMore = true) + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_CAST); + $aMatchChar = $this->matchRegex($this->sSource, self::IMDB_CHAR); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + if (0 !== $iLimit && $i >= $iLimit) { + break; + } + $aReturn[] = $this->cleanString($sName) . ' as ' . $this->cleanString($aMatchChar[1][$i]); + } + + $bHaveMore = ($bMore && (count($aMatch[2]) > $iLimit)); + + return $this->arrayOutput( + $this->bArrayOutput, + $this->sSeparator, + $this->sNotFound, + $aReturn, + $bHaveMore + ); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string The certification of the movie or $sNotFound. + */ + public function getCertification() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_CERTIFICATION, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string Color or $sNotFound. + */ + public function getColor() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_COLOR, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string The company producing the movie or $sNotFound. + */ + public function getCompany() + { + if (true === $this->isReady) { + $sMatch = $this->getCompanyAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string The linked company producing the movie or $sNotFound. + */ + public function getCompanyAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_COMPANY); + if (isset($aMatch[2][0])) { + return '' . $this->cleanString( + $aMatch[2][0] + ) . ''; + } + } + + return $this->sNotFound; + } + + /** + * @return string A list with countries or $sNotFound. + */ + public function getCountry() + { + if (true === $this->isReady) { + $sMatch = $this->getCountryAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with linked countries or $sNotFound. + */ + public function getCountryAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_COUNTRY); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . $this->cleanString( + $sName + ) . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string A list with the creators or $sNotFound. + */ + public function getCreator() + { + if (true === $this->isReady) { + $sMatch = $this->getCreatorAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked creators or $sNotFound. + */ + public function getCreatorAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_CREATOR, 1); + $aMatch = $this->matchRegex($sMatch, self::IMDB_NAME); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . $this->cleanString( + $sName + ) . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string The description of the movie or $sNotFound. + */ + public function getDescription() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_DESCRIPTION, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string A list with the directors or $sNotFound. + */ + public function getDirector() + { + if (true === $this->isReady) { + $sMatch = $this->getDirectorAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked directors or $sNotFound. + */ + public function getDirectorAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_DIRECTOR, 1); + $aMatch = $this->matchRegex($sMatch, self::IMDB_NAME); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . $this->cleanString( + $sName + ) . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string A list with the genres or $sNotFound. + */ + public function getGenre() + { + if (true === $this->isReady) { + $sMatch = $this->getGenreAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked genres or $sNotFound. + */ + public function getGenreAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_GENRE); + $aReturn = []; + if (count($aMatch[2])) { + foreach (array_unique($aMatch[2]) as $i => $sName) { + $aReturn[] = '' . $this->cleanString( + $sName + ) . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string cumulative worldwide gross or $sNotFound. + */ + public function getGross() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_GROSS, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string A list with the languages or $sNotFound. + */ + public function getLanguage() + { + if (true === $this->isReady) { + $sMatch = $this->getLanguageAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked languages or $sNotFound. + */ + public function getLanguageAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_LANGUAGE); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . $this->cleanString( + $sName + ) . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string A list with the location or $sNotFound. + */ + public function getLocation() + { + if (true === $this->isReady) { + $sMatch = $this->getLocationAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked location or $sNotFound. + */ + public function getLocationAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_LOCATION); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . $this->cleanString( + $sName + ) . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * Returns all locations + * + * @return string location + * @return string specification + */ + public function getLocations() + { + if (true === $this->isReady) { + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '_locations.cache'; + $bUseCache = false; + + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache || false) { + $bUseCache = true; + } + } + + if ($bUseCache) { + $aRawReturn = file_get_contents($sCacheFile); + $aReturn = unserialize($aRawReturn); + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } else { + $fullLocations = sprintf('https://www.imdb.com/title/tt%s/locations', $this->iId); + $aCurlInfo = $this->runCurl($fullLocations); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if ($this->IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + $aReturned = $this->matchRegex($sSource, self::IMDB_LOCATIONS); + + if ($aReturned) { + $aReturn = []; + foreach ($aReturned[1] as $i => $strName) { + if (strpos($strName, '(') === false) { + $aReturn[] = [ + 'location' => $this->cleanString($strName), + ]; + } + if (strpos($aReturned[2][$i], '(') !== false) { + $aReturn[] = [ + 'specification' => $this->cleanString($aReturned[2][$i]), + ]; + } + } + + file_put_contents($sCacheFile, serialize($aReturn)); + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string The MPAA of the movie or $sNotFound. + */ + public function getMpaa() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_MPAA, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string A list with the plot keywords or $sNotFound. + */ + public function getPlotKeywords() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_PLOT_KEYWORDS, 1); + if (false !== $sMatch) { + $aReturn = explode('|', $this->cleanString($sMatch)); + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @param int $iLimit The limit. + * + * @return string The plot of the movie or $sNotFound. + */ + public function getPlot($iLimit = 0) + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_PLOT, 1); + if (false !== $sMatch) { + if ($iLimit !== 0) { + return $this->shortText($this->cleanString($sMatch), $iLimit); + } + + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sSize Small, big, xxs, xs, s poster? + * @param bool $bDownload Return URL to the poster or download it? + * + * @return bool|string Path to the poster. + */ + public function getPoster($sSize = 'small', $bDownload = false) + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_POSTER, 1); + if (false !== $sMatch) { + if ('big' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@.jpg'; + } + if ('xxs' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@._V1_UY67_CR0,0,45,67_AL_.jpg'; + } + if ('xs' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@._V1_UY113_CR0,0,76,113_AL_.jpg'; + } + if ('s' === strtolower($sSize) && false !== strstr($sMatch, '@._')) { + $sMatch = substr($sMatch, 0, strpos($sMatch, '@._')) . '@._V1_UX182_CR0,0,182,268_AL_.jpg'; + } + if (false === $bDownload) { + return $this->cleanString($sMatch); + } else { + $sLocal = $this->saveImage($sMatch, $this->iId); + if (file_exists(dirname(__FILE__) . '/' . $sLocal)) { + return $sLocal; + } else { + return $sMatch; + } + } + } + } + + return $this->sNotFound; + } + + /** + * @return string The rating of the movie or $sNotFound. + */ + public function getRating() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_RATING, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string The rating count of the movie or $sNotFound. + */ + public function getRatingCount() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_RATING_COUNT, 1); + if (false !== $sMatch) { + return str_replace(',', '', $this->cleanString($sMatch)); + } + } + + return $this->sNotFound; + } + + /** + * Release date doesn't contain all the information we need to create a media and + * we need this function that checks if users can vote target media (if can, it's released). + * + * @return true If the media is released + */ + public function isReleased() + { + $strReturn = $this->getReleaseDate(); + if ($strReturn == $this->sNotFound || $strReturn == 'Not yet released') { + return false; + } + + return true; + } + + /** + * @return string The release date of the movie or $sNotFound. + */ + public function getReleaseDate() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_RELEASE_DATE, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * Returns all local names + * + * @return string country + * @return string release date + */ + public function getReleaseDates() + { + if (true === $this->isReady) { + // Does a cache of this movie exist? + $sCacheFile = $this->sRoot . '/cache/' . sha1($this->iId) . '_akas.cache'; + $bUseCache = false; + + if (is_readable($sCacheFile)) { + $iDiff = round(abs(time() - filemtime($sCacheFile)) / 60); + if ($iDiff < $this->iCache || false) { + $bUseCache = true; + } + } + + if ($bUseCache) { + $aRawReturn = file_get_contents($sCacheFile); + $aReturn = unserialize($aRawReturn); + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } else { + $fullAkas = sprintf('https://www.imdb.com/title/tt%s/releaseinfo', $this->iId); + $aCurlInfo = $this->runCurl($fullAkas); + $sSource = $aCurlInfo['contents']; + + if (false === $sSource) { + if ($this->IMDB_DEBUG) { + echo '
cURL error: ' . var_dump($aCurlInfo) . '
'; + } + + return false; + } + + $aReturned = $this->matchRegex( + $sSource, + '~>(.*)<\/a><\/td>\s+(.*)<\/td>~' + ); + + if ($aReturned) { + $aReturn = []; + foreach ($aReturned[1] as $i => $strName) { + if (strpos($strName, '(') === false) { + $aReturn[] = [ + 'country' => $this->cleanString($strName), + 'releasedate' => $this->cleanString($aReturned[2][$i]), + ]; + } + } + + file_put_contents($sCacheFile, serialize($aReturn)); + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string The runtime of the movie or $sNotFound. + */ + public function getRuntime() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_RUNTIME, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string A list with the seasons or $sNotFound. + */ + public function getSeasons() + { + if (true === $this->isReady) { + $sMatch = $this->getSeasonsAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked seasons or $sNotFound. + */ + public function getSeasonsAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $aMatch = $this->matchRegex($this->sSource, self::IMDB_SEASONS); + $aReturn = []; + if (count($aMatch[1])) { + foreach (range(1, max($aMatch[1])) as $i => $sName) { + $aReturn[] = '' . $sName . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound); + } + + /** + * @return string The sound mix of the movie or $sNotFound. + */ + public function getSoundMix() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_SOUND_MIX, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string The tagline of the movie or $sNotFound. + */ + public function getTagline() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_TAGLINE, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param bool $bForceLocal Try to return the original name of the movie. + * + * @return string The title of the movie or $sNotFound. + */ + public function getTitle($bForceLocal = false) + { + if (true === $this->isReady) { + if (true === $bForceLocal) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_TITLE_ORIG, 1); + if (false !== $sMatch && "" !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + $sMatch = $this->matchRegex($this->sSource, self::IMDB_TITLE, 1); + $sMatch = preg_replace('~\(\d{4}\)$~Ui', '', $sMatch); + if (false !== $sMatch && "" !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param bool $bEmbed Link to player directly? + * + * @return string The URL to the trailer of the movie or $sNotFound. + */ + public function getTrailerAsUrl($bEmbed = false) + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_TRAILER, 1); + if (false !== $sMatch) { + $sUrl = 'https://www.imdb.com/video/imdb/' . $sMatch . '/' . ($bEmbed ? 'player' : ''); + + return $this->cleanString($sUrl); + } + } + + return $this->sNotFound; + } + + /** + * @return string The IMDb URL. + */ + public function getUrl() + { + if (true === $this->isReady) { + return $this->cleanString(str_replace('reference', '', $this->sUrl)); + } + + return $this->sNotFound; + } + + /** + * @return string The user review of the movie or $sNotFound. + */ + public function getUserReview() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_USER_REVIEW, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string The votes of the movie or $sNotFound. + */ + public function getVotes() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_VOTES, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string A list with the writers or $sNotFound. + */ + public function getWriter() + { + if (true === $this->isReady) { + $sMatch = $this->getWriterAsUrl(); + if ($this->sNotFound !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @param string $sTarget Add a target to the links? + * + * @return string A list with the linked writers or $sNotFound. + */ + public function getWriterAsUrl($sTarget = '') + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_WRITER, 1); + $aMatch = $this->matchRegex($sMatch, self::IMDB_NAME); + $aReturn = []; + if (count($aMatch[2])) { + foreach ($aMatch[2] as $i => $sName) { + $aReturn[] = '' . $this->cleanString( + $sName + ) . ''; + } + + return $this->arrayOutput($this->bArrayOutput, $this->sSeparator, $this->sNotFound, $aReturn); + } + } + + return $this->sNotFound; + } + + /** + * @return string The year of the movie or $sNotFound. + */ + public function getYear() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_YEAR, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + /** + * @return string The budget of the movie or $sNotFound. + */ + public function getBudget() + { + if (true === $this->isReady) { + $sMatch = $this->matchRegex($this->sSource, self::IMDB_BUDGET, 1); + if (false !== $sMatch) { + return $this->cleanString($sMatch); + } + } + + return $this->sNotFound; + } + + + /** + * Regular expression helper. + * + * @param string $sContent The content to search in. + * @param string $sPattern The regular expression. + * @param null $iIndex The index to return. + * + * @return bool If no match was found. + * @return string If one match was found. + * @return array If more than one match was found. + */ + private function matchRegex($sContent, $sPattern, $iIndex = null) + { + preg_match_all($sPattern, $sContent, $aMatches); + if ($aMatches === false) { + return false; + } + if ($iIndex !== null && is_int($iIndex)) { + if (isset($aMatches[$iIndex][0])) { + return $aMatches[$iIndex][0]; + } + + return false; + } + + return $aMatches; + } + + /** + * Preferred output in responses with multiple elements + * + * @param bool $bArrayOutput Native array or string with separators. + * @param string $sSeparator String separator. + * @param string $sNotFound Not found text. + * @param array $aReturn Original input. + * @param bool $bHaveMore Have more elements indicator. + * + * @return string|array Multiple results separated by selected separator string, or enclosed into native array. + */ + private function arrayOutput($bArrayOutput, $sSeparator, $sNotFound, $aReturn = null, $bHaveMore = false) + { + if ($bArrayOutput) { + if ($aReturn == null || ! is_array($aReturn)) { + return []; + } + + if ($bHaveMore) { + $aReturn[] = '…'; + } + + return $aReturn; + } else { + if ($aReturn == null || ! is_array($aReturn)) { + return $sNotFound; + } + + foreach ($aReturn as $i => $value) { + if (is_array($value)) { + $aReturn[$i] = implode($sSeparator, $value); + } + } + + return implode($sSeparator, $aReturn) . (($bHaveMore) ? '…' : ''); + } + } + + /** + * @param string $sInput Input (eg. HTML). + * + * @return string Cleaned string. + */ + private function cleanString($sInput) + { + $aSearch = [ + 'Full summary »', + 'Full synopsis »', + 'Add summary »', + 'Add synopsis »', + 'See more »', + 'See why on IMDbPro.', + "\n", + "\r", + ]; + $aReplace = [ + '', + '', + '', + '', + '', + '', + '', + '', + ]; + $sInput = str_replace('', ' | ', $sInput); + $sInput = strip_tags($sInput); + $sInput = str_replace(' ', ' ', $sInput); + $sInput = str_replace($aSearch, $aReplace, $sInput); + $sInput = html_entity_decode($sInput, ENT_QUOTES | ENT_HTML5); + $sInput = preg_replace('/\s+/', ' ', $sInput); + $sInput = trim($sInput); + $sInput = rtrim($sInput, ' |'); + + return ($sInput ? trim($sInput) : $this->sNotFound); + } + + /** + * @param string $sText The long text. + * @param int $iLength The maximum length of the text. + * + * @return string The shortened text. + */ + private function shortText($sText, $iLength = 100) + { + if (mb_strlen($sText) <= $iLength) { + return $sText; + } + + list($sShort) = explode("\n", wordwrap($sText, $iLength - 1)); + + if (substr($sShort, -1) !== '.') { + return $sShort . '…'; + } + + return $sShort; + } + + /** + * @param string $sUrl The URL to the image to download. + * @param int $iId The ID of the movie. + * + * @return string Local path. + */ + private function saveImage($sUrl, $iId) + { + if (preg_match('~title_addposter.jpg|imdb-share-logo.png~', $sUrl)) { + return 'posters/not-found.jpg'; + } + + $sFilename = $this->sRoot . '/posters/' . $iId . '.jpg'; + if (file_exists($sFilename)) { + return 'posters/' . $iId . '.jpg'; + } + + $aCurlInfo = $this->runCurl($sUrl, true); + $sData = $aCurlInfo['contents']; + if (false === $sData) { + return 'posters/not-found.jpg'; + } + + $oFile = fopen($sFilename, 'x'); + fwrite($oFile, $sData); + fclose($oFile); + + return 'posters/' . $iId . '.jpg'; + } + + /** + * @param string $sUrl The URL to fetch. + * @param bool $bDownload Download? + * + * @return bool|mixed Array on success, false on failure. + */ + private function runCurl($sUrl, $bDownload = false) + { + $oCurl = curl_init($sUrl); + curl_setopt_array( + $oCurl, + [ + CURLOPT_BINARYTRANSFER => ($bDownload ? true : false), + CURLOPT_CONNECTTIMEOUT => $this->IMDB_TIMEOUT, + CURLOPT_ENCODING => '', + CURLOPT_FOLLOWLOCATION => 0, + CURLOPT_FRESH_CONNECT => 0, + CURLOPT_HEADER => ($bDownload ? false : true), + CURLOPT_HTTPHEADER => [ + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Charset: utf-8, iso-8859-1;q=0.5', + 'Accept-Language: ' . $this->IMDB_LANG, + ], + CURLOPT_REFERER => 'https://www.imdb.com', + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_SSL_VERIFYHOST => 0, + CURLOPT_SSL_VERIFYPEER => 0, + CURLOPT_TIMEOUT => $this->IMDB_TIMEOUT, + CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0', + CURLOPT_VERBOSE => 0, + ] + ); + $sOutput = curl_exec($oCurl); + $aCurlInfo = curl_getinfo($oCurl); + curl_close($oCurl); + $aCurlInfo['contents'] = $sOutput; + + if (200 !== $aCurlInfo['http_code'] && 302 !== $aCurlInfo['http_code']) { + if ($this->IMDB_DEBUG) { + echo '
cURL returned wrong HTTP code “' . $aCurlInfo['http_code'] . '”, aborting.
'; + } + + return false; + } + + return $aCurlInfo; + } + + /** + * @param string $sUrl The URL to the image to download. + * @param int $cId The cast ID of the actor. + * + * @return string Local path. + */ + private function saveImageCast($sUrl, $cId) + { + if ( ! preg_match('~http~', $sUrl)) { + return 'cast/not-found.jpg'; + } + + $sFilename = $this->sRoot . '/cast/' . $cId . '.jpg'; + if (file_exists($sFilename)) { + return 'cast/' . $cId . '.jpg'; + } + + $aCurlInfo = $this->runCurl($sUrl, true); + $sData = $aCurlInfo['contents']; + if (false === $sData) { + return 'cast/not-found.jpg'; + } + + $oFile = fopen($sFilename, 'x'); + fwrite($oFile, $sData); + fclose($oFile); + + return 'cast/' . $cId . '.jpg'; + } + + /** + * Makes strings with $this->sSeparator as separator result in an array + * + * @param $string + * @return array|string + */ + public function slashStringAsArray($string) { + $ret = $string; + + if(strstr($string, $this->sSeparator)) { + $ret = array(); + $_t = explode($this->sSeparator, $string); + foreach ($_t as $v) { + $v = trim($v); + if(!empty($v)) { + $ret[] = $v; + } + } + } + + return $ret; + } +} diff --git a/webclient/lib/managecollectionfields.class.php b/webclient/lib/managecollectionfields.class.php new file mode 100644 index 0000000..af19d83 --- /dev/null +++ b/webclient/lib/managecollectionfields.class.php @@ -0,0 +1,260 @@ +_DB = $databaseConnectionObject; + $this->_User = $userObj; + } + + /** + * The id from the collection we are working with + * + * @param $id integer + */ + public function setCollection($id) { + if(!empty($id)) { + $this->_collectionId = $id; + } + } + + /** + * Get available fields based on user + * + * @return array + * @todo No rights implemented yet. Maybe not needed. Management done by hand directly on DB + */ + public function getAvailableFields() { + $ret = array(); + + $queryStr = "SELECT `id`, `identifier`, `displayname`, `type`, + `createstring`, `value` + FROM `".DB_PREFIX."_sys_fields` + ORDER BY `displayname`"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + + return $ret; + } + + /** + * Simple comma seperated number string + * + * @param $string string + * @return bool + */ + public function validateFieldSortString($string) { + $ret = false; + + $_t = str_replace(",","",$string); + if(Summoner::validate($_t, 'digit')) { + $ret = true; + } + + return $ret; + } + + /** + * $fieldsSortString have to valided already + * + * @todo remove non existing ones from table + * + * @param $fieldsSortString string + * @return bool + */ + public function updateFields($fieldsSortString) { + $ret = false; + $ids = array(); + + $fieldsSortString = trim($fieldsSortString, ", "); + if(strstr($fieldsSortString, ",")) { + $ids = explode(",", $fieldsSortString); + } + else { + $ids[] = $fieldsSortString; + } + + if(!empty($ids)) { + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + + $queryStr1 = "DELETE FROM `".DB_PREFIX."_collection_fields_".$this->_collectionId."` + WHERE `fk_field_id` NOT IN (".implode(",",$ids).")"; + $q1 = $this->_DB->query($queryStr1); + if($q1 !== false) { + // https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html + $queryStr = "INSERT INTO `".DB_PREFIX."_collection_fields_".$this->_collectionId."` (`fk_field_id`,`sort`) VALUES "; + foreach ($ids as $k => $v) { + $queryStr .= "($v,$k),"; + } + $queryStr = trim($queryStr, ","); + $queryStr .= " AS newEntry(fid,s) ON DUPLICATE KEY UPDATE `sort`=s"; + + $q2 = $this->_DB->query($queryStr); + if($q2 !== false) { + $_newColumns = $this->_getSQLForCollectionColumns($ids); + $alterQuery = false; + if(!empty($_newColumns)) { + $alterString = "ALTER TABLE `".DB_PREFIX."_collection_entry_".$this->_collectionId."`"; + foreach($_newColumns as $k=>$v) { + $alterString .= " ADD ".$v['createstring'].","; + } + $alterString = trim($alterString, ","); + $alterQuery = $this->_DB->query($alterString); + } + if(!empty($_newColumns) && $alterQuery == false) { + $this->_DB->rollback(); + error_log('ERROR Failed to update entry table: '.var_export($alterString, true)); + } + else { + $this->_DB->commit(); + $ret = true; + } + } + else { + $this->_DB->rollback(); + error_log('ERROR Failed to update collection fields: '.var_export($queryStr1, true)); + error_log('ERROR Failed to update collection fields: '.var_export($queryStr, true)); + } + } + } + + return $ret; + } + + /** + * Get the fields for currently loaded collection. + * + * @param bool $refresh True to reload from DB + * @return array + */ + public function getExistingFields($refresh=false) { + if($refresh === false && !empty($this->_cacheExistingSysFields)) { + return $this->_cacheExistingSysFields; + } + + $queryStr = "SELECT `cf`.`fk_field_id` AS id, `sf`.`type`, `sf`.`displayname`, `sf`.`identifier` + FROM `".DB_PREFIX."_collection_fields_".$this->_collectionId."` AS cf + LEFT JOIN `".DB_PREFIX."_sys_fields` AS sf ON `cf`.`fk_field_id` = `sf`.`id` + ORDER BY `cf`.`sort`"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $this->_cacheExistingSysFields[$result['id']] = $result; + } + } + + return $this->_cacheExistingSysFields; + } + + /** + * Get the column names from current collection entry table + * + * @return array + */ + private function _getExistingCollectionColumns() { + $ret = array(); + + $queryStr = "SHOW COLUMNS FROM `".DB_PREFIX."_collection_entry_".$this->_collectionId."`"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + if(!in_array($result['Field'], $this->_protectedDBCols, true)) { + $ret[$result['Field']] = $result['Field']; + } + } + } + + return $ret; + } + + /** + * Get the required SQL information from given field ids + * to create columns in entry table. + * + * @param $columnIds array sort=>fk_field_id + * @return array + */ + private function _getSQLForCollectionColumns($columnIds) { + $_fields = array(); + // enrich with information + $_sysFields = $this->getAvailableFields(); + $_existingDBColumns = $this->_getExistingCollectionColumns(); + if(!empty($columnIds)) { + foreach($columnIds as $sort=>$fieldId) { + if(isset($_sysFields[$fieldId])) { + $_fd = $_sysFields[$fieldId]; + if(isset($_existingDBColumns[$_fd['identifier']])) continue; + if(empty($_fd['createstring'])) continue; + $_fields[$fieldId] = $_fd; + } + } + } + return $_fields; + } +} diff --git a/webclient/lib/managecollections.class.php b/webclient/lib/managecollections.class.php new file mode 100644 index 0000000..fc6104d --- /dev/null +++ b/webclient/lib/managecollections.class.php @@ -0,0 +1,489 @@ +_DB = $databaseConnectionObject; + $this->_User = $userObj; + } + + /** + * Load collection info from table. Checks user rights + * + * @param $id + * @param string $ritghsMode + * @return array + */ + public function getCollection($id,$ritghsMode="read") { + $ret = array(); + + if (Summoner::validate($id, 'digit')) { + $queryStr = "SELECT `c`.`id`, `c`.`name`, `c`.`description`, `c`.`created` + FROM `".DB_PREFIX."_collection` AS c + WHERE ".$this->_User->getSQLRightsString($ritghsMode, "c")." + AND `c`.`id` = '".$this->_DB->real_escape_string($id)."'"; + try { + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows > 0) { + $ret = $query->fetch_assoc(); + } + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + } + } + + return $ret; + } + + /** + * Get all available collections for display based on current user + * + * @return array + */ + public function getCollections() { + $ret = array(); + + $queryStr = "SELECT `c`.`id`, `c`.`name`, `c`.`description`, `c`.`created`, + `c`.`owner`, `c`.`group`, `c`.`rights`, + `u`.`name` AS username, `g`.`name` AS groupname + FROM `".DB_PREFIX."_collection` AS c + LEFT JOIN `".DB_PREFIX."_user` AS u ON `c`.`owner` = `u`.`id` + LEFT JOIN `".DB_PREFIX."_group` AS g ON `c`.`group` = `g`.`id` + WHERE ".$this->_User->getSQLRightsString("read", "c")." + ORDER BY `c`.`name`"; + try { + $query = $this->_DB->query($queryStr); + + if ($query !== false && $query->num_rows > 0) { + while (($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + } + + return $ret; + } + + /** + * Retrieve the groups for selection based on user rights + * + * @return array + */ + public function getGroupsForSelection() { + $ret = array(); + + $queryStr = "SELECT `id`, `name`, `description` + FROM `".DB_PREFIX."_group` + WHERE ".$this->_User->getSQLRightsString()." + ORDER BY `name`"; + try { + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + } + + return $ret; + } + + /** + * Fetch all available users for selection based on current user rights + * + * @return array + */ + public function getUsersForSelection() { + $ret = array(); + + $queryStr = "SELECT `id`, `name`, `login` + FROM `".DB_PREFIX."_user` + WHERE ".$this->_User->getSQLRightsString().""; + try { + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + } + + return $ret; + } + + /** + * Fetch all availbale tools based on current user rights + * + * @return array + */ + public function getToolsForSelection() { + $ret = array(); + + $queryStr = "SELECT `id`, `name`, `description` + FROM `".DB_PREFIX."_tool` + WHERE ".$this->_User->getSQLRightsString().""; + try { + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + } + + return $ret; + } + + /** + * Create new collection entry in collection table. Provide valid data + * only $name will be checked again + * + * @param array $data + * @return bool + */ + public function createCollection($data) { + $ret = false; + + if(!empty($data['name']) === true + && $this->_validNewCollectionName($data['name']) === true + ) { + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + try { + $queryStr = "INSERT INTO `".DB_PREFIX."_collection` + SET `name` = '".$this->_DB->real_escape_string($data['name'])."', + `description` = '".$this->_DB->real_escape_string($data['description'])."', + `owner` = '".$this->_DB->real_escape_string($data['owner'])."', + `group` = '".$this->_DB->real_escape_string($data['group'])."', + `rights` = '".$this->_DB->real_escape_string($data['rights'])."', + `defaultSearchField` = '".$this->_DB->real_escape_string($data['defaultSearchField'])."'"; + $this->_DB->query($queryStr); + $newId = $this->_DB->insert_id; + + + $queryEntry2lookup = "CREATE TABLE `".DB_PREFIX."_collection_entry2lookup_".$newId."` ( + `fk_field` int NOT NULL, + `fk_entry` int NOT NULL, + `value` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, + FULLTEXT KEY `value` (`value`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"; + $this->_DB->query($queryEntry2lookup); + + $queryCollectionFields = "CREATE TABLE `".DB_PREFIX."_collection_fields_".$newId."` ( + `fk_field_id` int NOT NULL, + `sort` int NOT NULL, + UNIQUE KEY `fk_field_id` (`fk_field_id`), + KEY `sort` (`sort`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"; + $this->_DB->query($queryCollectionFields); + + $queryCollectionEntry = "CREATE TABLE `".DB_PREFIX."_collection_entry_".$newId."` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modificationuser` int NOT NULL, + `owner` int NOT NULL, + `group` int NOT NULL, + `rights` char(9) COLLATE utf8mb4_bin NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"; + $this->_DB->query($queryCollectionEntry); + + $this->_updateToolRelation($newId,$data['tool']); + + $this->_DB->commit(); + $ret = true; + } + catch (Exception $e) { + if(DEBUG) var_dump($e->getMessage()); + error_log('ERROR Failed to create entry: '.var_export($e->getMessage(),true)); + $this->_DB->rollback(); + } + } + + return $ret; + } + + /** + * Load the information from collection table for given $id + * + * @param string $id Number + * @return array + */ + public function getEditData($id) { + $ret = array(); + + if (Summoner::validate($id, 'digit')) { + $queryStr = "SELECT `c`.`id`, `c`.`name`, `c`.`description`, `c`.`created`, + `c`.`owner`, `c`.`group`, `c`.`rights`, `c`.`defaultSearchField`, + `u`.`name` AS username, `g`.`name` AS groupname + FROM `".DB_PREFIX."_collection` AS c + LEFT JOIN `".DB_PREFIX."_user` AS u ON `c`.`owner` = `u`.`id` + LEFT JOIN `".DB_PREFIX."_group` AS g ON `c`.`group` = `g`.`id` + WHERE ".$this->_User->getSQLRightsString("read", "c")." + AND `c`.`id` = '".$this->_DB->real_escape_string($id)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + $ret = $query->fetch_assoc(); + $ret['rights'] = Summoner::prepareRightsArray($ret['rights']); + $ret['tool'] = $this->getAvailableTools($id); + } + } + + return $ret; + } + + /** + * Update collection with given data identified by given id + * See method for the fields + * + * @param array $data + * @return bool + */ + public function updateCollection($data) { + $ret = false; + + if(DEBUG) error_log("[DEBUG] ".__METHOD__." data: ".var_export($data,true)); + + if(!empty($data['name']) === true + && $this->_validUpdateCollectionName($data['name'], $data['id']) === true + && Summoner::validate($data['id'], 'digit') + ) { + $queryStr = "UPDATE `".DB_PREFIX."_collection` + SET `name` = '".$this->_DB->real_escape_string($data['name'])."', + `description` = '".$this->_DB->real_escape_string($data['description'])."', + `owner` = '".$this->_DB->real_escape_string($data['owner'])."', + `group` = '".$this->_DB->real_escape_string($data['group'])."', + `rights` = '".$this->_DB->real_escape_string($data['rights'])."', + `defaultSearchField` = '".$this->_DB->real_escape_string($data['defaultSearchField'])."' + WHERE `id` = '".$this->_DB->real_escape_string($data['id'])."'"; + try { + $this->_DB->query($queryStr); + $this->_updateToolRelation($data['id'],$data['tool']); + $ret = true; + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + } + + // update the search field if it is a field from the collection entry table + // and add the index. The lookup table has already a fulltext index on value + $queryCheck = "SHOW COLUMNS FROM `".DB_PREFIX."_collection_entry_".$data['id']."` + LIKE '".$this->_DB->real_escape_string($data['defaultSearchField'])."'"; + $queryStr = "CREATE FULLTEXT INDEX ".$this->_DB->real_escape_string($data['defaultSearchField'])." + ON `".DB_PREFIX."_collection_entry_".$data['id']."` + (`".$this->_DB->real_escape_string($data['defaultSearchField'])."`)"; + try { + $query = $this->_DB->query($queryCheck); + if($query !== false && $query->num_rows > 0) { + $this->_DB->query($queryStr); + // altering or adding an index while data exists + // ignores the collation (?) + // optimize does a recreation and the column collation + // is considered + $this->_DB->query("OPTIMIZE TABLE `".DB_PREFIX."_collection_entry_".$data['id']."`"); + } + } catch (Exception $e) { + if($e->getCode() == "1061") { + // duplicate key + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$e->getMessage()); + } + else { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryCheck); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + error_log("[ERROR] ".__METHOD__." mysql query: ".$e->getMessage()); + } + } + } + + return $ret; + } + + /** + * Delete collection identified by given id + * + * @param $id string Number + * @return bool + */ + public function deleteCollection($id) { + $ret = false; + + // @todo Implement list deletion + // what to do with the entries? + exit('No implemented yet.'); + + if(!empty($id) && Summoner::validate($id, 'digit')) { + $queryStr = "DELETE FROM `".DB_PREFIX."_collection` + WHERE `id` = '".$this->_DB->real_escape_string($id)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false) { + + var_dump("Implement list deletion"); + $ret = true; + } + } + + return $ret; + } + + /** + * Load the tools configured to the given collection + * + * @param $id + * @return array + */ + public function getAvailableTools($id) { + $ret = array(); + + $queryStr = "SELECT `t`.`id`, `t`.`name`, `t`.`description`, `t`.`action`, `t`.`target` + FROM `".DB_PREFIX."_tool2collection` AS t2c + LEFT JOIN `".DB_PREFIX."_tool` AS t ON t2c.fk_collection_id = t.id + WHERE t2c.fk_collection_id = '".$this->_DB->real_escape_string($id)."'"; + try { + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + } + + return $ret; + } + + /** + * Check if given name can be used as a new one + * + * @param $name string + * @return bool + */ + private function _validNewCollectionName($name) { + $ret = false; + if (Summoner::validate($name, 'nospace')) { + $queryStr = "SELECT `id` FROM `".DB_PREFIX."_collection` + WHERE `name` = '".$this->_DB->real_escape_string($name)."'"; + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows < 1) { + $ret = true; + } + } + + return $ret; + } + + /** + * Check if given name can be used as a new name for id + * + * @param $name string + * @param $id string Number + * @return bool + */ + private function _validUpdateCollectionName($name, $id) { + $ret = false; + + if (Summoner::validate($name, 'nospace') + && Summoner::validate($id,'digit') + ) { + $queryStr = "SELECT `id` FROM `".DB_PREFIX."_collection` + WHERE `name` = '".$this->_DB->real_escape_string($name)."' + AND `id` != '".$this->_DB->real_escape_string($id)."'"; + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows < 1) { + $ret = true; + } + } + + return $ret; + } + + /** + * Update the given colletion ($id) with the given tool array + * + * @param $id + * @param $tool + * @return bool + */ + private function _updateToolRelation($id,$tool) { + $ret = false; + + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + try { + $this->_DB->query("DELETE FROM `".DB_PREFIX."_tool2collection` + WHERE `fk_collection_id` = '".$this->_DB->real_escape_string($id)."'"); + if(!empty($tool)) { + foreach($tool as $k=>$v) { + if(!empty($v)) { + $this->_DB->query("INSERT IGNORE INTO `".DB_PREFIX."_tool2collection` + SET `fk_tool_id` = '".$this->_DB->real_escape_string($v)."', + `fk_collection_id` = '".$this->_DB->real_escape_string($id)."'"); + } + } + } + $this->_DB->commit(); + $ret = true; + } catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + $this->_DB->rollback(); + } + + return $ret; + } +} diff --git a/webclient/lib/manageentry.class.php b/webclient/lib/manageentry.class.php new file mode 100644 index 0000000..ef14375 --- /dev/null +++ b/webclient/lib/manageentry.class.php @@ -0,0 +1,689 @@ +_DB = $databaseConnectionObject; + $this->_User = $userObj; + } + + /** + * Set the collection to manage entries from + * + * @param $collectionId + */ + public function setCollection($collectionId) { + if(!empty($collectionId)) { + $this->_collectionId = $collectionId; + } + } + + /** + * Load the fields for the loaded collection + * Also load additional data based on fieldtype and _loadField_ method + * + * @return array + */ + public function getEditFields() { + $ret = array(); + + if(!empty($this->_collectionId)) { + $queryStr = "SELECT `cf`.`fk_field_id` AS id, `sf`.`type`, `sf`.`displayname`, `sf`.`identifier`, + `sf`.`value` + FROM `".DB_PREFIX."_collection_fields_".$this->_DB->real_escape_string($this->_collectionId)."` AS cf + LEFT JOIN `".DB_PREFIX."_sys_fields` AS sf ON `cf`.`fk_field_id` = `sf`.`id` + ORDER BY `cf`.`sort`"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $_mn = '_loadField_'.$result['type']; + if(method_exists($this, $_mn)) { + $result = $this->$_mn($result); + } + $ret[$result['id']] = $result; + } + } + } + + return $ret; + } + + /** + * Load required data for edit. Uses some functions from Mancubus but has + * different data layout. Checks write edit too + * + * @param $entryId + * @return array + */ + public function getEditData($entryId) { + $ret = array(); + + if(!empty($this->_collectionId) && !empty($entryId)) { + $queryStr = "SELECT * + FROM `".DB_PREFIX."_collection_entry_".$this->_DB->real_escape_string($this->_collectionId)."` + WHERE ".$this->_User->getSQLRightsString("write")." + AND `id` = '".$this->_DB->real_escape_string($entryId)."'"; + $query = $this->_DB->query($queryStr); + + if($query !== false && $query->num_rows > 0) { + $_entryFields = $this->getEditFields(); + + if(($result = $query->fetch_assoc()) != false) { + $ret = $this->_mergeEntryWithFields($result, $_entryFields); + $ret['_canDelete'] = $this->_canDelete($entryId); + } + + } + } + + return $ret; + } + + /** + * Create an entry with given data + * + * @param array $data + * @param number $owner + * @param number $group + * @param string $rights + * @param mixed $update Either false for no update or the ID to update + * @return mixed + */ + public function create($data, $owner, $group, $rights, $update=false) { + $ret = false; + + if(DEBUG) error_log("[DEBUG] ".__METHOD__." data: ".var_export($data,true)); + + //@todo there is no setting for individual rights available yet + if(!empty($data) && !empty($owner) && !empty($group) && !empty($rights)) { + + // create the queryData array + // init is the entry in the table. Needed for after stuff + // after returns query and upload which then calls the extra methods + $queryData['init'] = array(); + $queryData['after'] = array(); + foreach ($data as $i=>$d) { + $_mn = '_saveField_'.$d['type']; + if(method_exists($this, $_mn)) { + $queryData = $this->$_mn($d, $queryData); + } + else { + if(DEBUG)error_log("[DEBUG] ".__METHOD__." Missing query function for: ".var_export($d, true)); + } + } + + if(DEBUG) error_log("[DEBUG] ".__METHOD__." queryData: ".var_export($queryData,true)); + + if(!empty($queryData['init'])) { + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + + try { + $queryStr = "INSERT INTO `".DB_PREFIX."_collection_entry_".$this->_collectionId."`"; + if($update !== false && is_numeric($update)) { + $queryStr = "UPDATE `".DB_PREFIX."_collection_entry_".$this->_collectionId."`"; + } + $queryStr .= " SET + `modificationuser` = '".$this->_DB->real_escape_string($owner)."', + `owner` = '".$this->_DB->real_escape_string($owner)."', + `group` = '".$this->_DB->real_escape_string($group)."', + `rights`= '".$this->_DB->real_escape_string($rights)."',"; + $queryStr .= implode(", ",$queryData['init']); + if($update !== false && is_numeric($update)) { + $queryStr .= " WHERE `id` = '".$this->_DB->real_escape_string($update)."'"; + } + + if(DEBUG) error_log("[DEBUG] ".__METHOD__." init queryStr: ".var_export($queryStr,true)); + + $this->_DB->query($queryStr); + + if($update !== false && is_numeric($update)) { + $newId = $update; + } + else { + $newId = $this->_DB->insert_id; + } + + if(!empty($newId)) { + if(!empty($queryData['after']) && isset($queryData['after']['query'])) { + foreach ($queryData['after']['query'] as $q) { + $this->_runAfter_query($q, $newId); + } + } + + if(!empty($queryData['after']) && isset($queryData['after']['upload'])) { + foreach ($queryData['after']['upload'] as $q) { + $this->_runAfter_upload($q, $newId); + } + } + + $this->_DB->commit(); + $ret = $newId; + } + else { + $this->_DB->rollback(); + } + } catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + $this->_DB->rollback(); + } + } + else { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." empty init in: ".var_export($queryData,true)); + } + } + + return $ret; + } + + /** + * Delete given entryId from currently loaded collection + * Checks userrights too. + * + * @param $entryId + * @return bool + */ + public function delete($entryId) { + $ret = false; + + if(!empty($entryId) && !empty($this->_collectionId)) { + + if ($this->_canDelete($entryId)) { + + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + + try { + // remove assets + $_path = PATH_STORAGE.'/'.$this->_collectionId.'/'.$entryId; + if(is_dir($_path) && is_readable($_path)) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." remove assets :".$_path); + $rmDir = Summoner::recursive_remove_directory($_path); + if($rmDir === false) { + throw new Exception("Failed to delete path: ".$_path); + } + } + + // delete data from lookup fields + $queryStr = "DELETE + FROM `".DB_PREFIX."_collection_entry2lookup_".$this->_DB->real_escape_string($this->_collectionId)."` + WHERE `fk_entry` = '".$this->_DB->real_escape_string($entryId)."'"; + if(DEBUG) error_log("[DEBUG] ".__METHOD__." remove lookup queryStr: ".var_export($queryStr,true)); + $this->_DB->query($queryStr); + + // delete entry + $queryStr = "DELETE + FROM `".DB_PREFIX."_collection_entry_".$this->_collectionId."` + WHERE `id` = '".$this->_DB->real_escape_string($entryId)."' + AND " . $this->_User->getSQLRightsString("delete") . ""; + $this->_DB->query($queryStr); + + $this->_DB->commit(); + $ret = true; + } catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + $this->_DB->rollback(); + } + } + } + + return $ret; + } + + /** + * Validates that current use can write the given Entry + * + * @param $entryId + * @return bool + */ + public function canEditEntry($entryId) { + $ret = false; + + if(!empty($entryId) && !empty($this->_collectionId)) { + + $queryStr = "SELECT `id` + FROM `".DB_PREFIX."_collection_entry_".$this->_collectionId."` + WHERE `id` = '".$this->_DB->real_escape_string($entryId)."' + AND " . $this->_User->getSQLRightsString("write") . ""; + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows > 0) { + if (($result = $query->fetch_assoc()) != false) { + $ret = true; + } + } + } + + return $ret; + } + + /** + * Check if given entryid can be deleted from current collection + * and user + * + * @param $entryId + * @return bool + */ + private function _canDelete($entryId) { + $ret = false; + + if(!empty($entryId) && !empty($this->_collectionId)) { + + $queryStr = "SELECT `id` + FROM `".DB_PREFIX."_collection_entry_".$this->_collectionId."` + WHERE `id` = '".$this->_DB->real_escape_string($entryId)."' + AND " . $this->_User->getSQLRightsString("delete") . ""; + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows > 0) { + if (($result = $query->fetch_assoc()) != false) { + $ret = true; + } + } + } + + return $ret; + } + + /** + * Merge the loaded entryData with the to look up entryFields data + * In this case only the fields which have a _loadFieldValue_ method + * are loaded. More is not needed here. + * + * @param $entryData array + * @param $entryFields array + * @return array + */ + private function _mergeEntryWithFields($entryData, $entryFields) { + if(!empty($entryFields)) { + foreach($entryFields as $f) { + $_mnValue = '_loadFieldValue_'.$f['type']; + + if(!isset($entryData[$f['identifier']]) && method_exists($this, $_mnValue) && isset($entryData['id']) ) { + $entryData[$f['identifier']] = $this->$_mnValue($entryData['id'], $f); + } + } + } + return $entryData; + } + + /** + * Load the values for given $entryId for $fieldData + * lookup function for field type lookupmultiple + * + * @see Mancubus + * @param Number $entryId + * @param array $fieldData + * @return array + */ + private function _loadFieldValue_lookupmultiple($entryId, $fieldData) { + $ret = array(); + + if(!empty($entryId) && !empty($fieldData) && !empty($this->_collectionId)) { + $queryStr = "SELECT `value` + FROM `".DB_PREFIX."_collection_entry2lookup_".$this->_DB->real_escape_string($this->_collectionId)."` + WHERE `fk_field` = '".$this->_DB->real_escape_string($fieldData['id'])."' + AND `fk_entry` = '".$this->_DB->real_escape_string($entryId)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[] = $result['value']; + } + } + } + + return $ret; + } + + /** + * Get the single upload file from storage location + * lookup function for field type upload + * + * @see Mancubus + * @param $entryId + * @param $fieldData + * @return string + */ + private function _loadFieldValue_upload($entryId, $fieldData) { + $ret = ""; + if(!empty($entryId) && !empty($fieldData) && !empty($this->_collectionId)) { + + $uploadedFile = glob(PATH_STORAGE.'/'.$this->_collectionId.'/'.$entryId.'/'.$fieldData['identifier'].'-*'); + if(!empty($uploadedFile)) { + foreach ($uploadedFile as $f) { + $ret = basename($f); + break; + } + } + } + return $ret; + } + + /** + * Get the multiple upload files from storage location + * lookup function for field type upload_multiple + * + * @see Mancubus + * @param $entryId + * @param $fieldData + * @return array + */ + private function _loadFieldValue_upload_multiple($entryId, $fieldData) { + $ret = array(); + if(!empty($entryId) && !empty($fieldData) && !empty($this->_collectionId)) { + + $uploadedFile = glob(PATH_STORAGE.'/'.$this->_collectionId.'/'.$entryId.'/'.$fieldData['identifier'].'-*'); + if(!empty($uploadedFile)) { + foreach ($uploadedFile as $f) { + $ret[] = basename($f); + } + } + } + return $ret; + } + + /** + * Provide the options for a selection field by processing the $data['value'] + * since the values are stored in the entry DB as a list + * + * @param $data array + * @return array + */ + private function _loadField_selection($data) { + if(!empty($data) && isset($data['value']) && !empty($data['value'])) { + if(strstr($data['value'], ",")) { + $data['options'] = explode(",", $data['value']); + } + } + return $data; + } + + /** + * Load suggestions based on the existing data for this field + * + * @param $data array Field data + * @return array + */ + private function _loadField_lookupmultiple($data) { + if(!empty($data) && isset($data['id']) && !empty($data['id'])) { + $queryStr = "SELECT DISTINCT(`value`) + FROM `".DB_PREFIX."_collection_entry2lookup_".$this->_DB->real_escape_string($this->_collectionId)."` + WHERE `fk_field` = '".$this->_DB->real_escape_string($data['id'])."'"; + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows > 0) { + while (($result = $query->fetch_assoc()) != false) { + $data['suggestion'][] = $result['value']; + } + } + } + return $data; + } + + /** + * Create part of the insert statement for field type text + * + * @param $data array Field data + * @param $queryData array Query data array + * @return array + */ + private function _saveField_text($data, $queryData) { + $queryData['init'][] = "`".$data['identifier']."` = '".$this->_DB->real_escape_string($data['valueToSave'])."'"; + return $queryData; + } + + /** + * Create part of the insert statement for field type text3 + * + * @param $data array Field data + * @param $queryData array Query data array + * @return array + */ + private function _saveField_text3($data, $queryData) { + return $this->_saveField_text($data, $queryData); + } + + /** + * Create part of the insert statement for field type textarea + * + * @param $data array Field data + * @param $queryData array Query data array + * @return array + */ + private function _saveField_textarea($data, $queryData) { + return $this->_saveField_text($data, $queryData); + } + + /** + * Create part of the insert statement for field type selection + * + * @param $data array Field data + * @param $queryData array Query data array + * @return array + */ + private function _saveField_selection($data, $queryData) { + return $this->_saveField_text($data, $queryData); + } + /** + * Create part of the insert statement for field type year + * + * @param $data array Field data + * @param $queryData array Query data array + * @return array + */ + private function _saveField_year($data, $queryData) { + return $this->_saveField_text($data, $queryData); + } + + /** + * Create part of the insert statement for field type lookupmultiple + * + * @param $data array Field data + * @param $queryData array Query data array + * @return array + */ + private function _saveField_lookupmultiple($data, $queryData) { + $_d = trim($data['valueToSave']); + $_d = trim($_d, ","); + + // first clean since the new data is everything + $queryData['after']['query'][] = "DELETE FROM `".DB_PREFIX."_collection_entry2lookup_".$this->_collectionId."` + WHERE `fk_field` = '".$this->_DB->real_escape_string($data['id'])."' + AND `fk_entry` = '".$this->_replaceEntryString."'"; + if(!empty($_d)) { + $_process = array($_d); + if (strstr($data['valueToSave'], ",")) { + $_process = explode(",", $data['valueToSave']); + } + foreach ($_process as $p) { + $queryData['after']['query'][] = "INSERT IGNORE INTO `".DB_PREFIX."_collection_entry2lookup_".$this->_collectionId."` + SET `fk_field` = '".$this->_DB->real_escape_string($data['id'])."', + `fk_entry` = '".$this->_replaceEntryString."', + `value` = '".$this->_DB->real_escape_string($p)."'"; + } + } + + return $queryData; + } + + /** + * Single upload field + * + * @param $data array The data from _FILES + * @param $queryData array + * @return array + */ + private function _saveField_upload($data, $queryData) { + $_up = $data['uploadData']; + + // delete the single upload + // this way the after query method is triggered without any upload + if(isset($data['deleteData'])) { + $queryData['after']['upload'][] = array( + 'identifier' => $data['identifier'], + 'multiple' => false, + 'deleteData' => $data['deleteData'] + ); + } + + if($_up['error'][$data['identifier']] === 0) { + $_ext = pathinfo($_up['name'][$data['identifier']],PATHINFO_EXTENSION); + $newFilename = sha1($_up['name'][$data['identifier']]).".".$_ext; + + $queryData['after']['upload'][] = array( + 'identifier' => $data['identifier'], + 'name' => $newFilename, + 'tmp_name' => $_up['tmp_name'][$data['identifier']], + 'multiple' => false + ); + } + return $queryData; + } + + /** + * Multiple upload field + * + * @param $data array The data from _FILES + * @param $queryData array + * @return array + */ + private function _saveField_upload_multiple($data, $queryData) { + $_up = $data['uploadData']; + + if(isset($data['deleteData'])) { + $queryData['after']['upload'][] = array( + 'identifier' => $data['identifier'], + 'multiple' => true, + 'deleteData' => $data['deleteData'] + ); + } + + foreach ($_up['error'][$data['identifier']] as $k=>$v) { + if($v === 0) { + $_ext = pathinfo($_up['name'][$data['identifier']][$k],PATHINFO_EXTENSION); + $newFilename = sha1($_up['name'][$data['identifier']][$k]).".".$_ext; + + $queryData['after']['upload'][] = array( + 'identifier' => $data['identifier'], + 'name' => $newFilename, + 'tmp_name' => $_up['tmp_name'][$data['identifier']][$k], + 'multiple' => true + ); + } + } + + return $queryData; + } + + /** + * runs the query and throws query execption if false + * + * @param $queryString + * @param $insertId + */ + private function _runAfter_query($queryString, $insertId) { + if(!empty($queryString) && !empty($insertId)) { + // replace only once to avoid replacing actual data + $queryStr = Summoner::replaceOnce($queryString,$this->_replaceEntryString, $insertId); + $this->_DB->query($queryStr); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." queryStr: ".var_export($queryStr,true)); + } + } + + /** + * Move uploaded into right directory + * If single upload (multiple=false) then remove all the files for this type field first. Works the same + * if you want to remove the upload via edit + * + * Also removes the defined uploads from multiple upload field + * + * @param $uploadData + * @param $insertId + * @throws Exception + */ + private function _runAfter_upload($uploadData, $insertId) { + if(!empty($uploadData) && !empty($insertId)) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." uploadata: ".var_export($uploadData,true)); + $_path = PATH_STORAGE.'/'.$this->_collectionId.'/'.$insertId; + if(!is_dir($_path)) { + if(!mkdir($_path, 0777, true)) { + throw new Exception("Failed to create storage path: ".$_path); + } + } + + if($uploadData['multiple'] === false) { + // single upload. Delete existing first. + // also triggered if the single needs to be deleted + $_existingFiles = glob($_path.'/'.$uploadData['identifier'].'-*'); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." remove single existing: ".var_export($_existingFiles,true)); + if(!empty($_existingFiles)) { + foreach ($_existingFiles as $f) { + unlink($f); + } + clearstatcache(); + } + } + + if($uploadData['multiple'] === true && isset($uploadData['deleteData'])) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." remove multiple existing: ".var_export($uploadData['deleteData'],true)); + foreach ($uploadData['deleteData'] as $k=>$v) { + $_file = $_path.'/'.$v; + if(file_exists($_file)) { + unlink($_file); + } + clearstatcache(); + } + } + + if(isset($uploadData['tmp_name']) && isset($uploadData['name'])) { + if(!move_uploaded_file($uploadData['tmp_name'],$_path.'/'.$uploadData['identifier'].'-'.$uploadData['name'])) { + throw new Exception("Can not move file to: ".$_path.'/'.$uploadData['identifier'].'-'.$uploadData['name']); + } + } + } + } +} diff --git a/webclient/lib/mancubus.class.php b/webclient/lib/mancubus.class.php new file mode 100644 index 0000000..1d1682e --- /dev/null +++ b/webclient/lib/mancubus.class.php @@ -0,0 +1,626 @@ + int, + * 'offset' => int, + * 'orderby' => string, + * 'sortDirection' => ASC|DESC + * + * @var array + */ + private $_queryOptions; + + /** + * Mancubus constructor. + * + * @param $databaseConnectionObject + * @param $userObj + */ + public function __construct($databaseConnectionObject, $userObj) { + $this->_DB = $databaseConnectionObject; + $this->_User = $userObj; + + $this->_setDefaults(); + } + + /** + * Set the to work with collection id + * + * @param $collectionId Number + */ + public function setCollection($collectionId) { + if(!empty($collectionId)) { + $this->_collectionId = $collectionId; + } + } + + /** + * Set the following options which can be used in DB queries + * array( + * 'limit' => RESULTS_PER_PAGE, + * 'offset' => (RESULTS_PER_PAGE * ($_curPage-1)), + * 'orderby' => $_sort, + * 'sortDirection' => $_sortDirection + * ); + * + * @param array $options + */ + public function setQueryOptions($options) { + + if(!isset($options['limit'])) $options['limit'] = 5; + if(!isset($options['offset'])) $options['offset'] = false; + if(!isset($options['sort'])) $options['sort'] = false; + if(!isset($options['sortDirection'])) $options['sortDirection'] = false; + + $this->_queryOptions = $options; + } + + /** + * Get all available collections for display based on current user + * + * @param int $selections Number of selections + * @param int $entries Number of entries + * @param string $search Search string to search for + * @return array + */ + public function getLatest($selections, $entries, $search='') { + $ret = array(); + + $queryStr = "SELECT `c`.`id`, `c`.`name`, `c`.`description`, `c`.`created`, + `c`.`owner`, `c`.`group`, `c`.`rights`, + `u`.`name` AS username, `g`.`name` AS groupname + FROM `".DB_PREFIX."_collection` AS c + LEFT JOIN `".DB_PREFIX."_user` AS u ON `c`.`owner` = `u`.`id` + LEFT JOIN `".DB_PREFIX."_group` AS g ON `c`.`group` = `g`.`id` + WHERE ".$this->_User->getSQLRightsString("read", "c")." + ORDER BY `c`.`name` + LIMIT $selections"; + $query = $this->_DB->query($queryStr); + + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $_mObj = new Mancubus($this->_DB,$this->_User); + $_mObj->setCollection($result['id']); + $_mObj->setQueryOptions(array('limit' => $entries)); + + if(!empty($search)) { + require_once 'lib/trite.class.php'; + $_colObj = new Trite($this->_DB,$this->_User); + $_colObj->load($result['id']); + + $result['entries'] = $_mObj->getEntries($_colObj->param('defaultSearchField'),$search,true); + } + else { + $result['entries'] = $_mObj->getEntries(); + } + $ret[$result['id']] = $result; + unset($_mObj); + } + } + + return $ret; + } + + /** + * Get entries for loaded collection limited by search in + * given colName and colValue + * + * @param string $colName Table col to search + * @param string $colValue Value to search in col + * @param bool $fulltext If col has a fulltext index use it. + * @return array + */ + public function getEntries($colName='', $colValue='',$fulltext=false) { + $ret = array(); + + if(!empty($this->_collectionId)) { + // split since part of it is used later + $querySelect = "SELECT *"; + $queryFrom = " FROM `".DB_PREFIX."_collection_entry_".$this->_DB->real_escape_string($this->_collectionId)."` AS t"; + $queryWhere = " WHERE ".$this->_User->getSQLRightsString("read", "t").""; + + if(!empty($colName) && !empty($colValue)) { + if($fulltext === true) { + $queryWhere .= " AND MATCH (`t`.`".$this->_DB->real_escape_string($colName)."`) + AGAINST ('".$this->_DB->real_escape_string($colValue)."' IN BOOLEAN MODE)"; + } + else { + $queryWhere .= " AND `t`.`" . $this->_DB->real_escape_string($colName) . "` = '" . $this->_DB->real_escape_string($colValue) . "'"; + } + } + + $queryOrder = " ORDER BY"; + if(!empty($this->_queryOptions['sort'])) { + $queryOrder .= ' t.'.$this->_queryOptions['sort']; + } + else { + $queryOrder .= " t.created"; + } + if(!empty($this->_queryOptions['sortDirection'])) { + $queryOrder .= ' '.$this->_queryOptions['sortDirection']; + } + else { + $queryOrder .= " DESC"; + } + + $queryLimit = ''; + if(!empty($this->_queryOptions['limit'])) { + $queryLimit .= " LIMIT ".$this->_queryOptions['limit']; + # offset can be 0 + if($this->_queryOptions['offset'] !== false) { + $queryLimit .= " OFFSET ".$this->_queryOptions['offset']; + } + } + + if(DEBUG) error_log("[DEBUG] ".__METHOD__." data: ".$querySelect.$queryFrom.$queryWhere.$queryOrder.$queryLimit); + + $query = $this->_DB->query($querySelect.$queryFrom.$queryWhere.$queryOrder.$queryLimit); + + if($query !== false && $query->num_rows > 0) { + $_entryFields = $this->_getEntryFields(); + + while(($result = $query->fetch_assoc()) != false) { + $result = $this->_mergeEntryWithFields($result, $_entryFields); + + $ret['results'][$result['id']] = $result; + } + + $query = $this->_DB->query("SELECT COUNT(t.id) AS amount ".$queryFrom.$queryWhere); + $result = $query->fetch_assoc(); + $ret['amount'] = $result['amount']; + } + } + + return $ret; + } + + /** + * Retrive all the data needed to display the entry for given entryId + * @param $entryId + * @return array|mixed + */ + public function getEntry($entryId) { + $ret = array(); + + if(!empty($this->_collectionId) && !empty($entryId)) { + $queryStr = "SELECT * + FROM `".DB_PREFIX."_collection_entry_".$this->_DB->real_escape_string($this->_collectionId)."` + WHERE ".$this->_User->getSQLRightsString("read")." + AND `id` = '".$this->_DB->real_escape_string($entryId)."'"; + $query = $this->_DB->query($queryStr); + + if($query !== false && $query->num_rows > 0) { + $_entryFields = $this->_getEntryFields(); + + if(($result = $query->fetch_assoc()) != false) { + $ret = $this->_mergeEntryWithFields($result, $_entryFields); + } + } + } + + return $ret; + } + + /** + * Get entries for loaded collection by looking for the given value in given field + * + * @param Number $fieldId ID of the field to search in + * @param String $fieldValue Value of the field + * @return array + */ + public function getEntriesByFieldValue($fieldId, $fieldValue) { + $ret = array(); + + $fieldData = array(); + $queryStr = "SELECT `identifier`, `type` FROM `".DB_PREFIX."_sys_fields` + WHERE `id` = '".$this->_DB->real_escape_string($fieldId)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + if(($result = $query->fetch_assoc()) != false) { + $fieldData = $result; + } + } + + if(empty($fieldData)) return $ret; + + if($fieldData['type'] !== "lookupmultiple") { + return $this->getEntries($fieldData['identifier'], $fieldValue); + } + + $querySelect = "SELECT `fk_entry`"; + $queryFrom = " FROM `".DB_PREFIX."_collection_entry2lookup_".$this->_DB->real_escape_string($this->_collectionId)."` AS t"; + $queryWhere = " WHERE t.fk_field = '".$this->_DB->real_escape_string($fieldId)."' + AND t.value = '".$this->_DB->real_escape_string($fieldValue)."'"; + + $queryOrder = " ORDER BY"; + if(!empty($this->_queryOptions['sort'])) { + $queryOrder .= ' t.'.$this->_queryOptions['sort']; + } + else { + $queryOrder .= " t.value"; + } + if(!empty($this->_queryOptions['sortDirection'])) { + $queryOrder .= ' '.$this->_queryOptions['sortDirection']; + } + else { + $queryOrder .= " DESC"; + } + + $queryLimit = ''; + if(!empty($this->_queryOptions['limit'])) { + $queryLimit .= " LIMIT ".$this->_queryOptions['limit']; + # offset can be 0 + if($this->_queryOptions['offset'] !== false) { + $queryLimit .= " OFFSET ".$this->_queryOptions['offset']; + } + } + + $query = $this->_DB->query($querySelect.$queryFrom.$queryWhere.$queryOrder.$queryLimit); + + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $_r = $this->getEntry($result['fk_entry']); + $ret['results'][$_r['id']] = $_r; + } + + $query = $this->_DB->query("SELECT COUNT(t.value) AS amount ".$queryFrom.$queryWhere); + $result = $query->fetch_assoc(); + $ret['amount'] = $result['amount']; + } + + return $ret; + } + + /** + * Get tags for loaded collection. Provide earch term to use match against db search + * + * @todo Replace with trite class + * + * @param mixed $search Search term + * @return array + */ + public function getTags($search=false) { + $ret = array(); + + if(!empty($this->_collectionId)) { + $queryStr = "SELECT `cf`.`fk_field_id` AS id, `sf`.`type`, `sf`.`displayname`, `sf`.`identifier` + FROM `".DB_PREFIX."_collection_fields_".$this->_DB->real_escape_string($this->_collectionId)."` AS cf + LEFT JOIN `".DB_PREFIX."_sys_fields` AS sf ON `cf`.`fk_field_id` = `sf`.`id` + WHERE `sf`.`searchtype` = 'tag' + ORDER BY `sf`.`displayname`"; + + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + $ret[$result['id']]['entries'] = array(); + + $_mn = '_loadTagDistinct_'.$result['type']; + if(method_exists($this, $_mn)) { + $ret[$result['id']]['entries'] = $this->$_mn($result,$search); + } + } + } + } + + return $ret; + } + + /** + * Return the storage info for loaded collection + * Used by API + * @return array|mixed + */ + public function getEntryStructure() { + $ret = array(); + + $_entryFields = $this->_getEntryFields(); + $ret = $this->_mergeEntryWithFields($ret, $_entryFields); + + return $ret; + } + + /** + * Load the fields from the loaded collection + * @return array + */ + private function _getEntryFields() { + $ret = array(); + + if(!empty($this->_collectionId)) { + $queryStr = "SELECT `cf`.`fk_field_id` AS id, `sf`.`type`, `sf`.`displayname`, `sf`.`identifier`, + `sf`.`value` AS preValue, `sf`.`apiinfo` + FROM `".DB_PREFIX."_collection_fields_".$this->_DB->real_escape_string($this->_collectionId)."` AS cf + LEFT JOIN `".DB_PREFIX."_sys_fields` AS sf ON `cf`.`fk_field_id` = `sf`.`id` + ORDER BY `cf`.`sort`"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + } + + return $ret; + } + + /** + * Merge the loaded information from collection_entry with the given + * configured fields + * @param array $entryData Loaded entry + * @param array $entryFields Loaded fields + * @return mixed + */ + private function _mergeEntryWithFields($entryData, $entryFields) { + if(!empty($entryFields)) { + foreach($entryFields as $f) { + $_mnValue = '_loadFieldValue_'.$f['type']; + + if(isset($entryData[$f['identifier']])) { + $f['value'] = $entryData[$f['identifier']]; + unset($entryData[$f['identifier']]); + } elseif(method_exists($this, $_mnValue) && isset($entryData['id'])) { + $f['value'] = $this->$_mnValue($entryData['id'], $f); + } + + $_mnSelectionValue = '_loadFieldSelection_'.$f['type']; + if(method_exists($this, $_mnSelectionValue) && isset($f['preValue'])) { + $f['preValue'] = $this->$_mnSelectionValue($f['preValue']); + } + + $entryData['fields'][$f['identifier']] = $f; + } + } + return $entryData; + } + + /** + * Load the values for given $entryId for $fieldData + * lookup function for field type lookupmultiple + * @param Numer $entryId + * @param array $fieldData + * @return array + */ + private function _loadFieldValue_lookupmultiple($entryId, $fieldData) { + $ret = array(); + + if(!empty($entryId) && !empty($fieldData) && !empty($this->_collectionId)) { + $queryStr = "SELECT `value` + FROM `".DB_PREFIX."_collection_entry2lookup_".$this->_DB->real_escape_string($this->_collectionId)."` + WHERE `fk_field` = '".$this->_DB->real_escape_string($fieldData['id'])."' + AND `fk_entry` = '".$this->_DB->real_escape_string($entryId)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[] = $result['value']; + } + } + } + + return $ret; + } + + /** + * Get the single upload file from storage location + * lookup function for field type upload + * @param $entryId + * @param $fieldData + * @return string + */ + private function _loadFieldValue_upload($entryId, $fieldData) { + $ret = ""; + if(!empty($entryId) && !empty($fieldData) && !empty($this->_collectionId)) { + + $uploadedFile = glob(PATH_STORAGE.'/'.$this->_collectionId.'/'.$entryId.'/'.$fieldData['identifier'].'-*'); + if(!empty($uploadedFile)) { + foreach ($uploadedFile as $f) { + $ret = basename($f); + break; + } + } + } + return $ret; + } + + /** + * Get the multiple upload files from storage location + * lookup function for field type upload_multiple + * @param $entryId + * @param $fieldData + * @return array + */ + private function _loadFieldValue_upload_multiple($entryId, $fieldData) { + $ret = array(); + if(!empty($entryId) && !empty($fieldData) && !empty($this->_collectionId)) { + + $uploadedFile = glob(PATH_STORAGE.'/'.$this->_collectionId.'/'.$entryId.'/'.$fieldData['identifier'].'-*'); + if(!empty($uploadedFile)) { + foreach ($uploadedFile as $f) { + $ret[] = basename($f); + } + } + } + return $ret; + } + + /** + * Load and prepare the value for a selection field + * + * @param $data string + * @return array + */ + private function _loadFieldSelection_selection($data) { + $ret = array(); + + if(is_string($data)) { + if(strstr($data, ',')) { + $ret = explode(',',$data); + } + else { + $ret[] = $data; + } + } + + return $ret; + } + + /** + * Load the selection as tag. + * Search is a 1:1 match + * + * @param array $fieldData The sys field data + * @param mixed $search Searchterm + * @return array + */ + private function _loadTagDistinct_selection($fieldData,$search=false) { + return $this->_loadColAsTagFromEntryTable($fieldData['identifier'],$search); + } + + /** + * Load the data for lookupmultiple field. Provide field id and optional searchterm. + * Uses currently loaded collection + * + * @param array $fieldData The field data to use + * @param mixed $search Searchterm to run a match against DB search + * @return array + */ + private function _loadTagDistinct_lookupmultiple($fieldData,$search=false) { + $ret = array(); + + if(!empty($fieldData) && !empty($this->_collectionId)) { + $queryStr = "SELECT DISTINCT(`value`) + FROM `".DB_PREFIX."_collection_entry2lookup_".$this->_DB->real_escape_string($this->_collectionId)."` + WHERE `fk_field` = '".$this->_DB->real_escape_string($fieldData['id'])."'"; + if(!empty($search)) { + $queryStr .= " AND MATCH (`value`) AGAINST ('" . $this->_DB->real_escape_string($search) . "' IN BOOLEAN MODE)"; + } + + try { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows > 0) { + while (($result = $query->fetch_assoc()) != false) { + $ret[] = $result['value']; + } + } + } + catch (Exception $e) { + error_log("[ERROR] ".__METHOD__." mysql catch: ".$e->getMessage()); + + } + } + + return $ret; + } + + /** + * Load the data from lookupmultiple field. In this case $fieldata is overwritten + * and year is used. + * + * @param array $fieldData + * @param bool $search + * @return array + */ + private function _loadTagDistinct_year($fieldData,$search=false) { + return $this->_loadColAsTagFromEntryTable("year",$search); + } + + /** + * Get the distinct data from a col and optionaml search term + * + * @param $colname + * @param $search + * @return array + */ + private function _loadColAsTagFromEntryTable($colname,$search) { + $ret = array(); + + if(!empty($colname) && !empty($this->_collectionId)) { + if(!empty($search)) { + $queryStr = "SELECT `".$this->_DB->real_escape_string($colname)."` + FROM `".DB_PREFIX."_collection_entry_".$this->_DB->real_escape_string($this->_collectionId)."`"; + $queryStr .= " WHERE `".$colname."` = '".$this->_DB->real_escape_string($search)."'"; + } + else { + $queryStr = "SELECT DISTINCT(`".$this->_DB->real_escape_string($colname)."`) + FROM `".DB_PREFIX."_collection_entry_".$this->_DB->real_escape_string($this->_collectionId)."`"; + } + + $queryStr .= " ORDER BY `".$this->_DB->real_escape_string($colname)."` DESC"; + + try { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + if(!empty($result[$colname])) { + $ret[] = $result[$colname]; + } + } + } + } + catch (Exception $e) { + error_log("[ERROR] ".__METHOD__." mysql catch: ".$e->getMessage()); + } + } + + + return $ret; + } + + /** + * set some defaults by init of the class + */ + private function _setDefaults() { + // default query options + $options['limit'] = 5; + $options['offset'] = false; + $options['sort'] = false; + $options['sortDirection'] = false; + $this->setQueryOptions($options); + } +} diff --git a/webclient/lib/possessed.class.php b/webclient/lib/possessed.class.php new file mode 100644 index 0000000..0be12c8 --- /dev/null +++ b/webclient/lib/possessed.class.php @@ -0,0 +1,377 @@ +_DB = $db; + } + + /** + * Retrieve the groups for selection + * + * @return array + */ + public function getGroups() { + $ret = array(); + + $queryStr = "SELECT `id`, `name`, `description` FROM `".DB_PREFIX."_group` ORDER BY `name`"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + + return $ret; + } + + /** + * Fetch all available users for management + * + * @return array + */ + public function getUsers() { + $ret = array(); + + $queryStr = "SELECT `id`, `login`, `name`, `active`, `baseGroupId`, `protected`, `created` + FROM `".DB_PREFIX."_user`"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + $ret[$result['id']]['groups'] = $this->_loadUserGroupInfo($result['id']); + } + } + + return $ret; + } + + /** + * Create or update a user and set the required user releations + * + * @param $username string + * @param $login string + * @param $password string + * @param $group string Number + * @param bool $active + * @return bool + */ + public function createUser($username, $login, $password, $group, $active=false) { + $ret = false; + + if(!empty($login) === true + && $this->_validNewLogin($login) == true + && $this->_validUsergroup($group) == true + &&(!empty($password)) + ) { + if ($active === true) { + $active = "1"; + } else { + $active = "0"; + } + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + + $_password = password_hash($password, PASSWORD_DEFAULT); + + $queryStr = "INSERT INTO `".DB_PREFIX . "_user` + SET `name` = '".$this->_DB->real_escape_string($username)."', + `login` = '".$this->_DB->real_escape_string($login)."', + `password` = '".$this->_DB->real_escape_string($_password)."', + `active` = '".$this->_DB->real_escape_string($active)."', + `baseGroupId` = '".$this->_DB->real_escape_string($group)."', + `rights` = 'rwxr--r--', + `owner` = 0, + `group` = '".$this->_DB->real_escape_string($group)."'"; + $query = $this->_DB->query($queryStr); + + if ($query !== false) { + $_userid = $this->_DB->insert_id; + $this->_DB->query("UPDATE `".DB_PREFIX . "_user` + SET `owner` = '".$this->_DB->real_escape_string($_userid)."' + WHERE `id` = '".$this->_DB->real_escape_string($_userid)."'"); + $_setGroupRelation = $this->_setGroupReleation($_userid,$group); + if($_setGroupRelation !== false) { + $this->_DB->commit(); + $ret = true; + } + $this->_DB->rollback(); + error_log('ERROR Failed to insert user releation: '.var_export($queryStr, true)); + } else { + $this->_DB->rollback(); + error_log('ERROR Failed to insert user: '.var_export($queryStr, true)); + } + } + + return $ret; + } + + /** + * Update given user id with given data + * + * @param $id + * @param $username + * @param $login + * @param $password + * @param $group + * @param bool $active + * @param bool $refreshApiToken + * @return bool + */ + public function updateUser($id, $username, $login, $password, $group, $active=false, $refreshApiToken=false) { + $ret = false; + + if(!empty($login) === true + && $this->_validUpdateLogin($login,$id) == true + && $this->_validUsergroup($group) == true + && !empty($id) + ) { + if ($active === true) { + $active = "1"; + } else { + $active = "0"; + } + + $_password = password_hash($password, PASSWORD_DEFAULT); + + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + + $queryStr = "UPDATE `".DB_PREFIX . "_user` + SET `name` = '".$this->_DB->real_escape_string($username)."', + `login` = '".$this->_DB->real_escape_string($login)."', + `active` = '".$this->_DB->real_escape_string($active)."', + `baseGroupId` = '".$this->_DB->real_escape_string($group)."'"; + if(Summoner::validate($password,'text')) { + $queryStr .= ", `password` = '".$this->_DB->real_escape_string($_password)."'"; + } + if($refreshApiToken === true) { + $queryStr .= ", `apiToken` = '".md5(base64_encode(openssl_random_pseudo_bytes(30)))."'"; + $queryStr .= ", `apiTokenValidDate` = CURRENT_TIMESTAMP() + INTERVAL 1 DAY"; + } + $queryStr .= " WHERE `id` = '".$this->_DB->real_escape_string($id)."' + AND `protected` = '0'"; + $query = $this->_DB->query($queryStr); + + if ($query !== false) { + $_setGroupRelation = $this->_setGroupReleation($id,$group, true); + if($_setGroupRelation !== false) { + $this->_DB->commit(); + $ret = true; + } + $this->_DB->rollback(); + error_log('ERROR Failed to insert user releation: '.var_export($queryStr, true)); + } else { + $this->_DB->rollback(); + error_log('ERROR Failed to insert user: '.var_export($queryStr, true)); + } + } + + return $ret; + } + + /** + * Load the userinformation and groups for given id + * + * @param $userId string Number + * @return array + */ + public function getEditData($userId) { + $ret = array(); + + if(Summoner::validate($userId,'digit')) { + $queryStr = "SELECT `id`, `login`, `name`, `active`, `baseGroupId`, `created`,`apiToken`,`apiTokenValidDate` + FROM `".DB_PREFIX."_user` + WHERE `protected` = '0' + AND `id` = '".$this->_DB->real_escape_string($userId)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows == 1) { + $ret = $query->fetch_assoc(); + $ret['groups'] = $this->_loadUserGroupInfo($userId); + } + + } + + return $ret; + } + + /** + * Delete user by given user id + * + * @param $id string Number + * @return bool + */ + public function deleteUser($id) { + $ret = false; + + if(!empty($id)) { + $this->_DB->begin_transaction(MYSQLI_TRANS_START_READ_WRITE); + + $d1 = $this->_DB->query("DELETE FROM `".DB_PREFIX."_user` + WHERE `id` = '".$this->_DB->real_escape_string($id)."' + AND `protected` = '0'"); + $d2 = $this->_DB->query("DELETE FROM `".DB_PREFIX."_user2group` WHERE `fk_user_id` = '".$this->_DB->real_escape_string($id)."'"); + $d3 = $this->_DB->query("DELETE FROM `".DB_PREFIX."_userSession` WHERE `fk_user_id` = '".$this->_DB->real_escape_string($id)."'"); + + if($d1 !== false && $d2 !== false && $d3 !== false) { + $this->_DB->commit(); + $ret = true; + } + else { + $this->_DB->rollback(); + } + } + + return $ret; + } + + /** + * Check if given login can be used as a new one + * + * @param string $login + * @return bool + */ + private function _validNewLogin($login) { + $ret = false; + if (Summoner::validate($login, 'nospace')) { + $queryStr = "SELECT `id` FROM `".DB_PREFIX."_user` + WHERE `login` = '".$this->_DB->real_escape_string($login)."'"; + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows < 1) { + $ret = true; + } + } + + return $ret; + } + + /** + * Check if given $login can be used as a new login for given id + * + * @param string $login + * @param string $id Number + * @return bool + */ + private function _validUpdateLogin($login,$id) { + $ret = false; + if (Summoner::validate($login, 'nospace')) { + $queryStr = "SELECT `id` FROM `" . DB_PREFIX . "_user` + WHERE `login` = '".$this->_DB->real_escape_string($login)."' + AND `id` != '".$this->_DB->real_escape_string($id)."'"; + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows < 1) { + $ret = true; + } + } + + return $ret; + } + + /** + * check if given group id is present + * + * @param string $groupId Number + * @return bool + */ + private function _validUsergroup($groupId) { + $ret = false; + + if(Summoner::validate($groupId,'digit')) { + $queryStr = "SELECT `id` FROM `".DB_PREFIX."_group` + WHERE `id` = '".$this->_DB->real_escape_string($groupId)."'"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + $ret = true; + } + } + + return $ret; + } + + /** + * Set user to group releation in database. + * clean will delete all existing ones for given userid first. + * + * @param string $userid Number + * @param string $groupid Number + * @param bool $clean + * @return bool + */ + private function _setGroupReleation($userid, $groupid, $clean=false) { + $ret = false; + + if(Summoner::validate($userid,'digit') + && Summoner::validate($groupid,'digit')) { + + if($clean === true) { + $this->_DB->query("DELETE FROM `".DB_PREFIX."_user2group` + WHERE `fk_user_id` = '".$this->_DB->real_escape_string($userid)."'"); + } + + $queryStr = "INSERT IGNORE INTO `".DB_PREFIX."_user2group` + SET `fk_user_id` = '".$this->_DB->real_escape_string($userid)."', + `fk_group_id` = '".$this->_DB->real_escape_string($groupid)."'"; + $ret = $this->_DB->query($queryStr); + } + + return $ret; + } + + /** + * Load all the groups the user is in and the information of them + * + * @param $userId string Number + * @return array + */ + private function _loadUserGroupInfo($userId) { + $ret = array(); + + $queryStr = "SELECT g.name AS groupName, + g.description AS groupDescription, + g.id AS groupId + FROM `".DB_PREFIX."_user2group` AS u2g, + `".DB_PREFIX."_group` AS g + WHERE u2g.fk_user_id = '".$this->_DB->real_escape_string($userId)."' + AND u2g.fk_group_id = g.id"; + $query = $this->_DB->query($queryStr); + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['groupId']] = array( + 'groupName' => $result['groupName'], + 'groupDescription' => $result['groupDescription'] + ); + } + } + + return $ret; + } +} diff --git a/webclient/lib/spectre.class.php b/webclient/lib/spectre.class.php new file mode 100644 index 0000000..ced903f --- /dev/null +++ b/webclient/lib/spectre.class.php @@ -0,0 +1,108 @@ +_DB = $databaseConnectionObject; + $this->_User = $userObj; + } + + /** + * Validate given request string + * + * @param $request string + * @return bool + */ + public function allowedRequests($request) { + $ret = false; + + if(in_array($request, $this->_allowedRequests)) { + $ret = true; + } + + return $ret; + } + + /** + * With given data build the structure to create a add post + * request + * + * @param $data + * @return array + */ + public function buildAddStructure($data) { + $ret = array(); + + if(!empty($data) && is_array($data)) { + foreach($data as $k=>$v) { + $ret[$k] = array('input' => $v['apiinfo']); + } + } + + return $ret; + } + + /** + * rewrite the data from curl into the format the + * POST via web frontend creates + * "The problem occurs when you have a form that uses both single file and HTML array feature." + * + * @param $data + * @return array + */ + public function prepareFilesArray($data) { + $ret = array(); + + if(!empty($data)) { + foreach($data as $fieldName=>$fdata) { + foreach($fdata as $k=>$v) { + $ret[$k][$fieldName] = $v; + } + + } + } + + return $ret; + } +} diff --git a/webclient/lib/summoner.class.php b/webclient/lib/summoner.class.php new file mode 100644 index 0000000..15ccefd --- /dev/null +++ b/webclient/lib/summoner.class.php @@ -0,0 +1,685 @@ +$data) { + if(!empty($data['read']) && $data['read'] == "1") { + $rsArr[$type]['read'] = "r"; + } + else { + $rsArr[$type]['read'] = "-"; + } + + if(!empty($data['write']) && $data['write'] == "1") { + $rsArr[$type]['write'] = "w"; + } + else { + $rsArr[$type]['write'] = "-"; + } + + if(!empty($data['delete']) && $data['delete'] == "1") { + $rsArr[$type]['delete'] = "x"; + } + else { + $rsArr[$type]['delete'] = "-"; + } + } + + $rString = $rsArr['user']['read'].$rsArr['user']['write'].$rsArr['user']['delete']; + $rString .= $rsArr['group']['read'].$rsArr['group']['write'].$rsArr['group']['delete']; + $rString .= $rsArr['other']['read'].$rsArr['other']['write'].$rsArr['other']['delete']; + + if(strlen($rString) != 9) { + $ret = false; + // invalid rights string !! + } + else { + $ret = $rString; + } + } + + return $ret; + } + + /** + * Creates from given rights string the rights array + * @param $rightsString + * @return array + */ + static function prepareRightsArray($rightsString) { + $ret = array(); + + if(self::isRightsString($rightsString) === true) { + $ret['user']['read'] = '-'; + $ret['user']['write'] = '-'; + $ret['user']['delete'] = '-'; + if($rightsString[0] === 'r') $ret['user']['read'] = 'r'; + if($rightsString[1] === 'w') $ret['user']['write'] = 'w'; + if($rightsString[2] === 'x') $ret['user']['delete'] = 'x'; + + $ret['group']['read'] = '-'; + $ret['group']['write'] = '-'; + $ret['group']['delete'] = '-'; + if($rightsString[3] === 'r') $ret['group']['read'] = 'r'; + if($rightsString[4] === 'w') $ret['group']['write'] = 'w'; + if($rightsString[5] === 'x') $ret['group']['delete'] = 'x'; + + $ret['other']['read'] = '-'; + $ret['other']['write'] = '-'; + $ret['other']['delete'] = '-'; + if($rightsString[6] === 'r') $ret['other']['read'] = 'r'; + if($rightsString[7] === 'w') $ret['other']['write'] = 'w'; + if($rightsString[8] === 'x') $ret['other']['delete'] = 'x'; + } + + return $ret; + } + + /** + * get the mime type for given file + * uses either mime_content_type or finfo + * @param string $file The absolute path to the file + * @return mixed|string + */ + static function getMimeType($file) { + $mime = 'application/octet-stream'; # default + + if(function_exists('mime_content_type') !== true) { + $mime = mime_content_type($file); + } + elseif(function_exists('finfo_open') === true) { + # provide empty magic file, system default file will be used + $finfo = finfo_open(FILEINFO_MIME_TYPE,null); + if($finfo) { + $mime = finfo_file($finfo, $file); + finfo_close($finfo); + } + + # the mime info returns sometimes "application/x-gzip; charset=binary" + # but wee need the part before the ; + if(strstr($mime,';')) { + $tmp = explode(";",$mime); + $mime = $tmp[0]; + } + } + + return $mime; + } + + /** + * use the mimeType string to return the string to be used as an icon identifier + * eg. application/pdf => pdf + * @param string $mime + * @return string $ret + */ + static function mimeToIcon($mime) { + $ret = 'unknown'; + + if(!empty($mime) && strstr($mime,'/') !== false) { + $tmp = explode('/', $mime); + $ret = $tmp[1]; + } + elseif($mime === "directory") { + $ret = "dir"; + } + + return $ret; + } + + /** + * read a dir and return the entries as an array + * with full path to the files + * @param string $directory The absolute path to the directory + * @param array $ignore An Array with strings to ignored + * @param boolean $recursive If we run a recursive scan or not + * @return array + */ + static function readDir($directory,$ignore=array(),$recursive=false) { + $files = array(); + + $dh = opendir($directory); + while(false !== ($file = readdir($dh))) { + if($file[0] ==".") continue; + if(!empty($ignore)) { + foreach ($ignore as $ig) { + if(strstr($file,$ig)) continue 2; + } + } + + if(is_file($directory."/".$file)) { + array_push($files, $directory."/".$file); + } + elseif($recursive === true) { + array_push($files, $directory."/".$file); + $files = array_merge($files, self::readDir($directory."/".$file,$ignore, $recursive)); + } + elseif(is_dir($directory."/".$file)) { + array_push($files, $directory."/".$file); + } + } + closedir($dh); + + return $files; + } + + /** + * delete and/or empty a diretory + * + * $empty = true => empty the diretory but do not delete it + * + * @param string $directory + * @param boolean $empty + * @param mixed $fTime If not false remove files older then this value in sec. + * @return boolean + */ + static function recursive_remove_directory($directory, $empty=false,$fTime=false) { + // if the path has a slash at the end we remove it here + if(substr($directory,-1) == '/') { + $directory = substr($directory,0,-1); + } + + // if the path is not valid or is not a directory ... + if(!file_exists($directory) || !is_dir($directory)) { + // ... we return false and exit the function + return false; + + // ... if the path is not readable + }elseif(!is_readable($directory)) { + // ... we return false and exit the function + return false; + + // ... else if the path is readable + } + else { + // we open the directory + $handle = opendir($directory); + + // and scan through the items inside + while (false !== ($item = readdir($handle))) { + // if the filepointer is not the current directory + // or the parent directory + //if($item != '.' && $item != '..' && $item != '.svn') { + if($item[0] != '.') { + // we build the new path to delete + $path = $directory.'/'.$item; + + // if the new path is a directory + if(is_dir($path)) { + // we call this function with the new path + self::recursive_remove_directory($path); + + // if the new path is a file + } + else { + // we remove the file + if($fTime !== false && is_int($fTime)) { + // check filemtime + $ft = filemtime($path); + $offset = time()-$fTime; + if($ft <= $offset) { + unlink($path); + } + } + else { + unlink($path); + } + } + } + } + // close the directory + closedir($handle); + + // if the option to empty is not set to true + if($empty == false) { + // try to delete the now empty directory + if(!rmdir($directory)) { + // return false if not possible + return false; + } + } + // return success + return true; + } + } + + /** + * execute a curl call to the fiven $url + * @param string $url The request url + * @param int $port + * @return bool|string + */ + static function curlCall($url,$port=80) { + $ret = false; + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + curl_setopt($ch, CURLOPT_PORT, $port); + + $do = curl_exec($ch); + if(is_string($do) === true) { + $ret = $do; + } + else { + $ret = false; + } + + curl_close($ch); + + return $ret; + } + + /** + * check if a string strts with a given string + * + * @param string $haystack + * @param string $needle + * @return boolean + */ + static function startsWith($haystack, $needle) { + $length = strlen($needle); + return (substr($haystack, 0, $length) === $needle); + } + + /** + * check if a string ends with a given string + * + * @param string $haystack + * @param string $needle + * @return boolean + */ + static function endsWith($haystack, $needle) { + $length = strlen($needle); + if ($length == 0) { + return true; + } + + return (substr($haystack, -$length) === $needle); + } + + /** + * http://de1.php.net/manual/en/function.getimagesize.php + * http://php.net/manual/en/function.imagecreatefromjpeg.php + * + * @param string $file The absolute path to the image file + * @param number $width + * @param number $height + * @return boolean + */ + static function createThumbnail($file,$width=ADMIN_THUMBNAIL_DEFAULT_WIDTH,$height=ADMIN_THUMBNAIL_DEFAULT_HEIGHT) { + $ret = false; + + if(!is_file($file)) return false; + # check if this is a support file type to create a thumbnail + $mimeType = self::getMimeType($file); + if(!strstr(ADMIN_THUMBNAIL_SUPPORTED_FILE_TYPES, $mimeType)) return false; + + // Get new dimensions + $imageinfo = getimagesize($file); + + if(empty($imageinfo)) return false; + + $thumbnailName = $file.ADMIN_THUMBNAIL_IDENTIFIER.".".$height."x".$width; + + $width_orig = $imageinfo[0]; + $height_orig = $imageinfo[1]; + $ratio_orig = $width_orig/$height_orig; + + if ($width/$height > $ratio_orig) { + $width = $height*$ratio_orig; + } else { + $height = $width/$ratio_orig; + } + + $im = false; + + // Resample + $image_p = imagecreatetruecolor($width, $height); + + switch ($imageinfo[2]) { + case IMAGETYPE_GIF: + $im = imageCreateFromGif($file); + imagecopyresampled($image_p, $im, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); + imagegif($image_p, $thumbnailName); + break; + + case IMAGETYPE_JPEG: + $im = imageCreateFromJpeg($file); + imagecopyresampled($image_p, $im, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); + // save + $do = imagejpeg($image_p, $thumbnailName, 70); + break; + + case IMAGETYPE_PNG: + $im = imageCreateFromPng($file); + imagecopyresampled($image_p, $im, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); + imagepng($image_p, $thumbnailName, 5); + break; + } + + imagedestroy($im); + imagedestroy($image_p); + + if(file_exists($thumbnailName)) { + $ret = true; + } + + return $ret; + } + + /** + * fix the filesystem filenames. Remove whitespace and ... + * @param array $filenames File or folder list + * @return array + */ + static function fixAssetFilenames($filenames) { + $ret = $filenames; + + foreach($filenames as $k=>$file) { + if(file_exists($file)) { + if(strstr($file, " ")) { + # we do not allow any whitespace in a filename + $newFilename = str_replace(" ", "-", $file); + rename($file, $newFilename); + $filenames[$k] = $newFilename; + } + } + } + + return $filenames; + } + + /** + * simulate the Null coalescing operator in php5 + * + * this only works with arrays and checking if the key is there and echo/return it. + * + * http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op + * + * @param $array + * @param $key + * @return bool|mixed + */ + static function ifset($array,$key) { + return isset($array[$key]) ? $array[$key] : false; + } + + /** + * based on self::ifset check also the value + * + * @param $array + * @param $key + * @param $value + * @return bool + */ + static function ifsetValue($array,$key,$value) { + if(self::ifset($array,$key)) { + return $array[$key] == $value; + } + return false; + } + + /** + * Replace in $heystack the $needle with $replace only once + * + * @param $haystack string + * @param $needle string + * @param $replace string + * @return string + */ + static function replaceOnce($haystack, $needle, $replace) { + $newstring = $haystack; + $pos = strpos($haystack, $needle); + if ($pos !== false) { + $newstring = substr_replace($haystack, $replace, $pos, strlen($needle)); + } + return $newstring; + } + + /** + * http_build_query with modify array + * modify will add: key AND value not empty + * modify will remove: only key with no value + * + * @param $array + * @param array $modify + * @return string + */ + static function createFromParameterLinkQuery($array,$modify=array()) { + $ret = ''; + + if(!empty($modify)) { + foreach($modify as $k=>$v) { + if(empty($v)) { + unset($array[$k]); + } + else { + $array[$k] = $v; + } + } + } + + if(!empty($array)) { + $ret = http_build_query($array); + } + + return $ret; + } +} diff --git a/webclient/lib/tentacle.class.php b/webclient/lib/tentacle.class.php new file mode 100644 index 0000000..398d220 --- /dev/null +++ b/webclient/lib/tentacle.class.php @@ -0,0 +1,88 @@ +_DB = $databaseConnectionObject; + $this->_User = $userObj; + } + + /** + * Validate if given action is a valid tool and if the user has access + * + * @param $identifier + * @return bool + */ + public function validate($identifier) { + $ret = false; + + $queryStr = "SELECT `name`,`description`,`action` + FROM `".DB_PREFIX."_tool` + WHERE ".$this->_User->getSQLRightsString("read")." + AND `action` = '".$this->_DB->real_escape_string($identifier)."'"; + try { + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows > 0) { + $ret = $query->fetch_assoc(); + } + + } catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql catch: ".$e->getMessage()); + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + } + + return $ret; + } + + /** + * Default creation info based on current user + * + * @return array + */ + public function getDefaultCreationInfo() { + return array( + 'id' => $this->_User->param('id'), + 'group' => $this->_User->param('baseGroupId'), + 'rights' => 'rwxrwxr--' + ); + } +} diff --git a/webclient/lib/trite.class.php b/webclient/lib/trite.class.php new file mode 100644 index 0000000..22a0e83 --- /dev/null +++ b/webclient/lib/trite.class.php @@ -0,0 +1,190 @@ + int, + * 'offset' => int, + * 'orderby' => string, + * 'sortDirection' => ASC|DESC + * + * @var array + */ + private $_queryOptions; + + /** + * Trite constructor. + * + * @param $databaseConnectionObject + * @param $userObj + */ + public function __construct($databaseConnectionObject, $userObj) { + $this->_DB = $databaseConnectionObject; + $this->_User = $userObj; + + $this->_setDefaults(); + } + + /** + * Set the following options which can be used in DB queries + * array( + * 'limit' => RESULTS_PER_PAGE, + * 'offset' => (RESULTS_PER_PAGE * ($_curPage-1)), + * 'orderby' => $_sort, + * 'sortDirection' => $_sortDirection + * ); + * @param array $options + */ + public function setQueryOptions($options) { + + if(!isset($options['limit'])) $options['limit'] = 5; + if(!isset($options['offset'])) $options['offset'] = false; + if(!isset($options['sort'])) $options['sort'] = false; + if(!isset($options['sortDirection'])) $options['sortDirection'] = false; + + $this->_queryOptions = $options; + } + + /** + * Get information to display for current collection + * based on current user and given rights + * + * @param int $id The collection ID to load + * @param string $right The rights mode. read, write or delete + * @return array + */ + public function load($id,$right="read") { + $this->_collectionData = array(); + + if(!empty($id) && Summoner::validate($id, 'digit')) { + + $queryStr = "SELECT `c`.`id`, `c`.`name`, `c`.`description`, `c`.`created`, + `c`.`owner`, `c`.`group`, `c`.`rights`, `c`.`defaultSearchField`, + `u`.`name` AS username, `g`.`name` AS groupname + FROM `".DB_PREFIX."_collection` AS c + LEFT JOIN `".DB_PREFIX."_user` AS u ON `c`.`owner` = `u`.`id` + LEFT JOIN `".DB_PREFIX."_group` AS g ON `c`.`group` = `g`.`id` + WHERE ".$this->_User->getSQLRightsString($right, "c")." + AND `c`.`id` = '".$this->_DB->real_escape_string($id)."'"; + try { + $query = $this->_DB->query($queryStr); + if ($query !== false && $query->num_rows > 0) { + $this->_collectionData = $query->fetch_assoc(); + $this->_id = $this->_collectionData['id']; + } + } catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] ".__METHOD__." mysql query: ".$queryStr); + error_log("[ERROR] ".__METHOD__." mysql catch: ".$e->getMessage()); + } + } + + return $this->_collectionData; + } + + /** + * get the value of the specified param from the collection data array + * + * @param string $param + * @return bool|mixed + */ + public function param($param) { + $ret = false; + + $param = trim($param); + + if(!empty($param) && isset($this->_collectionData[$param])) { + $ret = $this->_collectionData[$param]; + } + + return $ret; + } + + /** + * Get all available collections for display based on current user + * and read mode + * + * @return array + */ + public function getCollections() { + $ret = array(); + + $queryStr = "SELECT `c`.`id`, `c`.`name`, `c`.`description` + FROM `".DB_PREFIX."_collection` AS c + LEFT JOIN `".DB_PREFIX."_user` AS u ON `c`.`owner` = `u`.`id` + LEFT JOIN `".DB_PREFIX."_group` AS g ON `c`.`group` = `g`.`id` + WHERE ".$this->_User->getSQLRightsString("read", "c")." + ORDER BY `c`.`name`"; + $query = $this->_DB->query($queryStr); + + if($query !== false && $query->num_rows > 0) { + while(($result = $query->fetch_assoc()) != false) { + $ret[$result['id']] = $result; + } + } + + return $ret; + } + + /** + * set some defaults by init of the class + */ + private function _setDefaults() { + // default query options + $options['limit'] = 5; + $options['offset'] = false; + $options['sort'] = false; + $options['sortDirection'] = false; + $this->setQueryOptions($options); + } +} diff --git a/webclient/storage/.gitignore b/webclient/storage/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/webclient/storage/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/webclient/systemout/.gitignore b/webclient/systemout/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/webclient/systemout/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/webclient/view/default/auth/auth.html b/webclient/view/default/auth/auth.html new file mode 100644 index 0000000..625e0f6 --- /dev/null +++ b/webclient/view/default/auth/auth.html @@ -0,0 +1,31 @@ +isSignedIn() === true) { ?> +

Logout

+ + Logout + + + +

Login

+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ diff --git a/webclient/view/default/auth/auth.php b/webclient/view/default/auth/auth.php new file mode 100644 index 0000000..4747933 --- /dev/null +++ b/webclient/view/default/auth/auth.php @@ -0,0 +1,50 @@ +logOut(); + $TemplateData['refresh'] = 'index.php'; + } +} +elseif(isset($_POST['submitForm'])) { + $fdata = $_POST['fdata']; + if(!empty($fdata)) { + $_username = trim($fdata['login']); + $_password = trim($fdata['password']); + + if(!empty($_username) && !empty($_password)) { + if(Summoner::validate($_username,'text') === true && Summoner::validate($_password,'text') === true) { + $do = $Doomguy->authenticate($_username, $_password); + if($do === true) { + $TemplateData['refresh'] = 'index.php'; + } + else { + $TemplateData['message']['content'] = "Invalid username or password."; + $TemplateData['message']['status'] = "error"; + } + } + else { + $TemplateData['message']['content'] = "Please provide valid e-Mail and password."; + $TemplateData['message']['status'] = "error"; + } + } + } +} diff --git a/webclient/view/default/collections/collections.html b/webclient/view/default/collections/collections.html new file mode 100644 index 0000000..73ec71c --- /dev/null +++ b/webclient/view/default/collections/collections.html @@ -0,0 +1,55 @@ +

+ + +
+ +

Display result for:

+
+ + + + +
+ $entry) { ?> +
+
+
+ + <?php echo $entry['fields']['coverimage']['displayname']; ?> + + +
+
+ +

+ + + +

+ +
+ +
+
+ +
+ +

Collection overview

+
+
+
+ $v) { ?> +
+
+ +
+
+
+ diff --git a/webclient/view/default/collections/collections.php b/webclient/view/default/collections/collections.php new file mode 100644 index 0000000..b29698a --- /dev/null +++ b/webclient/view/default/collections/collections.php @@ -0,0 +1,92 @@ +load($_collection); + if(!empty($TemplateData['loadedCollection'])) { + $Mancubus->setCollection($Trite->param('id')); + $Mancubus->setQueryOptions($_queryOptions); // this comes from pagination_before! + $TemplateData['storagePath'] = PATH_WEB_STORAGE . '/' . $_collection; + $TemplateData['entryLinkPrefix'] = "index.php?p=entry&collection=".$_collection; + $TemplateData['searchAction'] = 'index.php?p=collections&collection='.$_collection; + + if (!empty($_fv) && !empty($_fid)) { + $TemplateData['entries'] = $Mancubus->getEntriesByFieldValue($_fid, $_fv); + $TemplateData['search'] = $_fv; + + $TemplateData['pagination']['currentGetParameters']['fid'] = $_fid; + $TemplateData['pagination']['currentGetParameters']['fv'] = $_fv; + } else { + $TemplateData['entries'] = $Mancubus->getEntries($Trite->param('defaultSearchField'),$_search,true); + if (!empty($_search)) { + $TemplateData['search'] = $_search; + } + } + } + else { + $TemplateData['message']['content'] = "Can not load given collection."; + $TemplateData['message']['status'] = "error"; + } +} +else { + $TemplateData['collections'] = $Trite->getCollections(); +} + +require_once(Summoner::themefile('system/pagination_after.php',UI_THEME)); diff --git a/webclient/view/default/dashboard/dashboard.html b/webclient/view/default/dashboard/dashboard.html new file mode 100644 index 0000000..6ad47e0 --- /dev/null +++ b/webclient/view/default/dashboard/dashboard.html @@ -0,0 +1,54 @@ + +
+ +

Display result for:

+
+ + + +
+$v) { ?> +
+
+ + + $entry) { ?> + +
+
+ + <?php echo $entry['fields']['coverimage']['displayname']; ?> + + +
+
+
+ +

+ + + +

+ +
+ +
+
+ + + +
+ +
diff --git a/webclient/view/default/dashboard/dashboard.php b/webclient/view/default/dashboard/dashboard.php new file mode 100644 index 0000000..a4a843f --- /dev/null +++ b/webclient/view/default/dashboard/dashboard.php @@ -0,0 +1,34 @@ +getLatest(5,5,$_search); +if (!empty($_search)) { + $TemplateData['search'] = $_search; +} diff --git a/webclient/view/default/entry/entry.html b/webclient/view/default/entry/entry.html new file mode 100644 index 0000000..4c83cc1 --- /dev/null +++ b/webclient/view/default/entry/entry.html @@ -0,0 +1,55 @@ +

+
+
+ +
+
+ +
+
diff --git a/webclient/view/default/entry/entry.php b/webclient/view/default/entry/entry.php new file mode 100644 index 0000000..a554905 --- /dev/null +++ b/webclient/view/default/entry/entry.php @@ -0,0 +1,63 @@ +load($_collection); + if(!empty($TemplateData['loadedCollection'])) { + $Mancubus->setCollection($Trite->param('id')); + $TemplateData['entry'] = $Mancubus->getEntry($_id); + $TemplateData['storagePath'] = PATH_WEB_STORAGE . '/' . $Trite->param('id') . '/' . $_id; + $TemplateData['searchAction'] = 'index.php?p=collections&collection=' . $Trite->param('id'); + + $ManageEntry->setCollection($Trite->param('id')); + $TemplateData['showEdit'] = $ManageEntry->canEditEntry($_id); + } + else { + $TemplateData['message']['content'] = 'Can not load given collection.'; + $TemplateData['message']['status'] = 'error'; + } +} +else { + $TemplateData['message']['status'] = 'error'; + $TemplateData['message']['content'] = 'Missing required query parameters.'; +} diff --git a/webclient/view/default/entry/field-date.html b/webclient/view/default/entry/field-date.html new file mode 100644 index 0000000..61f0e48 --- /dev/null +++ b/webclient/view/default/entry/field-date.html @@ -0,0 +1,4 @@ +

+ : + +

diff --git a/webclient/view/default/entry/field-lookupmultiple.html b/webclient/view/default/entry/field-lookupmultiple.html new file mode 100644 index 0000000..47d42e0 --- /dev/null +++ b/webclient/view/default/entry/field-lookupmultiple.html @@ -0,0 +1,8 @@ +

+ : + '.$_fv.', '; + } + ?> +

diff --git a/webclient/view/default/entry/field-selection.html b/webclient/view/default/entry/field-selection.html new file mode 100644 index 0000000..2872380 --- /dev/null +++ b/webclient/view/default/entry/field-selection.html @@ -0,0 +1,4 @@ +

+ : + +

diff --git a/webclient/view/default/entry/field-text-title.html b/webclient/view/default/entry/field-text-title.html new file mode 100644 index 0000000..216fac6 --- /dev/null +++ b/webclient/view/default/entry/field-text-title.html @@ -0,0 +1 @@ +

diff --git a/webclient/view/default/entry/field-text.html b/webclient/view/default/entry/field-text.html new file mode 100644 index 0000000..9f76b0e --- /dev/null +++ b/webclient/view/default/entry/field-text.html @@ -0,0 +1 @@ +

:

diff --git a/webclient/view/default/entry/field-text3-description.html b/webclient/view/default/entry/field-text3-description.html new file mode 100644 index 0000000..065ab0f --- /dev/null +++ b/webclient/view/default/entry/field-text3-description.html @@ -0,0 +1 @@ +

diff --git a/webclient/view/default/entry/field-text3.html b/webclient/view/default/entry/field-text3.html new file mode 100644 index 0000000..c663afb --- /dev/null +++ b/webclient/view/default/entry/field-text3.html @@ -0,0 +1 @@ +

:

diff --git a/webclient/view/default/entry/field-textarea-content.html b/webclient/view/default/entry/field-textarea-content.html new file mode 100644 index 0000000..6e5e340 --- /dev/null +++ b/webclient/view/default/entry/field-textarea-content.html @@ -0,0 +1 @@ +

diff --git a/webclient/view/default/entry/field-textarea.html b/webclient/view/default/entry/field-textarea.html new file mode 100644 index 0000000..7cd22c2 --- /dev/null +++ b/webclient/view/default/entry/field-textarea.html @@ -0,0 +1 @@ +

:

diff --git a/webclient/view/default/entry/field-unknown.html b/webclient/view/default/entry/field-unknown.html new file mode 100644 index 0000000..fa3ba54 --- /dev/null +++ b/webclient/view/default/entry/field-unknown.html @@ -0,0 +1 @@ +

Missing template for:

diff --git a/webclient/view/default/entry/field-upload-coverimage.html b/webclient/view/default/entry/field-upload-coverimage.html new file mode 100644 index 0000000..8e78315 --- /dev/null +++ b/webclient/view/default/entry/field-upload-coverimage.html @@ -0,0 +1,6 @@ +
+ +
diff --git a/webclient/view/default/entry/field-upload.html b/webclient/view/default/entry/field-upload.html new file mode 100644 index 0000000..5acb876 --- /dev/null +++ b/webclient/view/default/entry/field-upload.html @@ -0,0 +1,3 @@ +

: + +

diff --git a/webclient/view/default/entry/field-upload_multiple-attachment.html b/webclient/view/default/entry/field-upload_multiple-attachment.html new file mode 100644 index 0000000..6145c89 --- /dev/null +++ b/webclient/view/default/entry/field-upload_multiple-attachment.html @@ -0,0 +1,9 @@ +
+ +
+ + <?php echo $_uEntry; ?> + +
+ +
diff --git a/webclient/view/default/entry/field-upload_multiple.html b/webclient/view/default/entry/field-upload_multiple.html new file mode 100644 index 0000000..955ccfd --- /dev/null +++ b/webclient/view/default/entry/field-upload_multiple.html @@ -0,0 +1,8 @@ +

: +

    + +
  • + +
+

+ diff --git a/webclient/view/default/entry/field-year.html b/webclient/view/default/entry/field-year.html new file mode 100644 index 0000000..7f04a91 --- /dev/null +++ b/webclient/view/default/entry/field-year.html @@ -0,0 +1,4 @@ +

+ : + +

diff --git a/webclient/view/default/main.php b/webclient/view/default/main.php new file mode 100644 index 0000000..ff5fec7 --- /dev/null +++ b/webclient/view/default/main.php @@ -0,0 +1,34 @@ + + + + + + + + + + + + + Bibliotheca + + +
+ +
+ +
+
+ + + +
+
+ +
+
+

 

+
+
+ + diff --git a/webclient/view/default/managecollectionfields/managecollectionfields.html b/webclient/view/default/managecollectionfields/managecollectionfields.html new file mode 100644 index 0000000..ddc23b0 --- /dev/null +++ b/webclient/view/default/managecollectionfields/managecollectionfields.html @@ -0,0 +1,60 @@ +

Manage your fields for:

+ +
+
+

Add or remove a field

+

+ Just use drag and drop below to add, remove or order your fields.
+ Removing a field will remove + the stored data from the collection.
+ Make sure at least the title + field is available. +

+
+ $v) { ?> +
+ + () +
+ +
+ +
+ +
+ +
+
+
+
+

Available fields

+
+ $v) { ?> +
+ + () +
+ +
+
+
+ + diff --git a/webclient/view/default/managecollectionfields/managecollectionfields.php b/webclient/view/default/managecollectionfields/managecollectionfields.php new file mode 100644 index 0000000..536f372 --- /dev/null +++ b/webclient/view/default/managecollectionfields/managecollectionfields.php @@ -0,0 +1,71 @@ +getAvailableFields(); +$TemplateData['existingFields'] = array(); + +$_id = false; +if(isset($_GET['id']) && !empty($_GET['id'])) { + $_id = trim($_GET['id']); + $_id = Summoner::validate($_id,'digit') ? $_id : false; +} + +if(!empty($_id)) { + $TemplateData['editData'] = $ManangeCollections->getEditData($_id); + $ManangeCollectionFields->setCollection($_id); + $TemplateData['existingFields'] = $ManangeCollectionFields->getExistingFields(); + // reduce the selection for only the new ones + if(!empty($TemplateData['existingFields'])) { + foreach ($TemplateData['existingFields'] as $k=>$v) { + unset($TemplateData['availableFields'][$k]); + } + } + + // if loading failed redirect to overview + if(!isset($TemplateData['editData']['name'])) { + $TemplateData['refresh'] = 'index.php?p=managecolletions'; + } +} + +if(isset($_POST['submitForm'])) { + $fdata = $_POST['fdata']; + if (!empty($fdata)) { + $_fieldSortString = trim($fdata['fieldSortString']); + if($ManangeCollectionFields->validateFieldSortString($_fieldSortString)) { + $do = $ManangeCollectionFields->updateFields($_fieldSortString); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=managecollectionfields&id='.$_id; + } else { + $TemplateData['message']['content'] = "Fields could not be updated."; + $TemplateData['message']['status'] = "error"; + } + } + else { + $TemplateData['message']['content'] = "Please provide valid fields."; + $TemplateData['message']['status'] = "error"; + } + } +} diff --git a/webclient/view/default/managecolletions/managecolletions.html b/webclient/view/default/managecolletions/managecolletions.html new file mode 100644 index 0000000..486957f --- /dev/null +++ b/webclient/view/default/managecolletions/managecolletions.html @@ -0,0 +1,166 @@ +

Manage your collections

+ +
+
+

Add or modify a collection

+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
Rights
+
+ + + + + + + + + + + +
UserGroupOther
+ + + + + + + + + + + +
+
+
+
+ +
+ +
+
+ +
+
Delete
+
+ +
+
+ +
+ +
+ + The field is used in the global search. + Altering the default search field results in + a DB reindex. This could take some time, depending on the amount of data. +
+
+
+ +
+
+
+
+

Available collections

+ + + + + + + + + + + $v) { ?> + + + + + + + + +
NameDescriptionOwnership
+
+ +
+
+
+ +
+ + +
+
+
diff --git a/webclient/view/default/managecolletions/managecolletions.php b/webclient/view/default/managecolletions/managecolletions.php new file mode 100644 index 0000000..14d126d --- /dev/null +++ b/webclient/view/default/managecolletions/managecolletions.php @@ -0,0 +1,123 @@ +getCollections(); +$TemplateData['ownerSelection'] = $ManangeCollections->getUsersForSelection(); +$TemplateData['groupSelection'] = $ManangeCollections->getGroupsForSelection(); +$TemplateData['toolSelection'] = $ManangeCollections->getToolsForSelection(); +// default rights +$TemplateData['editData']['rights'] = Summoner::prepareRightsArray('rwxr--r--'); +// tool needs to be preset +$TemplateData['editData']['tool'] = array(); +$TemplateData['existingFields'] = array(); + +// @todo providing the id is enough +$_editMode = false; +if(isset($_GET['m']) && !empty($_GET['m'])) { + if($_GET['m'] == "edit") { + $_editMode = true; + } +} + +$_id = false; +if(isset($_GET['id']) && !empty($_GET['id'])) { + $_id = trim($_GET['id']); + $_id = Summoner::validate($_id,'digit') ? $_id : false; +} + +if($_editMode === true && !empty($_id)) { + $TemplateData['editData'] = $ManangeCollections->getEditData($_id); + $ManangeCollectionFields->setCollection($_id); + $TemplateData['existingFields'] = $ManangeCollectionFields->getExistingFields(); + if(!isset($TemplateData['editData']['name'])) { + $TemplateData['refresh'] = 'index.php?p=managecolletions'; + } +} + +$_saveData = array(); +if(isset($_POST['submitForm'])) { + $fdata = $_POST['fdata']; + if (!empty($fdata)) { + $_saveData['name'] = trim($fdata['name']); + $_saveData['description'] = trim($fdata['description']); + $_saveData['owner'] = trim($fdata['owner']); + $_saveData['group'] = trim($fdata['group']); + $_saveData['rights'] = Summoner::prepareRightsString($fdata['rights']); + $_saveData['defaultSearchField'] = trim($fdata['defaultSearchField']); + $_saveData['id'] = $_id; + + $_saveData['tool'] = array(); + if(isset($fdata['tool'])) { + $_saveData['tool'] = $fdata['tool']; + } + + if(!empty($TemplateData['editData']['name'])) { // EDIT + if(isset($fdata['doDelete'])) { + $do = $ManangeCollections->deleteCollection($_id); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=managecolletions'; + } else { + $TemplateData['message']['content'] = "Collection could not be deleted."; + $TemplateData['message']['status'] = "error"; + } + } + else { + if (Summoner::validate($_saveData['name'], 'nospace') === true + && isset($TemplateData['groupSelection'][$_saveData['group']]) + && isset($TemplateData['ownerSelection'][$_saveData['owner']]) + ) { + $do = $ManangeCollections->updateCollection($_saveData); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=managecolletions'; + } else { + $TemplateData['message']['content'] = "Collection could not be updated."; + $TemplateData['message']['status'] = "error"; + } + } else { + $TemplateData['message']['content'] = "Provide name, owner, group and valid rights."; + $TemplateData['message']['status'] = "error"; + } + } + } + else { // ADD + if (!empty($_saveData['name']) && !empty($_saveData['owner']) && !empty($_saveData['group']) && !empty($_saveData['rights'])) { + if (Summoner::validate($_saveData['name'], 'nospace') === true + && isset($TemplateData['groupSelection'][$_saveData['group']]) + && isset($TemplateData['ownerSelection'][$_saveData['owner']]) + ) { + $do = $ManangeCollections->createCollection($_saveData); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=managecolletions'; + } else { + $TemplateData['message']['content'] = "Collection could not be created."; + $TemplateData['message']['status'] = "error"; + } + } else { + $TemplateData['message']['content'] = "Provide name, owner, group and valid rights."; + $TemplateData['message']['status'] = "error"; + } + } + } + + } +} diff --git a/webclient/view/default/manageentry/field-lookupmultiple.html b/webclient/view/default/manageentry/field-lookupmultiple.html new file mode 100644 index 0000000..cb885e2 --- /dev/null +++ b/webclient/view/default/manageentry/field-lookupmultiple.html @@ -0,0 +1,49 @@ + +
+ +
+
+ + +
+ +
+ + +
+ +
+
+ + + + + + + + + + diff --git a/webclient/view/default/manageentry/field-selection.html b/webclient/view/default/manageentry/field-selection.html new file mode 100644 index 0000000..6dafc78 --- /dev/null +++ b/webclient/view/default/manageentry/field-selection.html @@ -0,0 +1,13 @@ +
+ +
+ +
+
diff --git a/webclient/view/default/manageentry/field-text.html b/webclient/view/default/manageentry/field-text.html new file mode 100644 index 0000000..a6c5c41 --- /dev/null +++ b/webclient/view/default/manageentry/field-text.html @@ -0,0 +1,9 @@ +
+ +
+ +
+
diff --git a/webclient/view/default/manageentry/field-text3.html b/webclient/view/default/manageentry/field-text3.html new file mode 100644 index 0000000..974b0da --- /dev/null +++ b/webclient/view/default/manageentry/field-text3.html @@ -0,0 +1,9 @@ +
+ +
+ +
+
+ diff --git a/webclient/view/default/manageentry/field-textarea.html b/webclient/view/default/manageentry/field-textarea.html new file mode 100644 index 0000000..0e20fdb --- /dev/null +++ b/webclient/view/default/manageentry/field-textarea.html @@ -0,0 +1,9 @@ +
+ +
+ +
+
+ diff --git a/webclient/view/default/manageentry/field-unknown.html b/webclient/view/default/manageentry/field-unknown.html new file mode 100644 index 0000000..a1cdcbf --- /dev/null +++ b/webclient/view/default/manageentry/field-unknown.html @@ -0,0 +1,3 @@ +
+ Missing template for: +
diff --git a/webclient/view/default/manageentry/field-upload.html b/webclient/view/default/manageentry/field-upload.html new file mode 100644 index 0000000..152a325 --- /dev/null +++ b/webclient/view/default/manageentry/field-upload.html @@ -0,0 +1,17 @@ +
+ +
+ + +
+ '.Summoner::ifset($TemplateData['editData'], $field['identifier']).''; ?> + +
+ +
+
diff --git a/webclient/view/default/manageentry/field-upload_multiple.html b/webclient/view/default/manageentry/field-upload_multiple.html new file mode 100644 index 0000000..52e64d2 --- /dev/null +++ b/webclient/view/default/manageentry/field-upload_multiple.html @@ -0,0 +1,24 @@ +
+ +
+ +
+ + + +
+ +
+
+
diff --git a/webclient/view/default/manageentry/field-year.html b/webclient/view/default/manageentry/field-year.html new file mode 100644 index 0000000..75b687e --- /dev/null +++ b/webclient/view/default/manageentry/field-year.html @@ -0,0 +1,10 @@ +
+ +
+ +
+
diff --git a/webclient/view/default/manageentry/manageentry.html b/webclient/view/default/manageentry/manageentry.html new file mode 100644 index 0000000..96fc698 --- /dev/null +++ b/webclient/view/default/manageentry/manageentry.html @@ -0,0 +1,74 @@ + +

Update an entry in:

+

View entry

+ +

Add an entry to:

+ +
+
+
+ + + +
+
Delete
+
+ +
+
+ + + +
+ +
+
+
+
+ +

Available tools

+ + +
+
+ + +

Add an entry to your collection

+
+
+

Please select a collection first:

+
+ $v) { ?> +
+
+ +
+
+
+ diff --git a/webclient/view/default/manageentry/manageentry.php b/webclient/view/default/manageentry/manageentry.php new file mode 100644 index 0000000..5cbb984 --- /dev/null +++ b/webclient/view/default/manageentry/manageentry.php @@ -0,0 +1,143 @@ +getCollections(); +$TemplateData['_editFieldViewDefault'] = Summoner::themefile('manageentry/field-unknown.html', UI_THEME); + +$_collection = false; +if(isset($_GET['collection']) && !empty($_GET['collection'])) { + $_collection = trim($_GET['collection']); + $_collection = Summoner::validate($_collection,'digit') ? $_collection : false; +} + +$_id = false; +if(isset($_GET['id']) && !empty($_GET['id'])) { + $_id = trim($_GET['id']); + $_id = Summoner::validate($_id,'digit') ? $_id : false; +} + +if(!empty($_collection)) { + $setCollection = $ManangeCollections->getCollection($_collection, "write"); + + if(!empty($setCollection)) { + $ManangeEntry->setCollection($_collection); + $TemplateData['loadedCollection'] = $setCollection; + + $TemplateData['editFields'] = $ManangeEntry->getEditFields(); + $TemplateData['availableTools'] = $ManangeCollections->getAvailableTools($_collection); + + if(!empty($_id)) { + $TemplateData['storagePath'] = PATH_WEB_STORAGE . '/' . $_collection . '/' . $_id; + + // prefill template data. Used also later to check if on edit mode + $TemplateData['editData'] = $ManangeEntry->getEditData($_id); + // special case. Title field should be always available. + if(!isset($TemplateData['editData']['title'])) { + $TemplateData['message']['content'] = "Entry has no value in title field."; + $TemplateData['message']['status'] = "error"; + } + } + + if(isset($_POST['submitForm'])) { + $fdata = $_POST['fdata']; + $fupload = array('name' => ''); // match $_FILES + if(!empty($_FILES) && isset($_FILES['fdata'])) { + $fupload = $_FILES['fdata']; + } + $_fieldsToSave = array(); + if (!empty($fdata)) { + // @todo there is no setting for individual rights available yet + $_owner = $Doomguy->param('id'); + $_group = $Doomguy->param('baseGroupId'); + $_rights = 'rwxrwxr--'; + + foreach ($TemplateData['editFields'] as $fieldId=>$fieldData) { + if(isset($fdata[$fieldData['identifier']])) { + $_value = trim($fdata[$fieldData['identifier']]); + $fieldData['valueToSave'] = trim($fdata[$fieldData['identifier']]); + $_fieldsToSave[$fieldData['identifier']] = $fieldData; + } elseif(isset($fupload['name'][$fieldData['identifier']])) { + if(isset($fdata[$fieldData['identifier']."_delete"])) { + $fieldData['deleteData'] = $fdata[$fieldData['identifier']."_delete"]; + } + // special case upload + // $_FILES data is combinend + $fieldData['uploadData'] = $fupload; + + $_fieldsToSave[$fieldData['identifier']] = $fieldData; + } + } + + // special case. Title field should be always available. + if(!empty($TemplateData['editData']['title'])) { // EDIT + if(isset($fdata['doDelete'])) { + $do = $ManangeEntry->delete($_id); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=collections&collection='.$_collection; + } else { + $TemplateData['message']['content'] = "Entry could not be removed."; + $TemplateData['message']['status'] = "error"; + } + } elseif (!empty($_fieldsToSave) && isset($_fieldsToSave['title'])) { + $do = $ManangeEntry->create($_fieldsToSave, $_owner, $_group, $_rights, $_id); + if ($do !== 0) { + $TemplateData['refresh'] = 'index.php?p=manageentry&collection='.$_collection.'&id='.$_id; + } else { + $TemplateData['message']['content'] = "Entry could not be updated."; + $TemplateData['message']['status'] = "error"; + } + } + } + else { // ADD + // special case. Title field should be always available. + if (!empty($_fieldsToSave) && isset($_fieldsToSave['title'])) { + $do = $ManangeEntry->create($_fieldsToSave, $_owner, $_group, $_rights); + if (!empty($do)) { + $TemplateData['message']['content'] = "New entry: ".$do.""; + $TemplateData['message']['status'] = "success"; + } else { + // use editData to display given data + $TemplateData['editData'] = $fdata; + $TemplateData['message']['content'] = "Entry could not be added."; + $TemplateData['message']['status'] = "error"; + } + } else { + // use editData to display given data + $TemplateData['editData'] = $fdata; + $TemplateData['message']['content'] = "Provide at least 'Title'."; + $TemplateData['message']['status'] = "error"; + } + } + } + } + } + else { + $TemplateData['message']['content'] = "Collection could not be loaded."; + $TemplateData['message']['status'] = "error"; + } +} diff --git a/webclient/view/default/manageusers/manageusers.html b/webclient/view/default/manageusers/manageusers.html new file mode 100644 index 0000000..4dc33d2 --- /dev/null +++ b/webclient/view/default/manageusers/manageusers.html @@ -0,0 +1,125 @@ +

User management

+
+
+

Add or modify a user

+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
Can login
+
+ +
+
+ +
+
Delete
+
+ +
+
+
+
Create API Token
+
+ +
+
+ +
+ +
+
+
+
+

Available users

+ + + + + + + + + + + + $v) { ?> + + + + + + + + + +
LoginUsernameGroup(s)Status
+
+ +
+
    + $gv) { ?> +
  • + +
  • + +
+
+ + + +
+ + +
+
diff --git a/webclient/view/default/manageusers/manageusers.php b/webclient/view/default/manageusers/manageusers.php new file mode 100644 index 0000000..a7e1b89 --- /dev/null +++ b/webclient/view/default/manageusers/manageusers.php @@ -0,0 +1,111 @@ +getGroups(); +$TemplateData['existingUsers'] = $Possessed->getUsers(); +$TemplateData['editData'] = false; + +$_editMode = false; +if(isset($_GET['m']) && !empty($_GET['m'])) { + if($_GET['m'] == "edit") { + $_editMode = true; + } +} + +$_id = false; +if(isset($_GET['id']) && !empty($_GET['id'])) { + $_id = trim($_GET['id']); + $_id = Summoner::validate($_id,'digit') ? $_id : false; +} + +if($_editMode === true && !empty($_id)) { + $TemplateData['editData'] = $Possessed->getEditData($_id); + if(!isset($TemplateData['editData']['name'])) { + $TemplateData['refresh'] = 'index.php?p=manageusers'; + } +} + + +if(isset($_POST['submitForm'])) { + $fdata = $_POST['fdata']; + if(!empty($fdata)) { + + $_login = trim($fdata['login']); + $_group = trim($fdata['group']); + $_username = trim($fdata['username']); + $_password = trim($fdata['password']); + $_active = false; + if (isset($fdata['active'])) { + $_active = true; + } + + if(!empty($TemplateData['editData'])) { + if(isset($fdata['doDelete'])) { + $do = $Possessed->deleteUser($_id); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=manageusers'; + } else { + $TemplateData['message']['content'] = "User could not be deleted."; + $TemplateData['message']['status'] = "error"; + } + } + elseif (!empty($_username) && !empty($_group) && !empty($_login)) { + if (Summoner::validate($_username, 'text') === true + && Summoner::validate($_login, 'nospace') === true + && isset($TemplateData['existingGroups'][$_group]) + ) { + $refreshApi = false; + if(isset($fdata['refreshApiToken'])) { + $refreshApi = true; + } + $do = $Possessed->updateUser($_id, $_username, $_login, $_password, $_group, $_active, $refreshApi); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=manageusers'; + } else { + $TemplateData['message']['content'] = "User could not be updated."; + $TemplateData['message']['status'] = "error"; + } + } else { + $TemplateData['message']['content'] = "Provide username, login and a valid user group."; + $TemplateData['message']['status'] = "error"; + } + } + } + else { // adding mode + if (!empty($_username) && !empty($_password) && !empty($_group) && !empty($_login)) { + if (Summoner::validate($_username, 'text') === true + && Summoner::validate($_password, 'text') === true + && Summoner::validate($_login, 'nospace') === true + && isset($TemplateData['existingGroups'][$_group]) + ) { + $do = $Possessed->createUser($_username, $_login, $_password, $_group, $_active); + if ($do === true) { + $TemplateData['refresh'] = 'index.php?p=manageusers'; + } else { + $TemplateData['message']['content'] = "User could not be created."; + $TemplateData['message']['status'] = "error"; + } + } else { + $TemplateData['message']['content'] = "Provide username, login, password and a valid user group."; + $TemplateData['message']['status'] = "error"; + } + } + } + } +} diff --git a/webclient/view/default/system/menu.php b/webclient/view/default/system/menu.php new file mode 100644 index 0000000..53bab8c --- /dev/null +++ b/webclient/view/default/system/menu.php @@ -0,0 +1,74 @@ +get('show'); +$_menuManage = $Gorenest->get('manage'); +?> + diff --git a/webclient/view/default/system/message.php b/webclient/view/default/system/message.php new file mode 100644 index 0000000..fc8e008 --- /dev/null +++ b/webclient/view/default/system/message.php @@ -0,0 +1,42 @@ + +
+

+
+ diff --git a/webclient/view/default/system/pagination.html b/webclient/view/default/system/pagination.html new file mode 100644 index 0000000..5fdafa4 --- /dev/null +++ b/webclient/view/default/system/pagination.html @@ -0,0 +1,36 @@ + 1) { ?> +
    + 1) { + echo '
  • +
  • '; + } + + $ellipsisShown = 0; + for($i=1;$i<=$TemplateData['pagination']['pages'];$i++) { + $active = ''; + if($i == $TemplateData['pagination']['curPage']) $active = 'uk-active'; + + if(in_array($i,$TemplateData['pagination']['visibleRange'])) { + echo '
  • '.$i.'
  • '; + } + else { + if($i < $TemplateData['pagination']['currentRangeStart'] && $ellipsisShown == 0) { + echo '
  • '; + $ellipsisShown = 1; + } + if($i > $TemplateData['pagination']['currentRangeEnd'] && ($ellipsisShown == 0 || $ellipsisShown == 1)) { + echo '
  • '; + $ellipsisShown = 2; + } + } + } + + if($TemplateData['pagination']['curPage'] < $TemplateData['pagination']['pages']) { + echo '
  • +
  • '; + } + ?> +
+ diff --git a/webclient/view/default/system/pagination_after.php b/webclient/view/default/system/pagination_after.php new file mode 100644 index 0000000..48a106b --- /dev/null +++ b/webclient/view/default/system/pagination_after.php @@ -0,0 +1,54 @@ + 11) { + # first pages + $TemplateData['pagination']['visibleRange'] = range(1,3); + # last pages + foreach(range($TemplateData['pagination']['pages']-2, $TemplateData['pagination']['pages']) as $e) { + array_push($TemplateData['pagination']['visibleRange'], $e); + } + # pages before and after current page + $cRange = range($TemplateData['pagination']['curPage']-1, $TemplateData['pagination']['curPage']+1); + foreach($cRange as $e) { + array_push($TemplateData['pagination']['visibleRange'], $e); + } + $TemplateData['pagination']['currentRangeStart'] = array_shift($cRange); + $TemplateData['pagination']['currentRangeEnd'] = array_pop($cRange); +} +else { + $TemplateData['pagination']['visibleRange'] = range(1,$TemplateData['pagination']['pages']); +} diff --git a/webclient/view/default/system/pagination_before.php b/webclient/view/default/system/pagination_before.php new file mode 100644 index 0000000..ac24626 --- /dev/null +++ b/webclient/view/default/system/pagination_before.php @@ -0,0 +1,51 @@ + 0); + +$_curPage = 1; +if(isset($_GET['page']) && !empty($_GET['page'])) { + $_curPage = trim($_GET['page']); + $_curPage = Summoner::validate($_curPage,'digit') ? $_curPage : 1; +} +$_sort = false; +if(isset($_GET['s']) && !empty($_GET['s'])) { + $_sort = trim($_GET['s']); + $_sort = Summoner::validate($_sort,'nospace') ? $_sort : false; +} + +$_sortDirection = false; +if(isset($_GET['sd']) && !empty($_GET['sd'])) { + $_sortDirection = trim($_GET['sd']); + $_sortDirection = Summoner::validate($_sortDirection,'nospace') ? $_sortDirection : false; +} + +$_queryOptions = array( + 'limit' => RESULTS_PER_PAGE, + 'offset' => (RESULTS_PER_PAGE * ($_curPage-1)), + 'orderby' => $_sort, + 'sortDirection' => $_sortDirection +); diff --git a/webclient/view/default/tags/tags.html b/webclient/view/default/tags/tags.html new file mode 100644 index 0000000..16f10c1 --- /dev/null +++ b/webclient/view/default/tags/tags.html @@ -0,0 +1,37 @@ +
+
+ +

Selectable tags for:

+ + +
+ +

Display result for:

+
+ + + + $v) { ?> +

+
+ $ev) { ?> + , + +
+ + + +

Please select a collection first

+
+ $v) { ?> +
+
+ +
+ +
+
diff --git a/webclient/view/default/tags/tags.php b/webclient/view/default/tags/tags.php new file mode 100644 index 0000000..ecda30d --- /dev/null +++ b/webclient/view/default/tags/tags.php @@ -0,0 +1,64 @@ +load($_collection); + if(!empty($TemplateData['loadedCollection'])) { + $TemplateData['searchAction'] = 'index.php?p=tags&collection='.$Trite->param('id'); + $Mancubus->setCollection($Trite->param('id')); + $TemplateData['tags'] = $Mancubus->getTags($_search); + if(!empty($_search)) { + $TemplateData['search'] = $_search; + } + } + else { + $TemplateData['message']['content'] = "Can not load given collection."; + $TemplateData['message']['status'] = "error"; + } +} +else { + $TemplateData['collections'] = $Trite->getCollections(); +} diff --git a/webclient/view/default/tool/tool-imdbweb.html b/webclient/view/default/tool/tool-imdbweb.html new file mode 100644 index 0000000..cdc541b --- /dev/null +++ b/webclient/view/default/tool/tool-imdbweb.html @@ -0,0 +1,56 @@ +

Limitations

+

Picture: Use URL to manually save and upload.

+

Rating: Works only if the rating matches 1:1.

+

Data will be overwritten

+ +
+
+ +
+ +
+
+ +
+
+
+ + +
+ + $v) { + ?> + +
+

+
+ +

+
+
+ +
+ + + +
+ +
+ +
+ diff --git a/webclient/view/default/tool/tool-imdbweb.php b/webclient/view/default/tool/tool-imdbweb.php new file mode 100644 index 0000000..d04cd58 --- /dev/null +++ b/webclient/view/default/tool/tool-imdbweb.php @@ -0,0 +1,153 @@ + 'movie', + 'storage' => PATH_SYSTEMOUT, + 'debug' => false +)); + + +$TemplateData['movieData'] = array(); +$TemplateData['saveToSelection'] = ''; +$TemplateData['showMatchingForm'] = false; + +// prepare fields to save into selection +// create one time and then reuse it +$collectionFields = $ManangeCollectionsFields->getExistingFields(); +if(!empty($collectionFields)) { + foreach ($collectionFields as $k=>$v) { + $TemplateData['saveToSelection'] .= "\n"; + } +} + +if(isset($_POST['submitFormSearch'])) { + $fdata = $_POST['fdata']; + if (!empty($fdata)) { + $search = trim($fdata['search']); + $search = Summoner::validate($search) ? $search : false; + + if(!empty($search)) { + try { + $IMDB->search($search); + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] imdb search catch: ".$e->getMessage()); + } + + if ($IMDB->isReady) { + $TemplateData['movieData'] = $IMDB->getAll(); + $TemplateData['movieImdbId'] = "tt".$IMDB->iId; // this is the IMDB id you can search for + $TemplateData['showMatchingForm'] = true; + } else { + $TemplateData['message']['content'] = "Nothing found."; + $TemplateData['message']['status'] = "error"; + } + } + else { + $TemplateData['message']['content'] = "Invalid search term"; + $TemplateData['message']['status'] = "error"; + } + } +} + +if(isset($_POST['submitFormSave'])) { + $fdata = $_POST['fdata']; + if (!empty($fdata)) { + $_imdbId = $fdata['imdbId']; + $_imdbId = Summoner::validate($_imdbId,'nospace') ? $_imdbId : false; + + if(!empty($_imdbId)) { + try { + $IMDB->search($_imdbId); + } + catch (Exception $e) { + if(DEBUG) error_log("[DEBUG] imdb search catch: ".$e->getMessage()); + } + + if ($IMDB->isReady) { + $TemplateData['movieImdbId'] = $_imdbId; + $_movieData = $IMDB->getAll(); + + // build data array based on submit + // see creation log for structure + $_data = array(); + foreach($fdata['into'] as $k=>$v) { + if(!empty($v)) { + $_t = $IMDB->$k(); + + // multiple selections format for field type lookup_multiple + if(strstr($_t, $IMDB->sSeparator)) { + $_t = str_replace($IMDB->sSeparator,",", $_t); + } + + if(isset($collectionFields[$v])) { + $_data[$v] = $collectionFields[$v]; + $_data[$v]['valueToSave'] = $_t; + } + } + } + + $_r = $Tools->getDefaultCreationInfo(); + if(!empty($TemplateData['editEntry'])) { + // update existing one + $do = $Manageentry->create($_data, + $_r['id'], + $_r['group'], + $_r['rights'], + $TemplateData['editEntry']['id'] + ); + $TemplateData['message']['content'] = "Date saved successfully"; + } + else { + // create into loaded collection + $do = $Manageentry->create($_data, + $_r['id'], + $_r['group'], + $_r['rights'] + ); + $TemplateData['message']['content'] = "Date saved successfully: + Here"; + } + + if(!empty($do)) { + $TemplateData['message']['status'] = "success"; + } + else { + $TemplateData['message']['content'] = "Data could not be saved. See logs for more."; + $TemplateData['message']['status'] = "error"; + } + } else { + $TemplateData['message']['content'] = "Nothing found."; + $TemplateData['message']['status'] = "error"; + } + } + else { + $TemplateData['message']['content'] = "IMDB search result information lost."; + $TemplateData['message']['status'] = "error"; + } + } +} + diff --git a/webclient/view/default/tool/tool.html b/webclient/view/default/tool/tool.html new file mode 100644 index 0000000..8cf10d4 --- /dev/null +++ b/webclient/view/default/tool/tool.html @@ -0,0 +1,12 @@ +

Using with collection:

+ +

+ +

+ + +
+
+ +
+
diff --git a/webclient/view/default/tool/tool.php b/webclient/view/default/tool/tool.php new file mode 100644 index 0000000..9f5e6f5 --- /dev/null +++ b/webclient/view/default/tool/tool.php @@ -0,0 +1,83 @@ +getCollection($_collection,"write"); + $toolInfo = $Tools->validate($_t); + + if(!empty($collection) && !empty($toolInfo)) { + $TemplateData['tool'] = $toolInfo; + $TemplateData['collection'] = $collection; + + $ManangeCollectionsFields->setCollection($_collection); + $Manageentry->setCollection($_collection); + + if(!empty($_id)) { + $TemplateData['editEntry'] = $Manageentry->getEditData($_id); + } + + $_toolFile = Summoner::themefile('tool/tool-'.$toolInfo['action'].'.php', UI_THEME); + $_toolViewFile = Summoner::themefile('tool/tool-'.$toolInfo['action'].'.html', UI_THEME); + if(file_exists($_toolFile) && file_exists($_toolViewFile)) { + require_once $_toolFile; + $TemplateData['tool']['viewFile'] = $_toolViewFile; + } + else { + $TemplateData['tool']['viewFile'] = ''; + $TemplateData['message']['content'] = "Required tool files can not be found."; + $TemplateData['message']['status'] = "error"; + } + } + else { + $TemplateData['message']['content'] = "Collection nor tool could not be loaded."; + $TemplateData['message']['status'] = "error"; + } +} + diff --git a/webclient/view/default/ui/css/style.css b/webclient/view/default/ui/css/style.css new file mode 100644 index 0000000..e71cb60 --- /dev/null +++ b/webclient/view/default/ui/css/style.css @@ -0,0 +1,13 @@ +.uk-label { + text-transform: none; +} + +.input-multiple-listbox { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.input-multiple-template { + margin: 1px; +} diff --git a/webclient/view/default/ui/css/uikit.min.css b/webclient/view/default/ui/css/uikit.min.css new file mode 100644 index 0000000..447f064 --- /dev/null +++ b/webclient/view/default/ui/css/uikit.min.css @@ -0,0 +1 @@ +/*! UIkit 3.5.3 | https://www.getuikit.com | (c) 2014 - 2020 YOOtheme | MIT License */html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:16px;font-weight:400;line-height:1.5;-webkit-text-size-adjust:100%;background:#fff;color:#666}body{margin:0}a:active,a:hover{outline:0}.uk-link,a{color:#1e87f0;text-decoration:none;cursor:pointer}.uk-link-toggle:focus .uk-link,.uk-link-toggle:hover .uk-link,.uk-link:hover,a:hover{color:#0f6ecd;text-decoration:underline}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:Consolas,monaco,monospace;font-size:.875rem;color:#f0506e;white-space:nowrap;padding:2px 6px;background:#f8f8f8}em{color:#f0506e}ins{background:#ffd;color:#666;text-decoration:none}mark{background:#ffd;color:#666}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,video{max-width:100%;height:auto;box-sizing:border-box}@supports (display:block){svg{max-width:100%;height:auto;box-sizing:border-box}}svg:not(:root){overflow:hidden}img:not([src]){min-width:1px;visibility:hidden}iframe{border:0}address,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 20px 0}*+address,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:20px}.uk-h1,.uk-h2,.uk-h3,.uk-h4,.uk-h5,.uk-h6,.uk-heading-2xlarge,.uk-heading-large,.uk-heading-medium,.uk-heading-small,.uk-heading-xlarge,h1,h2,h3,h4,h5,h6{margin:0 0 20px 0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-weight:400;color:#333;text-transform:none}*+.uk-h1,*+.uk-h2,*+.uk-h3,*+.uk-h4,*+.uk-h5,*+.uk-h6,*+.uk-heading-2xlarge,*+.uk-heading-large,*+.uk-heading-medium,*+.uk-heading-small,*+.uk-heading-xlarge,*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:40px}.uk-h1,h1{font-size:2.23125rem;line-height:1.2}.uk-h2,h2{font-size:1.7rem;line-height:1.3}.uk-h3,h3{font-size:1.5rem;line-height:1.4}.uk-h4,h4{font-size:1.25rem;line-height:1.4}.uk-h5,h5{font-size:16px;line-height:1.4}.uk-h6,h6{font-size:.875rem;line-height:1.4}@media (min-width:960px){.uk-h1,h1{font-size:2.625rem}.uk-h2,h2{font-size:2rem}}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}.uk-hr,hr{overflow:visible;text-align:inherit;margin:0 0 20px 0;border:0;border-top:1px solid #e5e5e5}*+.uk-hr,*+hr{margin-top:20px}address{font-style:normal}blockquote{margin:0 0 20px 0;font-size:1.25rem;line-height:1.5;font-style:italic;color:#333}*+blockquote{margin-top:20px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:10px;font-size:.875rem;line-height:1.5;color:#666}blockquote footer::before{content:"— "}pre{font:.875rem/1.5 Consolas,monaco,monospace;color:#666;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;border:1px solid #e5e5e5;border-radius:3px;background:#fff}pre code{font-family:Consolas,monaco,monospace}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}.uk-breakpoint-s::before{content:'640px'}.uk-breakpoint-m::before{content:'960px'}.uk-breakpoint-l::before{content:'1200px'}.uk-breakpoint-xl::before{content:'1600px'}:root{--uk-breakpoint-s:640px;--uk-breakpoint-m:960px;--uk-breakpoint-l:1200px;--uk-breakpoint-xl:1600px}.uk-link-muted a,a.uk-link-muted{color:#999}.uk-link-muted a:hover,.uk-link-toggle:focus .uk-link-muted,.uk-link-toggle:hover .uk-link-muted,a.uk-link-muted:hover{color:#666}.uk-link-text a,a.uk-link-text{color:inherit}.uk-link-text a:hover,.uk-link-toggle:focus .uk-link-text,.uk-link-toggle:hover .uk-link-text,a.uk-link-text:hover{color:#999}.uk-link-heading a,a.uk-link-heading{color:inherit}.uk-link-heading a:hover,.uk-link-toggle:focus .uk-link-heading,.uk-link-toggle:hover .uk-link-heading,a.uk-link-heading:hover{color:#1e87f0;text-decoration:none}.uk-link-reset a,a.uk-link-reset{color:inherit!important;text-decoration:none!important}.uk-link-toggle{color:inherit!important;text-decoration:none!important}.uk-link-toggle:focus{outline:0}.uk-heading-small{font-size:2.6rem;line-height:1.2}.uk-heading-medium{font-size:2.8875rem;line-height:1.1}.uk-heading-large{font-size:3.4rem;line-height:1.1}.uk-heading-xlarge{font-size:4rem;line-height:1}.uk-heading-2xlarge{font-size:6rem;line-height:1}@media (min-width:960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.5rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}}@media (min-width:1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}}.uk-heading-divider{padding-bottom:calc(5px + .1em);border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-.1 * 1em);vertical-align:middle;height:calc(4px + .7em);margin-right:calc(5px + .2em);border-left:calc(5px + .1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::after,.uk-heading-line>::before{content:"";position:absolute;top:calc(50% - ((.2px + .05em)/ 2));width:2000px;border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:calc(5px + .3em)}.uk-heading-line>::after{left:100%;margin-left:calc(5px + .3em)}[class*=uk-divider]{border:none;margin-bottom:20px}*+[class*=uk-divider]{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::after,.uk-divider-icon::before{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:1px;height:100px;margin-left:auto;margin-right:auto;border-left:1px solid #e5e5e5}.uk-list{padding:0;list-style:none}.uk-list>li>:last-child{margin-bottom:0}.uk-list>li:nth-child(n+2),.uk-list>li>ul{margin-top:10px}.uk-list-circle,.uk-list-decimal,.uk-list-disc,.uk-list-hyphen,.uk-list-square{padding-left:30px}.uk-list-disc{list-style-type:disc}.uk-list-circle{list-style-type:circle}.uk-list-square{list-style-type:square}.uk-list-decimal{list-style-type:decimal}.uk-list-hyphen{list-style-type:'– '}.uk-list-muted li::marker{color:#999!important}.uk-list-emphasis li::marker{color:#333!important}.uk-list-primary li::marker{color:#1e87f0!important}.uk-list-secondary li::marker{color:#222!important}.uk-list-bullet>li{position:relative;padding-left:30px}.uk-list-bullet>li::before{content:"";position:absolute;top:0;left:0;width:1.5em;height:1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>li:nth-child(n+2){margin-top:10px;padding-top:10px;border-top:1px solid #e5e5e5}.uk-list-striped>li{padding:10px 10px}.uk-list-striped>li:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>li:nth-of-type(odd){background:#f8f8f8}.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-list-large>li:nth-child(n+2),.uk-list-large>li>ul{margin-top:20px}.uk-list-collapse>li:nth-child(n+2),.uk-list-collapse>li>ul{margin-top:0}.uk-list-large.uk-list-divider>li:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>li:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>li{padding:20px 10px}.uk-list-collapse.uk-list-striped>li{padding-top:0;padding-bottom:0}.uk-list-collapse.uk-list-striped>li:nth-child(n+2),.uk-list-large.uk-list-striped>li:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#333;font-size:.875rem;font-weight:400;text-transform:uppercase}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:.875rem;font-weight:400;color:#999;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:.875rem}.uk-table caption{font-size:.875rem;text-align:left;color:#999}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-divider>:first-child>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped tbody tr:nth-of-type(odd),.uk-table-striped>tr:nth-of-type(odd){background:#f8f8f8;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-table-hover tbody tr:hover,.uk-table-hover>tr:hover{background:#ffd}.uk-table tbody tr.uk-active,.uk-table>tr.uk-active{background:#ffd}.uk-table-small td,.uk-table-small th{padding:10px 12px}.uk-table-large td,.uk-table-large th{padding:22px 12px}.uk-table-justify td:first-child,.uk-table-justify th:first-child{padding-left:0}.uk-table-justify td:last-child,.uk-table-justify th:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0!important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width:959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive td,.uk-table-responsive th,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive td,.uk-table-responsive th{width:auto!important;max-width:none!important;min-width:0!important;overflow:visible!important;white-space:normal!important}.uk-table-responsive .uk-table-link:not(:first-child)>a,.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive th:not(:first-child):not(.uk-table-link){padding-top:5px!important}.uk-table-responsive .uk-table-link:not(:last-child)>a,.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive th:not(:last-child):not(.uk-table-link){padding-bottom:5px!important}.uk-table-justify.uk-table-responsive td,.uk-table-justify.uk-table-responsive th{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color .1s linear}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0,0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle}.uk-icon-link{color:#999}.uk-icon-link:focus,.uk-icon-link:hover{color:#666;outline:0}.uk-active>.uk-icon-link,.uk-icon-link:active{color:#595959}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#f8f8f8;color:#999;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center;transition:.1s ease-in-out;transition-property:color,background-color}.uk-icon-button:focus,.uk-icon-button:hover{background-color:#ebebeb;color:#666;outline:0}.uk-active>.uk-icon-button,.uk-icon-button:active{background-color:#dfdfdf;color:#666}.uk-range{box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;-webkit-appearance:none;background:0 0;padding:0}.uk-range:focus{outline:0}.uk-range::-moz-focus-outer{border:none}.uk-range::-ms-track{height:15px;background:0 0;border-color:transparent;color:transparent}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range:not(:disabled)::-ms-thumb{cursor:pointer}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-thumb{margin-top:0}.uk-range::-ms-thumb{border:none;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-ms-tooltip{display:none}.uk-range::-webkit-slider-runnable-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:active::-webkit-slider-runnable-track,.uk-range:focus::-webkit-slider-runnable-track{background:#d2d2d2}.uk-range::-moz-range-track{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-moz-range-track{background:#d2d2d2}.uk-range::-ms-fill-lower,.uk-range::-ms-fill-upper{height:3px;background:#ebebeb;border-radius:500px}.uk-range:focus::-ms-fill-lower,.uk-range:focus::-ms-fill-upper{background:#d2d2d2}.uk-checkbox,.uk-input,.uk-radio,.uk-select,.uk-textarea{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:700}.uk-textarea{overflow:auto}.uk-input[type=search]::-webkit-search-cancel-button,.uk-input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type=number]::-webkit-inner-spin-button,.uk-input[type=number]::-webkit-outer-spin-button{height:auto}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-checkbox:not(:disabled),.uk-radio:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#666;border:1px solid #e5e5e5;transition:.2s ease-in-out;transition-property:color,background-color,border}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:4px;padding-bottom:4px;vertical-align:top}.uk-input:focus,.uk-select:focus,.uk-textarea:focus{outline:0;background-color:#fff;color:#666;border-color:#1e87f0}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f8f8f8;color:#999;border-color:#e5e5e5}.uk-input::-ms-input-placeholder{color:#999!important}.uk-input::placeholder{color:#999}.uk-textarea::-ms-input-placeholder{color:#999!important}.uk-textarea::placeholder{color:#999}.uk-form-small{font-size:.875rem}.uk-form-small:not(textarea):not([multiple]):not([size]){height:30px;padding-left:8px;padding-right:8px}.uk-form-small:not(select):not(input):not(textarea){line-height:28px}.uk-form-large{font-size:1.25rem}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#f0506e;border-color:#f0506e}.uk-form-success,.uk-form-success:focus{color:#32d296;border-color:#32d296}.uk-form-blank{background:0 0;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:dashed}input.uk-form-width-xsmall{width:50px}select.uk-form-width-xsmall{width:75px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size])::-ms-expand{display:none}.uk-select:not([multiple]):not([size]) option{color:#444}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-right:20px;background-repeat:no-repeat;background-position:100% 50%}.uk-input[list]:focus,.uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none}.uk-checkbox,.uk-radio{display:inline-block;height:16px;width:16px;overflow:hidden;margin-top:-4px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:transparent;background-repeat:no-repeat;background-position:50% 50%;border:1px solid #ccc;transition:.2s ease-in-out;transition-property:background-color,border}.uk-radio{border-radius:50%}.uk-checkbox:focus,.uk-radio:focus{outline:0;border-color:#1e87f0}.uk-checkbox:checked,.uk-checkbox:indeterminate,.uk-radio:checked{background-color:#1e87f0;border-color:transparent}.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus,.uk-radio:checked:focus{background-color:#0e6dcd}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled,.uk-radio:disabled{background-color:#f8f8f8;border-color:#e5e5e5}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23999%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23999%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23999%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:1.5rem;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom input[type=file],.uk-form-custom select{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type=file]{font-size:500px;overflow:hidden}.uk-form-label{color:#333;font-size:.875rem}.uk-form-stacked .uk-form-label{display:block;margin-bottom:5px}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:5px}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-form-icon:hover{color:#666}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-left:40px!important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip~.uk-input{padding-right:40px!important}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:.875rem;line-height:38px;text-align:center;text-decoration:none;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color,border-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button:focus{outline:0}.uk-button-default{background-color:transparent;color:#333;border:1px solid #e5e5e5}.uk-button-default:focus,.uk-button-default:hover{background-color:transparent;color:#333;border-color:#b2b2b2}.uk-button-default.uk-active,.uk-button-default:active{background-color:transparent;color:#333;border-color:#999}.uk-button-primary{background-color:#1e87f0;color:#fff;border:1px solid transparent}.uk-button-primary:focus,.uk-button-primary:hover{background-color:#0f7ae5;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0e6dcd;color:#fff}.uk-button-secondary{background-color:#222;color:#fff;border:1px solid transparent}.uk-button-secondary:focus,.uk-button-secondary:hover{background-color:#151515;color:#fff}.uk-button-secondary.uk-active,.uk-button-secondary:active{background-color:#080808;color:#fff}.uk-button-danger{background-color:#f0506e;color:#fff;border:1px solid transparent}.uk-button-danger:focus,.uk-button-danger:hover{background-color:#ee395b;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#ec2147;color:#fff}.uk-button-danger:disabled,.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled{background-color:transparent;color:#999;border-color:#e5e5e5}.uk-button-small{padding:0 15px;line-height:28px;font-size:.875rem}.uk-button-large{padding:0 40px;line-height:53px;font-size:.875rem}.uk-button-text{padding:0;line-height:1.5;background:0 0;color:#333;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid #333;transition:right .3s ease-out}.uk-button-text:focus,.uk-button-text:hover{color:#333}.uk-button-text:focus::before,.uk-button-text:hover::before{right:0}.uk-button-text:disabled{color:#999}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:0 0;color:#1e87f0}.uk-button-link:focus,.uk-button-link:hover{color:#0f6ecd;text-decoration:underline}.uk-button-link:disabled{color:#999;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button-group>.uk-button:nth-child(n+2),.uk-button-group>div:nth-child(n+2) .uk-button{margin-left:-1px}.uk-button-group .uk-button.uk-active,.uk-button-group .uk-button:active,.uk-button-group .uk-button:focus,.uk-button-group .uk-button:hover{position:relative;z-index:1}.uk-section{display:flow-root;box-sizing:border-box;padding-top:40px;padding-bottom:40px}@media (min-width:960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:40px;padding-bottom:40px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{background:#fff}.uk-section-muted{background:#f8f8f8}.uk-section-primary{background:#1e87f0}.uk-section-secondary{background:#222}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-left{margin-left:0}.uk-container-expand-right{margin-right:0}@media (min-width:640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width:960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-left{margin-left:-15px}.uk-container-item-padding-remove-right{margin-right:-15px}@media (min-width:640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-left{margin-left:-30px}.uk-container-item-padding-remove-right{margin-right:-30px}}@media (min-width:960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-left{margin-left:-40px}.uk-container-item-padding-remove-right{margin-right:-40px}}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:30px}@media (min-width:1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:40px}}.uk-grid-column-small,.uk-grid-small{margin-left:-15px}.uk-grid-column-small>*,.uk-grid-small>*{padding-left:15px}*+.uk-grid-margin-small,.uk-grid+.uk-grid-row-small,.uk-grid+.uk-grid-small,.uk-grid-row-small>.uk-grid-margin,.uk-grid-small>.uk-grid-margin{margin-top:15px}.uk-grid-column-medium,.uk-grid-medium{margin-left:-30px}.uk-grid-column-medium>*,.uk-grid-medium>*{padding-left:30px}*+.uk-grid-margin-medium,.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin{margin-top:30px}.uk-grid-column-large,.uk-grid-large{margin-left:-40px}.uk-grid-column-large>*,.uk-grid-large>*{padding-left:40px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:40px}@media (min-width:1200px){.uk-grid-column-large,.uk-grid-large{margin-left:-70px}.uk-grid-column-large>*,.uk-grid-large>*{padding-left:70px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-left:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width:1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-column-small,.uk-grid-divider.uk-grid-small{margin-left:-30px}.uk-grid-divider.uk-grid-column-small>*,.uk-grid-divider.uk-grid-small>*{padding-left:30px}.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{left:15px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:30px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-15px;left:30px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-15px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{left:30px}.uk-grid-divider.uk-grid-column-medium,.uk-grid-divider.uk-grid-medium{margin-left:-60px}.uk-grid-divider.uk-grid-column-medium>*,.uk-grid-divider.uk-grid-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{left:60px}.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-left:-80px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-left:80px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:80px}@media (min-width:1200px){.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-left:-140px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-left:140px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:140px}}.uk-grid-item-match,.uk-grid-match>*{display:flex;flex-wrap:wrap}.uk-grid-item-match>:not([class*=uk-width]),.uk-grid-match>*>:not([class*=uk-width]){box-sizing:border-box;width:100%;flex:auto}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:40px;padding-bottom:40px}@media (min-width:640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:40px;padding-bottom:40px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{background:#fff}.uk-tile-muted{background:#f8f8f8}.uk-tile-primary{background:#1e87f0}.uk-tile-secondary{background:#222}.uk-card{position:relative;box-sizing:border-box;transition:box-shadow .1s ease-in-out}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width:1200px){.uk-card-body{padding:40px 40px}.uk-card-header{padding:20px 40px}.uk-card-footer{padding:20px 40px}}.uk-card-body>:last-child,.uk-card-footer>:last-child,.uk-card-header>:last-child{margin-bottom:0}.uk-card-title{font-size:1.5rem;line-height:1.4}.uk-card-badge{position:absolute;top:30px;right:30px;z-index:1}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default{background:#fff;color:#666;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-default .uk-card-title{color:#333}.uk-card-default.uk-card-hover:hover{background-color:#fff;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{background:#1e87f0;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e87f0;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-secondary{background:#222;color:#fff;box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#222;box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-card-small .uk-card-body,.uk-card-small.uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width:1200px){.uk-card-large .uk-card-body,.uk-card-large.uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body>.uk-nav-default{margin-left:-30px;margin-right:-30px}.uk-card-body>.uk-nav-default:only-child{margin-top:-15px;margin-bottom:-15px}.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default>li>a{padding-left:30px;padding-right:30px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:45px}@media (min-width:1200px){.uk-card-body>.uk-nav-default{margin-left:-40px;margin-right:-40px}.uk-card-body>.uk-nav-default:only-child{margin-top:-25px;margin-bottom:-25px}.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default>li>a{padding-left:40px;padding-right:40px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:55px}}.uk-card-small>.uk-nav-default{margin-left:-20px;margin-right:-20px}.uk-card-small>.uk-nav-default:only-child{margin-top:-5px;margin-bottom:-5px}.uk-card-small .uk-nav-default .uk-nav-divider,.uk-card-small .uk-nav-default .uk-nav-header,.uk-card-small .uk-nav-default>li>a{padding-left:20px;padding-right:20px}.uk-card-small .uk-nav-default .uk-nav-sub{padding-left:35px}@media (min-width:1200px){.uk-card-large>.uk-nav-default{margin:0}.uk-card-large>.uk-nav-default:only-child{margin:0}.uk-card-large .uk-nav-default .uk-nav-divider,.uk-card-large .uk-nav-default .uk-nav-header,.uk-card-large .uk-nav-default>li>a{padding-left:0;padding-right:0}.uk-card-large .uk-nav-default .uk-nav-sub{padding-left:15px}}.uk-close{color:#999;transition:.1s ease-in-out;transition-property:color,opacity}.uk-close:focus,.uk-close:hover{color:#666;outline:0}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#999;transition:color .1s ease-in-out}.uk-totop:focus,.uk-totop:hover{color:#666;outline:0}.uk-totop:active{color:#333}.uk-marker{padding:5px;background:#222;color:#fff;border-radius:500px}.uk-marker:focus,.uk-marker:hover{color:#fff;outline:0}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#f8f8f8;color:#666}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:focus,.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#d8eafc;color:#1e87f0}.uk-alert-success{background:#edfbf6;color:#32d296}.uk-alert-warning{background:#fff6ee;color:#faa05a}.uk-alert-danger{background:#fef4f6;color:#f0506e}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-badge{box-sizing:border-box;min-width:22px;height:22px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#1e87f0;color:#fff;font-size:.875rem;display:inline-flex;justify-content:center;align-items:center}.uk-badge:focus,.uk-badge:hover{color:#fff;text-decoration:none;outline:0}.uk-label{display:inline-block;padding:0 10px;background:#1e87f0;line-height:1.5;font-size:.875rem;color:#fff;vertical-align:middle;white-space:nowrap;border-radius:2px;text-transform:uppercase}.uk-label-success{background-color:#32d296;color:#fff}.uk-label-warning{background-color:#faa05a;color:#fff}.uk-label-danger{background-color:#f0506e;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{background:rgba(255,255,255,.8)}.uk-overlay-primary{background:rgba(34,34,34,.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:2.23125rem;line-height:1.2}@media (min-width:960px){.uk-article-title{font-size:2.625rem}}.uk-article-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-article-meta a{color:#999}.uk-article-meta a:hover{color:#666;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:1.25rem;line-height:1.4}.uk-comment-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width:960px){.uk-comment-list .uk-comment~ul{padding-left:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#f8f8f8}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#666}.uk-search-input:focus{outline:0}.uk-search-input:-ms-input-placeholder{color:#999!important}.uk-search-input::placeholder{color:#999}.uk-search-icon:focus{outline:0}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#999}.uk-search .uk-search-icon:hover{color:#999}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:180px}.uk-search-default .uk-search-input{height:40px;padding-left:6px;padding-right:6px;background:0 0;border:1px solid #e5e5e5}.uk-search-default .uk-search-input:focus{background-color:transparent}.uk-search-default .uk-search-icon{width:40px}.uk-search-default .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-default .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-navbar{width:400px}.uk-search-navbar .uk-search-input{height:40px;background:0 0;font-size:1.5rem}.uk-search-navbar .uk-search-icon{width:40px}.uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:40px}.uk-search-navbar .uk-search-icon-flip~.uk-search-input{padding-right:40px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:80px;background:0 0;font-size:2.625rem}.uk-search-large .uk-search-icon{width:80px}.uk-search-large .uk-search-icon:not(.uk-search-icon-flip)~.uk-search-input{padding-left:80px}.uk-search-large .uk-search-icon-flip~.uk-search-input{padding-right:80px}.uk-search-toggle{color:#999}.uk-search-toggle:focus,.uk-search-toggle:hover{color:#666}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:block;text-decoration:none}.uk-nav li>a:focus{outline:0}.uk-nav>li>a{padding:5px 0}ul.uk-nav-sub{padding:5px 0 5px 15px}.uk-nav-sub ul{padding-left:15px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon>.uk-parent>a::after{content:"";width:1.5em;height:1.5em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23666%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-nav-header{padding:5px 0;text-transform:uppercase;font-size:.875rem}.uk-nav-header:not(:first-child){margin-top:20px}.uk-nav-divider{margin:5px 0}.uk-nav-default{font-size:.875rem}.uk-nav-default>li>a{color:#999}.uk-nav-default>li>a:focus,.uk-nav-default>li>a:hover{color:#666}.uk-nav-default>li.uk-active>a{color:#333}.uk-nav-default .uk-nav-header{color:#333}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub a{color:#999}.uk-nav-default .uk-nav-sub a:focus,.uk-nav-default .uk-nav-sub a:hover{color:#666}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-primary>li>a{font-size:1.5rem;line-height:1.5;color:#999}.uk-nav-primary>li>a:focus,.uk-nav-primary>li>a:hover{color:#666}.uk-nav-primary>li.uk-active>a{color:#333}.uk-nav-primary .uk-nav-header{color:#333}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub a{color:#999}.uk-nav-primary .uk-nav-sub a:focus,.uk-nav-primary .uk-nav-sub a:hover{color:#666}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#333}.uk-nav-center{text-align:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center.uk-nav-parent-icon>.uk-parent>a::after{position:absolute}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#f8f8f8}.uk-navbar-container>::after,.uk-navbar-container>::before{display:none!important}.uk-navbar-center,.uk-navbar-center-left>*,.uk-navbar-center-right>*,.uk-navbar-left,.uk-navbar-right{display:flex;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max-content;box-sizing:border-box;z-index:990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:100%}.uk-navbar-center-right{left:100%}[class*=uk-navbar-center-]{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;margin:0;padding:0;list-style:none}.uk-navbar-center:only-child,.uk-navbar-left,.uk-navbar-right{flex-wrap:wrap}.uk-navbar-item,.uk-navbar-nav>li>a,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;box-sizing:border-box;min-height:80px;padding:0 15px;font-size:.875rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";text-decoration:none}.uk-navbar-nav>li>a{color:#999;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a.uk-open,.uk-navbar-nav>li>a:focus{color:#666;outline:0}.uk-navbar-nav>li>a:active{color:#333}.uk-navbar-nav>li.uk-active>a{color:#333}.uk-navbar-item{color:#666}.uk-navbar-toggle{color:#999}.uk-navbar-toggle.uk-open,.uk-navbar-toggle:focus,.uk-navbar-toggle:hover{color:#666;outline:0;text-decoration:none}.uk-navbar-subtitle{font-size:.875rem}.uk-navbar-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-navbar-dropdown.uk-open{display:block}[class*=uk-navbar-dropdown-top]{margin-top:-15px}[class*=uk-navbar-dropdown-bottom]{margin-top:15px}[class*=uk-navbar-dropdown-left]{margin-left:-15px}[class*=uk-navbar-dropdown-right]{margin-left:15px}.uk-navbar-dropdown-grid{margin-left:-50px}.uk-navbar-dropdown-grid>*{padding-left:50px}.uk-navbar-dropdown-grid>.uk-grid-margin{margin-top:50px}.uk-navbar-dropdown-stack .uk-navbar-dropdown-grid>*{width:100%!important}.uk-navbar-dropdown-width-2:not(.uk-navbar-dropdown-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-navbar-dropdown-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-navbar-dropdown-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-navbar-dropdown-stack){width:1000px}.uk-navbar-dropdown-dropbar{margin-top:0;margin-bottom:0;box-shadow:none}.uk-navbar-dropdown-nav{font-size:.875rem}.uk-navbar-dropdown-nav>li>a{color:#999}.uk-navbar-dropdown-nav>li>a:focus,.uk-navbar-dropdown-nav>li>a:hover{color:#666}.uk-navbar-dropdown-nav>li.uk-active>a{color:#333}.uk-navbar-dropdown-nav .uk-nav-header{color:#333}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#999}.uk-navbar-dropdown-nav .uk-nav-sub a:focus,.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#666}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#333}.uk-navbar-dropbar{background:#fff}.uk-navbar-dropbar-slide{position:absolute;z-index:980;left:0;right:0;box-shadow:0 5px 7px rgba(0,0,0,.05)}.uk-navbar-container>.uk-container .uk-navbar-left{margin-left:-15px;margin-right:-15px}.uk-navbar-container>.uk-container .uk-navbar-right{margin-right:-15px}.uk-navbar-dropdown-grid>*{position:relative}.uk-navbar-dropdown-grid>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;left:25px;border-left:1px solid #e5e5e5}.uk-navbar-dropdown-grid.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;top:-25px;left:50px;right:0;border-top:1px solid #e5e5e5}.uk-subnav{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:block;color:#999;font-size:.875rem;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-subnav>*>a:focus,.uk-subnav>*>a:hover{color:#666;text-decoration:none;outline:0}.uk-subnav>.uk-active>a{color:#333}.uk-subnav-divider{margin-left:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-left:0;margin-right:20px;border-left:1px solid transparent}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:#e5e5e5}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:0 0;color:#999}.uk-subnav-pill>*>a:focus,.uk-subnav-pill>*>a:hover{background-color:#f8f8f8;color:#666}.uk-subnav-pill>*>a:active{background-color:#f8f8f8;color:#666}.uk-subnav-pill>.uk-active>a{background-color:#1e87f0;color:#fff}.uk-subnav>.uk-disabled>a{color:#999}.uk-breadcrumb{display:flex;flex-wrap:wrap;padding:0;list-style:none}.uk-breadcrumb>*{flex:none}.uk-breadcrumb>*>*{display:inline-block;font-size:.875rem;color:#999}.uk-breadcrumb>*>:focus,.uk-breadcrumb>*>:hover{color:#666;text-decoration:none}.uk-breadcrumb>:last-child>a:not([href]),.uk-breadcrumb>:last-child>span{color:#666}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;font-size:.875rem;color:#999}.uk-pagination{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:20px;position:relative}.uk-pagination>*>*{display:block;color:#999;transition:color .1s ease-in-out}.uk-pagination>*>:focus,.uk-pagination>*>:hover{color:#666;text-decoration:none}.uk-pagination>.uk-active>*{color:#666}.uk-pagination>.uk-disabled>*{color:#999}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-20px;padding:0;list-style:none;position:relative}.uk-tab::before{content:"";position:absolute;bottom:0;left:20px;right:0;border-bottom:1px solid #e5e5e5}.uk-tab>*{flex:none;padding-left:20px;position:relative}.uk-tab>*>a{display:block;text-align:center;padding:5px 10px;color:#999;border-bottom:1px solid transparent;font-size:.875rem;text-transform:uppercase;transition:color .1s ease-in-out}.uk-tab>*>a:focus,.uk-tab>*>a:hover{color:#666;text-decoration:none}.uk-tab>.uk-active>a{color:#333;border-color:#1e87f0}.uk-tab>.uk-disabled>a{color:#999}.uk-tab-bottom::before{top:0;bottom:auto}.uk-tab-bottom>*>a{border-top:1px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left::before{top:0;bottom:0;left:auto;right:0;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-right::before{top:0;bottom:0;left:0;right:auto;border-left:1px solid #e5e5e5;border-bottom:none}.uk-tab-left>*>a{text-align:left;border-right:1px solid transparent;border-bottom:none}.uk-tab-right>*>a{text-align:left;border-left:1px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(102,102,102,.5);transition:color .1s ease-in-out}.uk-slidenav:focus,.uk-slidenav:hover{color:rgba(102,102,102,.9);outline:0}.uk-slidenav:active{color:rgba(102,102,102,.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:0 0;text-indent:100%;overflow:hidden;white-space:nowrap;border:1px solid rgba(102,102,102,.4);transition:.2s ease-in-out;transition-property:background-color,border-color}.uk-dotnav>*>:focus,.uk-dotnav>*>:hover{background-color:rgba(102,102,102,.6);outline:0;border-color:transparent}.uk-dotnav>*>:active{background-color:rgba(102,102,102,.2);border-color:transparent}.uk-dotnav>.uk-active>*{background-color:rgba(102,102,102,.6);border-color:transparent}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block;position:relative}.uk-thumbnav>*>::after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(255,255,255,.4);transition:background-color .1s ease-in-out}.uk-thumbnav>*>:focus,.uk-thumbnav>*>:hover{outline:0}.uk-thumbnav>*>:focus::after,.uk-thumbnav>*>:hover::after{background-color:transparent}.uk-thumbnav>.uk-active>::after{background-color:transparent}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-accordion{padding:0;list-style:none}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:1.25rem;line-height:1.4;color:#333;overflow:hidden}.uk-accordion-title::before{content:"";width:1.4em;height:1.4em;margin-left:10px;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:focus,.uk-accordion-title:hover{color:#666;text-decoration:none;outline:0}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:1020;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}[class*=uk-drop-top]{margin-top:-20px}[class*=uk-drop-bottom]{margin-top:20px}[class*=uk-drop-left]{margin-left:-20px}[class*=uk-drop-right]{margin-left:20px}.uk-drop-stack .uk-drop-grid>*{width:100%!important}.uk-dropdown{display:none;position:absolute;z-index:1020;box-sizing:border-box;min-width:200px;padding:25px;background:#fff;color:#666;box-shadow:0 5px 12px rgba(0,0,0,.15)}.uk-dropdown.uk-open{display:block}.uk-dropdown-nav{white-space:nowrap;font-size:.875rem}.uk-dropdown-nav>li>a{color:#999}.uk-dropdown-nav>li.uk-active>a,.uk-dropdown-nav>li>a:focus,.uk-dropdown-nav>li>a:hover{color:#666}.uk-dropdown-nav .uk-nav-header{color:#333}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-dropdown-nav .uk-nav-sub a{color:#999}.uk-dropdown-nav .uk-nav-sub a:focus,.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#666}[class*=uk-dropdown-top]{margin-top:-10px}[class*=uk-dropdown-bottom]{margin-top:10px}[class*=uk-dropdown-left]{margin-left:-10px}[class*=uk-dropdown-right]{margin-left:10px}.uk-dropdown-stack .uk-dropdown-grid>*{width:100%!important}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:15px 15px;background:rgba(0,0,0,.6);opacity:0;transition:opacity .15s linear}@media (min-width:640px){.uk-modal{padding:50px 30px}}@media (min-width:960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:calc(100% - .01px)!important;background:#fff;opacity:0;transform:translateY(-100px);transition:.3s linear;transition-property:opacity,transform}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1200px}.uk-modal-full{padding:0;background:0 0}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:30px 30px}.uk-modal-header{display:flow-root;padding:15px 30px;background:#fff;border-bottom:1px solid #e5e5e5}.uk-modal-footer{display:flow-root;padding:15px 30px;background:#fff;border-top:1px solid #e5e5e5}.uk-modal-body>:last-child,.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-title{font-size:2rem;line-height:1.3}[class*=uk-modal-close-]{position:absolute;z-index:1010;top:10px;right:10px;padding:5px}[class*=uk-modal-close-]:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0,-100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width:960px){.uk-modal-close-outside{right:0;transform:translate(100%,-100%)}}.uk-modal-close-full{top:0;right:0;padding:20px;background:#fff}.uk-lightbox{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1010;background:#000;opacity:0;transition:opacity .15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:center;color:rgba(255,255,255,.7);will-change:transform,opacity}.uk-lightbox-items>*>*{max-width:100vw;max-height:100vh}.uk-lightbox-items>:focus{outline:0}.uk-lightbox-items>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-toolbar{padding:10px 10px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7)}.uk-lightbox-toolbar>*{color:rgba(255,255,255,.7)}.uk-lightbox-toolbar-icon{padding:5px;color:rgba(255,255,255,.7)}.uk-lightbox-toolbar-icon:hover{color:#fff}.uk-lightbox-button{box-sizing:border-box;width:50px;height:50px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7);display:inline-flex;justify-content:center;align-items:center}.uk-lightbox-button:hover{color:#fff}.uk-lightbox-caption:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform,opacity;touch-action:pan-y}.uk-slideshow-items>:focus{outline:0}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden}.uk-slider-items{will-change:transform;position:relative}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none;position:relative;touch-action:pan-y}.uk-slider-items>:focus{outline:0}.uk-sticky-fixed{z-index:980;box-sizing:border-box;margin:0!important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.uk-sticky[class*=uk-animation-]{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:1000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{position:absolute;top:0;bottom:0;left:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#222;overflow-y:auto;-webkit-overflow-scrolling:touch}@media (min-width:960px){.uk-offcanvas-bar{left:-350px;width:350px;padding:40px 40px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:-270px}@media (min-width:960px){.uk-offcanvas-flip .uk-offcanvas-bar{right:-350px}}.uk-open>.uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{left:auto;right:0}.uk-offcanvas-bar-animation{transition:left .3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:right}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width .3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{left:auto;right:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width:960px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:1000;top:20px;right:20px;padding:5px}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.1);opacity:0;transition:opacity .15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-container,.uk-offcanvas-page{overflow-x:hidden}.uk-offcanvas-container{position:relative;left:0;transition:left .3s ease-out;box-sizing:border-box;width:100%}:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-270px}@media (min-width:960px){:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:15px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}.uk-leader-fill-content::before{content:'.'}:root{--uk-leader-fill-content:.}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-10px}.uk-iconnav>*{padding-left:10px}.uk-iconnav>*>a{display:block;color:#999}.uk-iconnav>*>a:focus,.uk-iconnav>*>a:hover{color:#666;outline:0}.uk-iconnav>.uk-active>a{color:#666}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-10px}.uk-iconnav-vertical>*{padding-left:0;padding-top:10px}.uk-notification{position:fixed;top:10px;left:10px;z-index:1040;box-sizing:border-box;width:350px}.uk-notification-bottom-right,.uk-notification-top-right{left:auto;right:10px}.uk-notification-bottom-center,.uk-notification-top-center{left:50%;margin-left:-175px}.uk-notification-bottom-center,.uk-notification-bottom-left,.uk-notification-bottom-right{top:auto;bottom:10px}@media (max-width:639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f8f8f8;color:#666;font-size:1.25rem;line-height:1.4;cursor:pointer}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:20px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#1e87f0}.uk-notification-message-success{color:#32d296}.uk-notification-message-warning{color:#faa05a}.uk-notification-message-danger{color:#f0506e}.uk-tooltip{display:none;position:absolute;z-index:1030;top:0;box-sizing:border-box;max-width:200px;padding:3px 6px;background:#666;border-radius:2px;color:#fff;font-size:12px}.uk-tooltip.uk-active{display:block}[class*=uk-tooltip-top]{margin-top:-10px}[class*=uk-tooltip-bottom]{margin-top:10px}[class*=uk-tooltip-left]{margin-left:-10px}[class*=uk-tooltip-right]{margin-left:10px}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:0 0;border:1px dashed #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-progress{vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;display:block;width:100%;border:0;background-color:#f8f8f8;margin-bottom:20px;height:15px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress:indeterminate{color:transparent}.uk-progress::-webkit-progress-bar{background-color:#f8f8f8;border-radius:500px;overflow:hidden}.uk-progress:indeterminate::-moz-progress-bar{width:0}.uk-progress::-webkit-progress-value{background-color:#1e87f0;transition:width .6s ease}.uk-progress::-moz-progress-bar{background-color:#1e87f0}.uk-progress::-ms-fill{background-color:#1e87f0;transition:width .6s ease;border:0}.uk-sortable{position:relative}.uk-sortable svg{pointer-events:none}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed!important;z-index:1050!important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width:640px){.uk-countdown-number{font-size:4rem}}@media (min-width:960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width:640px){.uk-countdown-separator{font-size:2rem}}@media (min-width:960px){.uk-countdown-separator{font-size:3rem}}[class*=uk-animation-]{animation-duration:.5s;animation-timing-function:ease-out;animation-fill-mode:both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.8s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade-scale-02}.uk-animation-scale-down{animation-name:uk-fade-scale-18}.uk-animation-slide-top{animation-name:uk-fade-top}.uk-animation-slide-bottom{animation-name:uk-fade-bottom}.uk-animation-slide-left{animation-name:uk-fade-left}.uk-animation-slide-right{animation-name:uk-fade-right}.uk-animation-slide-top-small{animation-name:uk-fade-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade-left-small}.uk-animation-slide-right-small{animation-name:uk-fade-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade-right-medium}.uk-animation-kenburns{animation-name:uk-scale-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;stroke-dasharray:var(--uk-animation-stroke);animation-duration:2s}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*=uk-animation-]{animation-name:none}.uk-animation-toggle{-webkit-tap-highlight-color:transparent}.uk-animation-toggle:focus{outline:0}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-fade-top{0%{opacity:0;transform:translateY(-100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom{0%{opacity:0;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left{0%{opacity:0;transform:translateX(-100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right{0%{opacity:0;transform:translateX(100%)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-small{0%{opacity:0;transform:translateY(-10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-small{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-small{0%{opacity:0;transform:translateX(-10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-small{0%{opacity:0;transform:translateX(10px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-top-medium{0%{opacity:0;transform:translateY(-50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-bottom-medium{0%{opacity:0;transform:translateY(50px)}100%{opacity:1;transform:translateY(0)}}@keyframes uk-fade-left-medium{0%{opacity:0;transform:translateX(-50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-right-medium{0%{opacity:0;transform:translateX(50px)}100%{opacity:1;transform:translateX(0)}}@keyframes uk-fade-scale-02{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:scale(1)}}@keyframes uk-fade-scale-18{0%{opacity:0;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}@keyframes uk-scale-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*=uk-child-width]>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*=uk-width]){flex:1;min-width:1px}@media (min-width:640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width:960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width:1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*=uk-width]){flex:1;min-width:1px}}@media (min-width:1600px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% * 1 / 3.001)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% * 1 / 6.001)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*=uk-width]){flex:1;min-width:1px}}[class*=uk-width]{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% * 1 / 3.001)}.uk-width-2-3{width:calc(100% * 2 / 3.001)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% * 1 / 6.001)}.uk-width-5-6{width:calc(100% * 5 / 6.001)}.uk-width-small{width:150px}.uk-width-medium{width:300px}.uk-width-large{width:450px}.uk-width-xlarge{width:600px}.uk-width-2xlarge{width:750px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width:640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@s{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@s{width:calc(100% * 5 / 6.001)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:300px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:600px}.uk-width-2xlarge\@s{width:750px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}}@media (min-width:960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@m{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@m{width:calc(100% * 5 / 6.001)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:300px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:600px}.uk-width-2xlarge\@m{width:750px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}}@media (min-width:1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@l{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@l{width:calc(100% * 5 / 6.001)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:300px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:600px}.uk-width-2xlarge\@l{width:750px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}}@media (min-width:1600px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% * 1 / 3.001)}.uk-width-2-3\@xl{width:calc(100% * 2 / 3.001)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% * 1 / 6.001)}.uk-width-5-6\@xl{width:calc(100% * 5 / 6.001)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:300px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:600px}.uk-width-2xlarge\@xl{width:750px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:1.5rem;line-height:1.5;color:#333}.uk-text-meta{font-size:.875rem;line-height:1.4;color:#999}.uk-text-meta a{color:#999}.uk-text-meta a:hover{color:#666;text-decoration:none}.uk-text-small{font-size:.875rem;line-height:1.5}.uk-text-large{font-size:1.5rem;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-uppercase{text-transform:uppercase!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-muted{color:#999!important}.uk-text-emphasis{color:#333!important}.uk-text-primary{color:#1e87f0!important}.uk-text-secondary{color:#222!important}.uk-text-success{color:#32d296!important}.uk-text-warning{color:#faa05a!important}.uk-text-danger{color:#f0506e!important}.uk-text-background{-webkit-background-clip:text;display:inline-block;color:#1e87f0!important}@supports (-webkit-background-clip:text){.uk-text-background{background-color:#1e87f0;color:transparent!important}}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}@media (min-width:640px){.uk-text-left\@s{text-align:left!important}.uk-text-right\@s{text-align:right!important}.uk-text-center\@s{text-align:center!important}}@media (min-width:960px){.uk-text-left\@m{text-align:left!important}.uk-text-right\@m{text-align:right!important}.uk-text-center\@m{text-align:center!important}}@media (min-width:1200px){.uk-text-left\@l{text-align:left!important}.uk-text-right\@l{text-align:right!important}.uk-text-center\@l{text-align:center!important}}@media (min-width:1600px){.uk-text-left\@xl{text-align:left!important}.uk-text-right\@xl{text-align:right!important}.uk-text-center\@xl{text-align:center!important}}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}.uk-text-baseline{vertical-align:baseline!important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.uk-text-truncate,th.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word;word-wrap:break-word}td.uk-text-break,th.uk-text-break{word-break:break-all}[class*=uk-column-]{column-gap:30px}@media (min-width:1200px){[class*=uk-column-]{column-gap:40px}}[class*=uk-column-] img{transform:translate3d(0,0,0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width:1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width:640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width:960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width:1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width:1600px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}.uk-cover{max-width:none;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}iframe.uk-cover{pointer-events:none}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#fff}.uk-background-muted{background-color:#f8f8f8}.uk-background-primary{background-color:#1e87f0}.uk-background-secondary{background-color:#222}.uk-background-contain,.uk-background-cover{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed;backface-visibility:hidden}@media (pointer:coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width:639px){.uk-background-image\@s{background-image:none!important}}@media (max-width:959px){.uk-background-image\@m{background-image:none!important}}@media (max-width:1199px){.uk-background-image\@l{background-image:none!important}}@media (max-width:1599px){.uk-background-image\@xl{background-image:none!important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*=uk-align]{display:block;margin-bottom:30px}*+[class*=uk-align]{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width:640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width:960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width:1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@l,.uk-align-left\@m,.uk-align-left\@s{margin-right:40px}.uk-align-right,.uk-align-right\@l,.uk-align-right\@m,.uk-align-right\@s{margin-left:40px}}@media (min-width:1600px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*='#']:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*='#']:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0,0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;-webkit-overflow-scrolling:touch;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto;-webkit-overflow-scrolling:touch}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-resize{resize:both}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}[class*=uk-inline]{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-height,.uk-responsive-width{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*=uk-border-]{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,.16)}[class*=uk-box-shadow-hover]{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,.08)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,.16)}@supports (filter:blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::before{content:'';position:absolute;bottom:-30px;left:0;right:0;height:30px;border-radius:100%;background:#444;filter:blur(20px)}.uk-box-shadow-bottom>*{position:relative}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}@supports (-ms-ime-align:auto){.uk-dropcap>p:first-of-type::first-letter{font-size:1em}}.uk-logo{font-size:1.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#666;text-decoration:none}.uk-logo:focus,.uk-logo:hover{color:#666;outline:0;text-decoration:none}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%,-50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-inline::after,.uk-flex-inline::before,.uk-flex::after,.uk-flex::before{display:none}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width:640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width:960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width:1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width:1600px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width:640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width:960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width:1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width:1600px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px!important}.uk-margin-top{margin-top:20px!important}.uk-margin-bottom{margin-bottom:20px!important}.uk-margin-left{margin-left:20px!important}.uk-margin-right{margin-right:20px!important}.uk-margin-small{margin-bottom:10px}*+.uk-margin-small{margin-top:10px!important}.uk-margin-small-top{margin-top:10px!important}.uk-margin-small-bottom{margin-bottom:10px!important}.uk-margin-small-left{margin-left:10px!important}.uk-margin-small-right{margin-right:10px!important}.uk-margin-medium{margin-bottom:40px}*+.uk-margin-medium{margin-top:40px!important}.uk-margin-medium-top{margin-top:40px!important}.uk-margin-medium-bottom{margin-bottom:40px!important}.uk-margin-medium-left{margin-left:40px!important}.uk-margin-medium-right{margin-right:40px!important}.uk-margin-large{margin-bottom:40px}*+.uk-margin-large{margin-top:40px!important}.uk-margin-large-top{margin-top:40px!important}.uk-margin-large-bottom{margin-bottom:40px!important}.uk-margin-large-left{margin-left:40px!important}.uk-margin-large-right{margin-right:40px!important}@media (min-width:1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px!important}.uk-margin-large-top{margin-top:70px!important}.uk-margin-large-bottom{margin-bottom:70px!important}.uk-margin-large-left{margin-left:70px!important}.uk-margin-large-right{margin-right:70px!important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px!important}.uk-margin-xlarge-top{margin-top:70px!important}.uk-margin-xlarge-bottom{margin-bottom:70px!important}.uk-margin-xlarge-left{margin-left:70px!important}.uk-margin-xlarge-right{margin-right:70px!important}@media (min-width:1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px!important}.uk-margin-xlarge-top{margin-top:140px!important}.uk-margin-xlarge-bottom{margin-bottom:140px!important}.uk-margin-xlarge-left{margin-left:140px!important}.uk-margin-xlarge-right{margin-right:140px!important}}.uk-margin-auto{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-top{margin-top:auto!important}.uk-margin-auto-bottom{margin-bottom:auto!important}.uk-margin-auto-left{margin-left:auto!important}.uk-margin-auto-right{margin-right:auto!important}.uk-margin-auto-vertical{margin-top:auto!important;margin-bottom:auto!important}@media (min-width:640px){.uk-margin-auto\@s{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@s{margin-left:auto!important}.uk-margin-auto-right\@s{margin-right:auto!important}}@media (min-width:960px){.uk-margin-auto\@m{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@m{margin-left:auto!important}.uk-margin-auto-right\@m{margin-right:auto!important}}@media (min-width:1200px){.uk-margin-auto\@l{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@l{margin-left:auto!important}.uk-margin-auto-right\@l{margin-right:auto!important}}@media (min-width:1600px){.uk-margin-auto\@xl{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@xl{margin-left:auto!important}.uk-margin-auto-right\@xl{margin-right:auto!important}}.uk-margin-remove{margin:0!important}.uk-margin-remove-top{margin-top:0!important}.uk-margin-remove-bottom{margin-bottom:0!important}.uk-margin-remove-left{margin-left:0!important}.uk-margin-remove-right{margin-right:0!important}.uk-margin-remove-vertical{margin-top:0!important;margin-bottom:0!important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0!important}.uk-margin-remove-last-child>:last-child{margin-bottom:0!important}@media (min-width:640px){.uk-margin-remove-left\@s{margin-left:0!important}.uk-margin-remove-right\@s{margin-right:0!important}}@media (min-width:960px){.uk-margin-remove-left\@m{margin-left:0!important}.uk-margin-remove-right\@m{margin-right:0!important}}@media (min-width:1200px){.uk-margin-remove-left\@l{margin-left:0!important}.uk-margin-remove-right\@l{margin-right:0!important}}@media (min-width:1600px){.uk-margin-remove-left\@xl{margin-left:0!important}.uk-margin-remove-right\@xl{margin-right:0!important}}.uk-padding{padding:30px}@media (min-width:1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:15px}.uk-padding-large{padding:30px}@media (min-width:1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0!important}.uk-padding-remove-top{padding-top:0!important}.uk-padding-remove-bottom{padding-bottom:0!important}.uk-padding-remove-left{padding-left:0!important}.uk-padding-remove-right{padding-right:0!important}.uk-padding-remove-vertical{padding-top:0!important;padding-bottom:0!important}.uk-padding-remove-horizontal{padding-left:0!important;padding-right:0!important}[class*=uk-position-bottom],[class*=uk-position-center],[class*=uk-position-left],[class*=uk-position-right],[class*=uk-position-top]{position:absolute!important;max-width:100%}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:50%;left:50%;transform:translate(-50%,-50%);width:max-content;max-width:100%;box-sizing:border-box}[class*=uk-position-center-left],[class*=uk-position-center-right]{top:50%;transform:translateY(-50%)}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-bottom-center,.uk-position-top-center{left:50%;transform:translateX(-50%);width:max-content;max-width:100%;box-sizing:border-box}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-relative{position:relative!important}.uk-position-absolute{position:absolute!important}.uk-position-fixed{position:fixed!important}.uk-position-z-index{z-index:1}.uk-position-small{max-width:calc(100% - (15px * 2));margin:15px}.uk-position-small.uk-position-center{transform:translate(-50%,-50%) translate(-15px,-15px)}.uk-position-small[class*=uk-position-center-left],.uk-position-small[class*=uk-position-center-right]{transform:translateY(-50%) translateY(-15px)}.uk-position-small.uk-position-bottom-center,.uk-position-small.uk-position-top-center{transform:translateX(-50%) translateX(-15px)}.uk-position-medium{max-width:calc(100% - (30px * 2));margin:30px}.uk-position-medium.uk-position-center{transform:translate(-50%,-50%) translate(-30px,-30px)}.uk-position-medium[class*=uk-position-center-left],.uk-position-medium[class*=uk-position-center-right]{transform:translateY(-50%) translateY(-30px)}.uk-position-medium.uk-position-bottom-center,.uk-position-medium.uk-position-top-center{transform:translateX(-50%) translateX(-30px)}.uk-position-large{max-width:calc(100% - (30px * 2));margin:30px}.uk-position-large.uk-position-center{transform:translate(-50%,-50%) translate(-30px,-30px)}.uk-position-large[class*=uk-position-center-left],.uk-position-large[class*=uk-position-center-right]{transform:translateY(-50%) translateY(-30px)}.uk-position-large.uk-position-bottom-center,.uk-position-large.uk-position-top-center{transform:translateX(-50%) translateX(-30px)}@media (min-width:1200px){.uk-position-large{max-width:calc(100% - (50px * 2));margin:50px}.uk-position-large.uk-position-center{transform:translate(-50%,-50%) translate(-50px,-50px)}.uk-position-large[class*=uk-position-center-left],.uk-position-large[class*=uk-position-center-right]{transform:translateY(-50%) translateY(-50px)}.uk-position-large.uk-position-bottom-center,.uk-position-large.uk-position-top-center{transform:translateX(-50%) translateX(-50px)}}.uk-transition-toggle{-webkit-tap-highlight-color:transparent}.uk-transition-toggle:focus{outline:0}.uk-transition-fade,[class*=uk-transition-scale],[class*=uk-transition-slide]{transition:.3s ease-out;transition-property:opacity,transform,filter;opacity:0}.uk-transition-active.uk-active .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle:hover .uk-transition-fade{opacity:1}.uk-transition-scale-up{transform:scale(1,1)}.uk-transition-scale-down{transform:scale(1.1,1.1)}.uk-transition-active.uk-active .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle:hover .uk-transition-scale-up{opacity:1;transform:scale(1.1,1.1)}.uk-transition-active.uk-active .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle:hover .uk-transition-scale-down{opacity:1;transform:scale(1,1)}.uk-transition-slide-top{transform:translateY(-100%)}.uk-transition-slide-bottom{transform:translateY(100%)}.uk-transition-slide-left{transform:translateX(-100%)}.uk-transition-slide-right{transform:translateX(100%)}.uk-transition-slide-top-small{transform:translateY(-10px)}.uk-transition-slide-bottom-small{transform:translateY(10px)}.uk-transition-slide-left-small{transform:translateX(-10px)}.uk-transition-slide-right-small{transform:translateX(10px)}.uk-transition-slide-top-medium{transform:translateY(-50px)}.uk-transition-slide-bottom-medium{transform:translateY(50px)}.uk-transition-slide-left-medium{transform:translateX(-50px)}.uk-transition-slide-right-medium{transform:translateX(50px)}.uk-transition-active.uk-active [class*=uk-transition-slide],.uk-transition-toggle:focus [class*=uk-transition-slide],.uk-transition-toggle:hover [class*=uk-transition-slide]{opacity:1;transform:translate(0,0)}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}.uk-hidden,[hidden]{display:none!important}@media (min-width:640px){.uk-hidden\@s{display:none!important}}@media (min-width:960px){.uk-hidden\@m{display:none!important}}@media (min-width:1200px){.uk-hidden\@l{display:none!important}}@media (min-width:1600px){.uk-hidden\@xl{display:none!important}}@media (max-width:639px){.uk-visible\@s{display:none!important}}@media (max-width:959px){.uk-visible\@m{display:none!important}}@media (max-width:1199px){.uk-visible\@l{display:none!important}}@media (max-width:1599px){.uk-visible\@xl{display:none!important}}.uk-invisible{visibility:hidden!important}.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute!important;width:0!important;height:0!important;padding:0!important;margin:0!important;overflow:hidden!important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0!important}.uk-visible-toggle{-webkit-tap-highlight-color:transparent}.uk-visible-toggle:focus{outline:0}@media (pointer:coarse){.uk-hidden-touch{display:none!important}}.uk-hidden-notouch{display:none!important}@media (pointer:coarse){.uk-hidden-notouch{display:block!important}}.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-light,.uk-offcanvas-bar,.uk-overlay-primary,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color){color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*=uk-card-media]) .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a,.uk-light .uk-link,.uk-light a,.uk-offcanvas-bar .uk-link,.uk-offcanvas-bar a,.uk-overlay-primary .uk-link,.uk-overlay-primary a,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a{color:#fff}.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-primary>:not([class*=uk-card-media]) a:hover,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) a:hover,.uk-light .uk-link:hover,.uk-light a:hover,.uk-offcanvas-bar .uk-link:hover,.uk-offcanvas-bar a:hover,.uk-overlay-primary .uk-link:hover,.uk-overlay-primary a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover{color:#fff}.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-light :not(pre)>code,.uk-light :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-offcanvas-bar :not(pre)>code,.uk-offcanvas-bar :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>samp,.uk-overlay-primary :not(pre)>code,.uk-overlay-primary :not(pre)>kbd,.uk-overlay-primary :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp{color:rgba(255,255,255,.7);background:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*=uk-card-media]) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*=uk-card-media]) em,.uk-light em,.uk-offcanvas-bar em,.uk-overlay-primary em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em{color:#fff}.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body h4,.uk-card-primary.uk-card-body h5,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body h4,.uk-card-secondary.uk-card-body h5,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-light .uk-h1,.uk-light .uk-h2,.uk-light .uk-h3,.uk-light .uk-h4,.uk-light .uk-h5,.uk-light .uk-h6,.uk-light .uk-heading-2xlarge,.uk-light .uk-heading-large,.uk-light .uk-heading-medium,.uk-light .uk-heading-small,.uk-light .uk-heading-xlarge,.uk-light h1,.uk-light h2,.uk-light h3,.uk-light h4,.uk-light h5,.uk-light h6,.uk-offcanvas-bar .uk-h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .uk-h5,.uk-offcanvas-bar .uk-h6,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-large,.uk-offcanvas-bar .uk-heading-medium,.uk-offcanvas-bar .uk-heading-small,.uk-offcanvas-bar .uk-heading-xlarge,.uk-offcanvas-bar h1,.uk-offcanvas-bar h2,.uk-offcanvas-bar h3,.uk-offcanvas-bar h4,.uk-offcanvas-bar h5,.uk-offcanvas-bar h6,.uk-overlay-primary .uk-h1,.uk-overlay-primary .uk-h2,.uk-overlay-primary .uk-h3,.uk-overlay-primary .uk-h4,.uk-overlay-primary .uk-h5,.uk-overlay-primary .uk-h6,.uk-overlay-primary .uk-heading-2xlarge,.uk-overlay-primary .uk-heading-large,.uk-overlay-primary .uk-heading-medium,.uk-overlay-primary .uk-heading-small,.uk-overlay-primary .uk-heading-xlarge,.uk-overlay-primary h1,.uk-overlay-primary h2,.uk-overlay-primary h3,.uk-overlay-primary h4,.uk-overlay-primary h5,.uk-overlay-primary h6,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h6{color:#fff}.uk-card-primary.uk-card-body blockquote,.uk-card-primary>:not([class*=uk-card-media]) blockquote,.uk-card-secondary.uk-card-body blockquote,.uk-card-secondary>:not([class*=uk-card-media]) blockquote,.uk-light blockquote,.uk-offcanvas-bar blockquote,.uk-overlay-primary blockquote,.uk-section-primary:not(.uk-preserve-color) blockquote,.uk-section-secondary:not(.uk-preserve-color) blockquote,.uk-tile-primary:not(.uk-preserve-color) blockquote,.uk-tile-secondary:not(.uk-preserve-color) blockquote{color:#fff}.uk-card-primary.uk-card-body blockquote footer,.uk-card-primary>:not([class*=uk-card-media]) blockquote footer,.uk-card-secondary.uk-card-body blockquote footer,.uk-card-secondary>:not([class*=uk-card-media]) blockquote footer,.uk-light blockquote footer,.uk-offcanvas-bar blockquote footer,.uk-overlay-primary blockquote footer,.uk-section-primary:not(.uk-preserve-color) blockquote footer,.uk-section-secondary:not(.uk-preserve-color) blockquote footer,.uk-tile-primary:not(.uk-preserve-color) blockquote footer,.uk-tile-secondary:not(.uk-preserve-color) blockquote footer{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*=uk-card-media]) .uk-hr,.uk-card-primary>:not([class*=uk-card-media]) hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-hr,.uk-card-secondary>:not([class*=uk-card-media]) hr,.uk-light .uk-hr,.uk-light hr,.uk-offcanvas-bar .uk-hr,.uk-offcanvas-bar hr,.uk-overlay-primary .uk-hr,.uk-overlay-primary hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) hr{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-link-muted,.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-secondary.uk-card-body .uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-light .uk-link-muted,.uk-light .uk-link-muted a,.uk-offcanvas-bar .uk-link-muted,.uk-offcanvas-bar .uk-link-muted a,.uk-overlay-primary .uk-link-muted,.uk-overlay-primary .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-muted:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-muted:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-light .uk-link-muted:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-muted:hover,.uk-overlay-primary .uk-link-muted a:hover,.uk-overlay-primary .uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-text:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-light .uk-link-text:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-text:hover,.uk-overlay-primary .uk-link-text a:hover,.uk-overlay-primary .uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-heading:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-heading:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-heading:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-light .uk-link-heading:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-heading:hover,.uk-overlay-primary .uk-link-heading a:hover,.uk-overlay-primary .uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading:hover{color:#fff}.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-light .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider,.uk-overlay-primary .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-light .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before,.uk-overlay-primary .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-light .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::before,.uk-overlay-primary .uk-heading-line>::after,.uk-overlay-primary .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-light .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon,.uk-overlay-primary .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.2%29%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-light .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::before,.uk-overlay-primary .uk-divider-icon::after,.uk-overlay-primary .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-light .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after,.uk-overlay-primary .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-light .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical,.uk-overlay-primary .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-muted li::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-muted li::marker,.uk-card-secondary.uk-card-body .uk-list-muted li::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-muted li::marker,.uk-light .uk-list-muted li::marker,.uk-offcanvas-bar .uk-list-muted li::marker,.uk-overlay-primary .uk-list-muted li::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted li::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted li::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted li::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted li::marker{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-list-emphasis li::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-emphasis li::marker,.uk-card-secondary.uk-card-body .uk-list-emphasis li::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-emphasis li::marker,.uk-light .uk-list-emphasis li::marker,.uk-offcanvas-bar .uk-list-emphasis li::marker,.uk-overlay-primary .uk-list-emphasis li::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis li::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis li::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis li::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis li::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-primary li::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-primary li::marker,.uk-card-secondary.uk-card-body .uk-list-primary li::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-primary li::marker,.uk-light .uk-list-primary li::marker,.uk-offcanvas-bar .uk-list-primary li::marker,.uk-overlay-primary .uk-list-primary li::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary li::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary li::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary li::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary li::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-secondary li::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-secondary li::marker,.uk-card-secondary.uk-card-body .uk-list-secondary li::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-secondary li::marker,.uk-light .uk-list-secondary li::marker,.uk-offcanvas-bar .uk-list-secondary li::marker,.uk-overlay-primary .uk-list-secondary li::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary li::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary li::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary li::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary li::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-bullet>li::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-bullet>li::before,.uk-card-secondary.uk-card-body .uk-list-bullet>li::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-bullet>li::before,.uk-light .uk-list-bullet>li::before,.uk-offcanvas-bar .uk-list-bullet>li::before,.uk-overlay-primary .uk-list-bullet>li::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>li::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>li::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-divider>li:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>li:nth-child(n+2),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-divider>li:nth-child(n+2),.uk-light .uk-list-divider>li:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>li:nth-child(n+2),.uk-overlay-primary .uk-list-divider>li:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>li:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>li:nth-of-type(odd),.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd){border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>li:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>li:nth-of-type(odd),.uk-light .uk-list-striped>li:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>li:nth-of-type(odd),.uk-overlay-primary .uk-list-striped>li:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>li:nth-of-type(odd){background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-table th,.uk-card-primary>:not([class*=uk-card-media]) .uk-table th,.uk-card-secondary.uk-card-body .uk-table th,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table th,.uk-light .uk-table th,.uk-offcanvas-bar .uk-table th,.uk-overlay-primary .uk-table th,.uk-section-primary:not(.uk-preserve-color) .uk-table th,.uk-section-secondary:not(.uk-preserve-color) .uk-table th,.uk-tile-primary:not(.uk-preserve-color) .uk-table th,.uk-tile-secondary:not(.uk-preserve-color) .uk-table th{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-table caption,.uk-card-primary>:not([class*=uk-card-media]) .uk-table caption,.uk-card-secondary.uk-card-body .uk-table caption,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table caption,.uk-light .uk-table caption,.uk-offcanvas-bar .uk-table caption,.uk-overlay-primary .uk-table caption,.uk-section-primary:not(.uk-preserve-color) .uk-table caption,.uk-section-secondary:not(.uk-preserve-color) .uk-table caption,.uk-tile-primary:not(.uk-preserve-color) .uk-table caption,.uk-tile-secondary:not(.uk-preserve-color) .uk-table caption{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-primary.uk-card-body .uk-table>tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-card-secondary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-secondary.uk-card-body .uk-table>tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-light .uk-table tbody tr.uk-active,.uk-light .uk-table>tr.uk-active,.uk-offcanvas-bar .uk-table tbody tr.uk-active,.uk-offcanvas-bar .uk-table>tr.uk-active,.uk-overlay-primary .uk-table tbody tr.uk-active,.uk-overlay-primary .uk-table>tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-primary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-light .uk-table-divider>:first-child>tr:not(:first-child),.uk-light .uk-table-divider>:not(:first-child)>tr,.uk-light .uk-table-divider>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:first-child>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:not(:first-child)>tr,.uk-offcanvas-bar .uk-table-divider>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>:first-child>tr:not(:first-child),.uk-overlay-primary .uk-table-divider>:not(:first-child)>tr,.uk-overlay-primary .uk-table-divider>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-light .uk-table-striped tbody tr:nth-of-type(odd),.uk-light .uk-table-striped>tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped tbody tr:nth-of-type(odd),.uk-overlay-primary .uk-table-striped>tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd){background:rgba(255,255,255,.1);border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-primary.uk-card-body .uk-table-hover>tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover>tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-light .uk-table-hover tbody tr:hover,.uk-light .uk-table-hover>tr:hover,.uk-offcanvas-bar .uk-table-hover tbody tr:hover,.uk-offcanvas-bar .uk-table-hover>tr:hover,.uk-overlay-primary .uk-table-hover tbody tr:hover,.uk-overlay-primary .uk-table-hover>tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link,.uk-light .uk-icon-link,.uk-offcanvas-bar .uk-icon-link,.uk-overlay-primary .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-link:focus,.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:focus,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-light .uk-icon-link:focus,.uk-light .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:focus,.uk-offcanvas-bar .uk-icon-link:hover,.uk-overlay-primary .uk-icon-link:focus,.uk-overlay-primary .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-light .uk-icon-link:active,.uk-offcanvas-bar .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-icon-link:active,.uk-overlay-primary .uk-active>.uk-icon-link,.uk-overlay-primary .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button,.uk-light .uk-icon-button,.uk-offcanvas-bar .uk-icon-button,.uk-overlay-primary .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-button:focus,.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:focus,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-light .uk-icon-button:focus,.uk-light .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:focus,.uk-offcanvas-bar .uk-icon-button:hover,.uk-overlay-primary .uk-icon-button:focus,.uk-overlay-primary .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover{background-color:rgba(242,242,242,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-light .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active,.uk-overlay-primary .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active{background-color:rgba(230,230,230,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-input,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*=uk-card-media]) .uk-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-select,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea,.uk-light .uk-input,.uk-light .uk-select,.uk-light .uk-textarea,.uk-offcanvas-bar .uk-input,.uk-offcanvas-bar .uk-select,.uk-offcanvas-bar .uk-textarea,.uk-overlay-primary .uk-input,.uk-overlay-primary .uk-select,.uk-overlay-primary .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7);background-clip:padding-box;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-light .uk-input:focus,.uk-light .uk-select:focus,.uk-light .uk-textarea:focus,.uk-offcanvas-bar .uk-input:focus,.uk-offcanvas-bar .uk-select:focus,.uk-offcanvas-bar .uk-textarea:focus,.uk-overlay-primary .uk-input:focus,.uk-overlay-primary .uk-select:focus,.uk-overlay-primary .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-input::-ms-input-placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-input::-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-input::-ms-input-placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input::-ms-input-placeholder,.uk-light .uk-input::-ms-input-placeholder,.uk-offcanvas-bar .uk-input::-ms-input-placeholder,.uk-overlay-primary .uk-input::-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::-ms-input-placeholder{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-light .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder,.uk-overlay-primary .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-textarea::-ms-input-placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea::-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-textarea::-ms-input-placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea::-ms-input-placeholder,.uk-light .uk-textarea::-ms-input-placeholder,.uk-offcanvas-bar .uk-textarea::-ms-input-placeholder,.uk-overlay-primary .uk-textarea::-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::-ms-input-placeholder{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-light .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder,.uk-overlay-primary .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-light .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]),.uk-overlay-primary .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%201%209%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2013%209%208%2015%208%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-light .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:hover,.uk-overlay-primary .uk-input[list]:focus,.uk-overlay-primary .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio,.uk-light .uk-checkbox,.uk-light .uk-radio,.uk-offcanvas-bar .uk-checkbox,.uk-offcanvas-bar .uk-radio,.uk-overlay-primary .uk-checkbox,.uk-overlay-primary .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio{background-color:rgba(242,242,242,.1);border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-light .uk-radio:focus,.uk-offcanvas-bar .uk-checkbox:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-overlay-primary .uk-checkbox:focus,.uk-overlay-primary .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus{border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-radio:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-overlay-primary .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-color:#fff;border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-light .uk-radio:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-overlay-primary .uk-checkbox:checked:focus,.uk-overlay-primary .uk-checkbox:indeterminate:focus,.uk-overlay-primary .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus{background-color:#e6e6e6}.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-overlay-primary .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23666%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-light .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-overlay-primary .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23666%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-light .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-overlay-primary .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23666%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-form-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-label,.uk-card-secondary.uk-card-body .uk-form-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-label,.uk-light .uk-form-label,.uk-offcanvas-bar .uk-form-label,.uk-overlay-primary .uk-form-label,.uk-section-primary:not(.uk-preserve-color) .uk-form-label,.uk-section-secondary:not(.uk-preserve-color) .uk-form-label,.uk-tile-primary:not(.uk-preserve-color) .uk-form-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-label{color:#fff}.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon,.uk-light .uk-form-icon,.uk-offcanvas-bar .uk-form-icon,.uk-overlay-primary .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-light .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover,.uk-overlay-primary .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default,.uk-light .uk-button-default,.uk-offcanvas-bar .uk-button-default,.uk-overlay-primary .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default{background-color:transparent;color:#fff;border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-default:focus,.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:focus,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-light .uk-button-default:focus,.uk-light .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:focus,.uk-offcanvas-bar .uk-button-default:hover,.uk-overlay-primary .uk-button-default:focus,.uk-overlay-primary .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover{background-color:transparent;color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-light .uk-button-default:active,.uk-offcanvas-bar .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default:active,.uk-overlay-primary .uk-button-default.uk-active,.uk-overlay-primary .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active{background-color:transparent;color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary,.uk-light .uk-button-primary,.uk-offcanvas-bar .uk-button-primary,.uk-overlay-primary .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-button-primary:focus,.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:focus,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-light .uk-button-primary:focus,.uk-light .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:focus,.uk-offcanvas-bar .uk-button-primary:hover,.uk-overlay-primary .uk-button-primary:focus,.uk-overlay-primary .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover{background-color:#f2f2f2;color:#666}.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-light .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary:active,.uk-overlay-primary .uk-button-primary.uk-active,.uk-overlay-primary .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active{background-color:#e6e6e6;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-light .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary,.uk-overlay-primary .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary:focus,.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:focus,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-light .uk-button-secondary:focus,.uk-light .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:focus,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-overlay-primary .uk-button-secondary:focus,.uk-overlay-primary .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover{background-color:#f2f2f2;color:#666}.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-light .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-overlay-primary .uk-button-secondary.uk-active,.uk-overlay-primary .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active{background-color:#e6e6e6;color:#666}.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text,.uk-light .uk-button-text,.uk-offcanvas-bar .uk-button-text,.uk-overlay-primary .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text{color:#fff}.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-light .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before,.uk-overlay-primary .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before{border-bottom-color:#fff}.uk-card-primary.uk-card-body .uk-button-text:focus,.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:focus,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-light .uk-button-text:focus,.uk-light .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:focus,.uk-offcanvas-bar .uk-button-text:hover,.uk-overlay-primary .uk-button-text:focus,.uk-overlay-primary .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover{color:#fff}.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-light .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled,.uk-overlay-primary .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link,.uk-light .uk-button-link,.uk-offcanvas-bar .uk-button-link,.uk-overlay-primary .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-button-link:focus,.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:focus,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-light .uk-button-link:focus,.uk-light .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:focus,.uk-offcanvas-bar .uk-button-link:hover,.uk-overlay-primary .uk-button-link:focus,.uk-overlay-primary .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before,.uk-overlay-primary .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-overlay-primary .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*=uk-card-media]) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close,.uk-light .uk-close,.uk-offcanvas-bar .uk-close,.uk-overlay-primary .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-close:focus,.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-close:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:focus,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close:hover,.uk-light .uk-close:focus,.uk-light .uk-close:hover,.uk-offcanvas-bar .uk-close:focus,.uk-offcanvas-bar .uk-close:hover,.uk-overlay-primary .uk-close:focus,.uk-overlay-primary .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:focus,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop,.uk-light .uk-totop,.uk-offcanvas-bar .uk-totop,.uk-overlay-primary .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-totop:focus,.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:focus,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-light .uk-totop:focus,.uk-light .uk-totop:hover,.uk-offcanvas-bar .uk-totop:focus,.uk-offcanvas-bar .uk-totop:hover,.uk-overlay-primary .uk-totop:focus,.uk-overlay-primary .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:active,.uk-light .uk-totop:active,.uk-offcanvas-bar .uk-totop:active,.uk-overlay-primary .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active{color:#fff}.uk-card-primary.uk-card-body .uk-marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker,.uk-card-secondary.uk-card-body .uk-marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker,.uk-light .uk-marker,.uk-offcanvas-bar .uk-marker,.uk-overlay-primary .uk-marker,.uk-section-primary:not(.uk-preserve-color) .uk-marker,.uk-section-secondary:not(.uk-preserve-color) .uk-marker,.uk-tile-primary:not(.uk-preserve-color) .uk-marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker{background:#f8f8f8;color:#666}.uk-card-primary.uk-card-body .uk-marker:focus,.uk-card-primary.uk-card-body .uk-marker:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-card-secondary.uk-card-body .uk-marker:focus,.uk-card-secondary.uk-card-body .uk-marker:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-light .uk-marker:focus,.uk-light .uk-marker:hover,.uk-offcanvas-bar .uk-marker:focus,.uk-offcanvas-bar .uk-marker:hover,.uk-overlay-primary .uk-marker:focus,.uk-overlay-primary .uk-marker:hover,.uk-section-primary:not(.uk-preserve-color) .uk-marker:focus,.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-marker:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-marker:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover{color:#666}.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge,.uk-light .uk-badge,.uk-offcanvas-bar .uk-badge,.uk-overlay-primary .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-badge:focus,.uk-card-primary.uk-card-body .uk-badge:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge:hover,.uk-card-secondary.uk-card-body .uk-badge:focus,.uk-card-secondary.uk-card-body .uk-badge:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge:hover,.uk-light .uk-badge:focus,.uk-light .uk-badge:hover,.uk-offcanvas-bar .uk-badge:focus,.uk-offcanvas-bar .uk-badge:hover,.uk-overlay-primary .uk-badge:focus,.uk-overlay-primary .uk-badge:hover,.uk-section-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-section-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-badge:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge:hover{color:#666}.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-label,.uk-light .uk-label,.uk-offcanvas-bar .uk-label,.uk-overlay-primary .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-article-meta,.uk-light .uk-article-meta,.uk-offcanvas-bar .uk-article-meta,.uk-overlay-primary .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input,.uk-light .uk-search-input,.uk-offcanvas-bar .uk-search-input,.uk-overlay-primary .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input:-ms-input-placeholder,.uk-card-secondary.uk-card-body .uk-search-input:-ms-input-placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input:-ms-input-placeholder,.uk-light .uk-search-input:-ms-input-placeholder,.uk-offcanvas-bar .uk-search-input:-ms-input-placeholder,.uk-overlay-primary .uk-search-input:-ms-input-placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input:-ms-input-placeholder{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-light .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder,.uk-overlay-primary .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-light .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon,.uk-overlay-primary .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-light .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover,.uk-overlay-primary .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-light .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input,.uk-overlay-primary .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input{background-color:transparent;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-light .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus,.uk-overlay-primary .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus{background-color:transparent}.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-light .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input,.uk-overlay-primary .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input{background-color:transparent}.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-light .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input,.uk-overlay-primary .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input{background-color:transparent}.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-light .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle,.uk-overlay-primary .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-toggle:focus,.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:focus,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-light .uk-search-toggle:focus,.uk-light .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:focus,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-overlay-primary .uk-search-toggle:focus,.uk-overlay-primary .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent>a::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-parent-icon>.uk-parent>a::after,.uk-light .uk-nav-parent-icon>.uk-parent>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20stroke-width%3D%221.1%22%20points%3D%2210%201%204%207%2010%2013%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary.uk-card-body .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-light .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-offcanvas-bar .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-overlay-primary .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-parent-icon>.uk-parent.uk-open>a::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20stroke-width%3D%221.1%22%20points%3D%221%204%207%2010%2013%204%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-light .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a,.uk-overlay-primary .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:focus,.uk-light .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:focus,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-overlay-primary .uk-nav-default>li>a:focus,.uk-overlay-primary .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-light .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a,.uk-overlay-primary .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-light .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header,.uk-overlay-primary .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-light .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider,.uk-overlay-primary .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-light .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a,.uk-overlay-primary .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:focus,.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-light .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a,.uk-overlay-primary .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:focus,.uk-light .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:focus,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-overlay-primary .uk-nav-primary>li>a:focus,.uk-overlay-primary .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-light .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a,.uk-overlay-primary .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-light .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header,.uk-overlay-primary .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-light .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider,.uk-overlay-primary .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-light .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:focus,.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:focus,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:focus,.uk-overlay-primary .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-overlay-primary .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-light .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a,.uk-overlay-primary .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a.uk-open,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:focus,.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a.uk-open,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:focus,.uk-light .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a.uk-open,.uk-light .uk-navbar-nav>li>a:focus,.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li>a.uk-open,.uk-offcanvas-bar .uk-navbar-nav>li>a:focus,.uk-overlay-primary .uk-navbar-nav>li:hover>a,.uk-overlay-primary .uk-navbar-nav>li>a.uk-open,.uk-overlay-primary .uk-navbar-nav>li>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:focus{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-light .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active,.uk-overlay-primary .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-light .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a,.uk-overlay-primary .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-light .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item,.uk-overlay-primary .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-light .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle,.uk-overlay-primary .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-primary.uk-card-body .uk-navbar-toggle:focus,.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle.uk-open,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle.uk-open,.uk-card-secondary.uk-card-body .uk-navbar-toggle:focus,.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle.uk-open,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle.uk-open,.uk-light .uk-navbar-toggle:focus,.uk-light .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle.uk-open,.uk-offcanvas-bar .uk-navbar-toggle:focus,.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-overlay-primary .uk-navbar-toggle.uk-open,.uk-overlay-primary .uk-navbar-toggle:focus,.uk-overlay-primary .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle.uk-open,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-light .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child,.uk-overlay-primary .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:focus,.uk-light .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:focus,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-overlay-primary .uk-subnav>*>a:focus,.uk-overlay-primary .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-light .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a,.uk-overlay-primary .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-light .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child,.uk-overlay-primary .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child{background-color:transparent;color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:focus,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:focus,.uk-light .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:focus,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-overlay-primary .uk-subnav-pill>*>a:focus,.uk-overlay-primary .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-light .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active,.uk-overlay-primary .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-light .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a,.uk-overlay-primary .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#666}.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-light .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a,.uk-overlay-primary .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-light .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*,.uk-overlay-primary .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:focus,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:focus,.uk-light .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:focus,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-overlay-primary .uk-breadcrumb>*>:focus,.uk-overlay-primary .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-light .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*,.uk-overlay-primary .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-overlay-primary .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-light .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*,.uk-overlay-primary .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>:focus,.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:focus,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:focus,.uk-light .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:focus,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-overlay-primary .uk-pagination>*>:focus,.uk-overlay-primary .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-light .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*,.uk-overlay-primary .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-light .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*,.uk-overlay-primary .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab::before,.uk-card-secondary.uk-card-body .uk-tab::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab::before,.uk-light .uk-tab::before,.uk-offcanvas-bar .uk-tab::before,.uk-overlay-primary .uk-tab::before,.uk-section-primary:not(.uk-preserve-color) .uk-tab::before,.uk-section-secondary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-primary:not(.uk-preserve-color) .uk-tab::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab::before{border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-light .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a,.uk-overlay-primary .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab>*>a:focus,.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:focus,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:focus,.uk-light .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:focus,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-overlay-primary .uk-tab>*>a:focus,.uk-overlay-primary .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-light .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a,.uk-overlay-primary .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-light .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a,.uk-overlay-primary .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav,.uk-light .uk-slidenav,.uk-offcanvas-bar .uk-slidenav,.uk-overlay-primary .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-slidenav:focus,.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:focus,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-light .uk-slidenav:focus,.uk-light .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:focus,.uk-offcanvas-bar .uk-slidenav:hover,.uk-overlay-primary .uk-slidenav:focus,.uk-overlay-primary .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover{color:rgba(255,255,255,.95)}.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-light .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active,.uk-overlay-primary .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-light .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*,.uk-overlay-primary .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*{background-color:transparent;border-color:rgba(255,255,255,.9)}.uk-card-primary.uk-card-body .uk-dotnav>*>:focus,.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:focus,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:focus,.uk-light .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:focus,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-overlay-primary .uk-dotnav>*>:focus,.uk-overlay-primary .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover{background-color:rgba(255,255,255,.9);border-color:transparent}.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-light .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active,.uk-overlay-primary .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active{background-color:rgba(255,255,255,.5);border-color:transparent}.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-light .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*,.uk-overlay-primary .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,.9);border-color:transparent}.uk-card-primary.uk-card-body .uk-accordion-title,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-card-secondary.uk-card-body .uk-accordion-title,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-light .uk-accordion-title,.uk-offcanvas-bar .uk-accordion-title,.uk-overlay-primary .uk-accordion-title,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title{color:#fff}.uk-card-primary.uk-card-body .uk-accordion-title:focus,.uk-card-primary.uk-card-body .uk-accordion-title:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-card-secondary.uk-card-body .uk-accordion-title:focus,.uk-card-secondary.uk-card-body .uk-accordion-title:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-light .uk-accordion-title:focus,.uk-light .uk-accordion-title:hover,.uk-offcanvas-bar .uk-accordion-title:focus,.uk-offcanvas-bar .uk-accordion-title:hover,.uk-overlay-primary .uk-accordion-title:focus,.uk-overlay-primary .uk-accordion-title:hover,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title:focus,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-light .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a,.uk-overlay-primary .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:focus,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-light .uk-iconnav>*>a:focus,.uk-light .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:focus,.uk-offcanvas-bar .uk-iconnav>*>a:hover,.uk-overlay-primary .uk-iconnav>*>a:focus,.uk-overlay-primary .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-light .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a,.uk-overlay-primary .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-lead,.uk-light .uk-text-lead,.uk-offcanvas-bar .uk-text-lead,.uk-overlay-primary .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-meta,.uk-light .uk-text-meta,.uk-offcanvas-bar .uk-text-meta,.uk-overlay-primary .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-muted,.uk-light .uk-text-muted,.uk-offcanvas-bar .uk-text-muted,.uk-overlay-primary .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-light .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis,.uk-overlay-primary .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-primary,.uk-light .uk-text-primary,.uk-offcanvas-bar .uk-text-primary,.uk-overlay-primary .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-light .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary,.uk-overlay-primary .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary{color:#fff!important}.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-column-divider,.uk-light .uk-column-divider,.uk-offcanvas-bar .uk-column-divider,.uk-overlay-primary .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider{column-rule-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo,.uk-light .uk-logo,.uk-offcanvas-bar .uk-logo,.uk-overlay-primary .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-logo:focus,.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:focus,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-light .uk-logo:focus,.uk-light .uk-logo:hover,.uk-offcanvas-bar .uk-logo:focus,.uk-offcanvas-bar .uk-logo:hover,.uk-overlay-primary .uk-logo:focus,.uk-overlay-primary .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary.uk-card-body .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-light .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-offcanvas-bar .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-overlay-primary .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-section-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-primary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo>:not(.uk-logo-inverse):not(:only-of-type){display:none}.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-light .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse,.uk-overlay-primary .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse{display:inline}.uk-card-primary.uk-card-body .uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::before,.uk-light .uk-accordion-title::before,.uk-offcanvas-bar .uk-accordion-title::before,.uk-overlay-primary .uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::before,.uk-light .uk-open>.uk-accordion-title::before,.uk-offcanvas-bar .uk-open>.uk-accordion-title::before,.uk-overlay-primary .uk-open>.uk-accordion-title::before,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}@media print{*,::after,::before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}} \ No newline at end of file diff --git a/webclient/view/default/ui/js/suggest-tag.js b/webclient/view/default/ui/js/suggest-tag.js new file mode 100644 index 0000000..2cfdcef --- /dev/null +++ b/webclient/view/default/ui/js/suggest-tag.js @@ -0,0 +1,137 @@ +/** + * remove a tag from the tag "cloud" + * + * @param String tagString + * @param String targetStartString + */ +function removeTag(tagString,targetStartString) { + let toRemove = document.getElementById(targetStartString + '-' + tagString); + let saveInput = document.getElementById(targetStartString + '-save'); + + if(toRemove && saveInput) { + let newSaveValue = _removeFromCommaString(saveInput.value,tagString); + saveInput.value = newSaveValue; + toRemove.remove(); + } + else { + console.log("Delete element not found"); + } +} + +/** + * add a tag to the visible tag "cloud" and hidden form input + * used in the form for saving + * + * @param Object e + * @param String targetStartString + */ +function addTag(e,targetStartString) { + e = e || window.event; + + if(e.keyCode === 13) { + let elem = e.srcElement || e.target; + let saveInput = document.getElementById(targetStartString + '-save'); + let listBox = document.getElementById(targetStartString + '-listbox'); + let newTagTemplate = document.getElementById(targetStartString + '-template'); + + if(saveInput && listBox && elem && newTagTemplate) { + let toAdd = elem.value; + let newSaveValue = _appendToCommaString(saveInput.value,toAdd); + + let newT = newTagTemplate.cloneNode(true); + newT = _fillTagTemplate(newT,toAdd,targetStartString); + listBox.appendChild(newT); + + saveInput.value = newSaveValue; + } + + elem.value = ''; + e.preventDefault(); + } +} + +/** + * add given string to given existing string seperated with a comma + * + * @param String theString + * @param String toAdd + * @returns {string} + * @private + */ +function _appendToCommaString(theString,toAdd) { + if(theString.length > 0 && toAdd.length > 0) { + let theArray = theString.split(','); + if(!theArray.includes(toAdd)) { + theString = theString + "," + toAdd + } + } + else if (toAdd.length > 0) { + theString = toAdd; + } + + return theString; +} + +/** + * add given string to given existing string seperated with a comma + * + * @param String theString + * @param String toAdd + * @returns {string} + * @private + */ +function _removeFromCommaString(theString,toRemove) { + if(theString.length > 0 && toRemove.length > 0) { + let theArray = theString.split(','); + + if(theArray.includes(toRemove)) { + for( let i = theArray.length-1; i >= 0; i--){ + if ( theArray[i] === toRemove) theArray.splice(i, 1); + } + + theString = theArray.join(","); + } + } + + return theString; +} + +/** + * remove from given list the given value if it exists + * + * @param Object list + * @param String value + * @private + */ +function _removeFromDatalist(list, value) { + if(list.options.length > 0 && value && value.length > 0) { + for (i = 0; i < list.options.length; i++) { + if(list.options[i].value == value) { + list.options[i].remove(); + } + } + } +} + +/** + * fill the tag template with the right data and js calls + * depends on the html template created in the html code + * + * @param Object el The already cloned node + * @param String newTagString The new tag name + * @param String targetStartString + * @returns Object the cloned el + * @private + */ +function _fillTagTemplate(el,newTagString,targetStartString) { + el.removeAttribute('style'); + el.setAttribute('id',targetStartString + '-' + newTagString); + + let spanEl = el.querySelector('span'); + spanEl.innerHTML = newTagString; + + let aEl = el.querySelector('a'); + aEl.setAttribute('onclick', "removeTag('"+newTagString+"','"+targetStartString+"');"); + + return el; +} diff --git a/webclient/view/default/ui/js/uikit-icons.min.js b/webclient/view/default/ui/js/uikit-icons.min.js new file mode 100644 index 0000000..2f980c0 --- /dev/null +++ b/webclient/view/default/ui/js/uikit-icons.min.js @@ -0,0 +1,3 @@ +/*! UIkit 3.4.4 | https://www.getuikit.com | (c) 2014 - 2020 YOOtheme | MIT License */ + +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define("uikiticons",i):(t=t||self).UIkitIcons=i()}(this,function(){"use strict";function i(t){i.installed||t.icon.add({"500px":'',album:'',"arrow-down":'',"arrow-left":'',"arrow-right":'',"arrow-up":'',ban:'',behance:'',bell:'',bold:'',bolt:'',bookmark:'',calendar:'',camera:'',cart:'',check:'',"chevron-double-left":'',"chevron-double-right":'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',clock:'',close:'',"cloud-download":'',"cloud-upload":'',code:'',cog:'',comment:'',commenting:'',comments:'',copy:'',"credit-card":'',database:'',desktop:'',download:'',dribbble:'',etsy:'',expand:'',facebook:'',"file-edit":'',"file-pdf":'',"file-text":'',file:'',flickr:'',folder:'',forward:'',foursquare:'',future:'',"git-branch":'',"git-fork":'',"github-alt":'',github:'',gitter:'',"google-plus":'',google:'',grid:'',happy:'',hashtag:'',heart:'',history:'',home:'',image:'',info:'',instagram:'',italic:'',joomla:'',laptop:'',lifesaver:'',link:'',linkedin:'',list:'',location:'',lock:'',mail:'',menu:'',microphone:'',"minus-circle":'',minus:'',"more-vertical":'',more:'',move:'',nut:'',pagekit:'',"paint-bucket":'',pencil:'',"phone-landscape":'',phone:'',pinterest:'',"play-circle":'',play:'',"plus-circle":'',plus:'',print:'',pull:'',push:'',question:'',"quote-right":'',receiver:'',reddit:'',refresh:'',reply:'',rss:'',search:'',server:'',settings:'',shrink:'',"sign-in":'',"sign-out":'',social:'',soundcloud:'',star:'',strikethrough:'',table:'',"tablet-landscape":'',tablet:'',tag:'',thumbnails:'',trash:'',"triangle-down":'',"triangle-left":'',"triangle-right":'',"triangle-up":'',tripadvisor:'',tumblr:'',tv:'',twitter:'',uikit:'',unlock:'',upload:'',user:'',users:'',"video-camera":'',vimeo:'',warning:'',whatsapp:'',wordpress:'',world:'',xing:'',yelp:'',youtube:''})}return"undefined"!=typeof window&&window.UIkit&&window.UIkit.use(i),i}); \ No newline at end of file diff --git a/webclient/view/default/ui/js/uikit.min.js b/webclient/view/default/ui/js/uikit.min.js new file mode 100644 index 0000000..5fddab3 --- /dev/null +++ b/webclient/view/default/ui/js/uikit.min.js @@ -0,0 +1,3 @@ +/*! UIkit 3.5.3 | https://www.getuikit.com | (c) 2014 - 2020 YOOtheme | MIT License */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define("uikit",e):(t=t||self).UIkit=e()}(this,function(){"use strict";var t=Object.prototype,i=t.hasOwnProperty;function l(t,e){return i.call(t,e)}var e={},n=/([a-z\d])([A-Z])/g;function d(t){return t in e||(e[t]=t.replace(n,"$1-$2").toLowerCase()),e[t]}var r=/-(\w)/g;function f(t){return t.replace(r,o)}function o(t,e){return e?e.toUpperCase():""}function p(t){return t.length?o(0,t.charAt(0))+t.slice(1):""}var s=String.prototype,a=s.startsWith||function(t){return 0===this.lastIndexOf(t,0)};function w(t,e){return a.call(t,e)}var h=s.endsWith||function(t){return this.substr(-t.length)===t};function u(t,e){return h.call(t,e)}function c(t,e){return!!~this.indexOf(t,e)}var m=Array.prototype,g=s.includes||c,v=m.includes||c;function b(t,e){return t&&(D(t)?g:v).call(t,e)}var x=m.findIndex||function(t){for(var e=arguments,i=0;ie.left&&t.tope.top}function nt(t,e){return t.x<=e.right&&t.x>=e.left&&t.y<=e.bottom&&t.y>=e.top}var rt={ratio:function(t,e,i){var n="width"===e?"height":"width",r={};return r[n]=t[e]?Math.round(i*t[n]/t[e]):t[n],r[e]=i,r},contain:function(i,n){var r=this;return J(i=G({},i),function(t,e){return i=i[e]>n[e]?r.ratio(i,e,n[e]):i}),i},cover:function(i,n){var r=this;return J(i=this.contain(i,n),function(t,e){return i=i[e]+~-]/,_t=/([!>+~-])(?=\s+[!>+~-]|\s*$)/g;function Ct(t){return D(t)&&t.match(Et)}var At=/.*?[^\\](?:,|$)/g;var Mt=ut?Element.prototype:{},Nt=Mt.matches||Mt.webkitMatchesSelector||Mt.msMatchesSelector||et;function zt(t,e){return V(t).some(function(t){return Nt.call(t,e)})}var Dt=Mt.closest||function(t){var e=this;do{if(zt(e,t))return e}while(e=Pt(e))};function Bt(t,e){return w(e,">")&&(e=e.slice(1)),M(t)?Dt.call(t,e):V(t).map(function(t){return Bt(t,e)}).filter(Boolean)}function Pt(t){return(t=W(t))&&M(t.parentNode)&&t.parentNode}var Ot=ut&&window.CSS&&CSS.escape||function(t){return t.replace(/([^\x7f-\uFFFF\w-])/g,function(t){return"\\"+t})};function Ht(t){return D(t)?Ot.call(null,t):""}var Lt={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,menuitem:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};function Ft(t){return V(t).some(function(t){return Lt[t.tagName.toLowerCase()]})}function jt(t){return V(t).some(function(t){return t.offsetWidth||t.offsetHeight||t.getClientRects().length})}var Wt="input,select,textarea,button";function Vt(t){return V(t).some(function(t){return zt(t,Wt)})}function Rt(t,e){return V(t).filter(function(t){return zt(t,e)})}function qt(t,e){return D(e)?zt(t,e)||!!Bt(t,e):t===e||(_(e)?e.documentElement:W(e)).contains(W(t))}function Ut(t,e){for(var i=[];t=Pt(t);)e&&!zt(t,e)||i.push(t);return i}function Yt(t,e){var i=(t=W(t))?V(t.children):[];return e?Rt(i,e):i}function Xt(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i,n,r=Qt(t),o=r[0],s=r[1],a=r[2],h=r[3],u=r[4],o=ne(o);return 1]*>/,_e=/^<(\w+)\s*\/?>(?:<\/\1>)?$/;function Ce(t){var e=_e.exec(t);if(e)return document.createElement(e[1]);var i=document.createElement("div");return Ee.test(t)?i.insertAdjacentHTML("beforeend",t.trim()):i.textContent=t,1n[u]){var i=p[s]/2,r="center"===l[a]?-m[s]/2:0;return"center"===c[a]&&(o(i,r)||o(-i,-r))||o(t,e)}function o(e,t){var i=(g[h]+e+t-2*d[a]).toFixed(4);if(i>=n[h]&&i+p[s]<=n[u])return g[h]=i,["element","target"].forEach(function(t){f[t][a]=e?f[t][a]===ri[s][1]?ri[s][2]:ri[s][1]:f[t][a]}),!0}})})),si(t,g),f}function si(i,n){if(!n)return ai(i);var r=si(i),o=Re(i,"position");["left","top"].forEach(function(t){var e;t in n&&(e=Re(i,t),Re(i,t,n[t]-r[t]+j("absolute"===o&&"auto"===e?hi(i)[t]:e)))})}function ai(t){if(!t)return{};var e,i,n=R(t),r=n.pageYOffset,o=n.pageXOffset;if(E(t)){var s=t.innerHeight,a=t.innerWidth;return{top:r,left:o,height:s,width:a,bottom:r+s,right:o+a}}jt(t)||"none"!==Re(t,"display")||(e=ot(t,"style"),i=ot(t,"hidden"),ot(t,{style:(e||"")+";display:block !important;",hidden:null}));var h=(t=W(t)).getBoundingClientRect();return H(e)||ot(t,{style:e,hidden:i}),{height:h.height,width:h.width,top:h.top+r,left:h.left+o,bottom:h.bottom+r,right:h.right+o}}function hi(t,e){e=e||W(t).offsetParent||R(t).document.documentElement;var i=si(t),n=si(e);return{top:i.top-n.top-j(Re(e,"borderTopWidth")),left:i.left-n.left-j(Re(e,"borderLeftWidth"))}}function ui(t){var e=[0,0];t=W(t);do{if(e[0]+=t.offsetTop,e[1]+=t.offsetLeft,"fixed"===Re(t,"position")){var i=R(t);return e[0]+=i.pageYOffset,e[1]+=i.pageXOffset,e}}while(t=t.offsetParent);return e}var ci=di("height"),li=di("width");function di(n){var r=p(n);return function(t,e){if(H(e)){if(E(t))return t["inner"+r];if(_(t)){var i=t.documentElement;return Math.max(i["offset"+r],i["scroll"+r])}return(e="auto"===(e=Re(t=W(t),n))?t["offset"+r]:j(e)||0)-fi(t,n)}Re(t,n,e||0===e?+e+fi(t,n)+"px":"")}}function fi(i,t,e){return void 0===e&&(e="border-box"),Re(i,"boxSizing")===e?ri[t].slice(1).map(p).reduce(function(t,e){return t+j(Re(i,"padding"+e))+j(Re(i,"border"+e+"Width"))},0):0}function pi(o,s,a,h){J(ri,function(t,e){var i=t[0],n=t[1],r=t[2];s[i]===r?o[n]+=a[e]*h:"center"===s[i]&&(o[n]+=a[e]*h/2)})}function mi(t){var e=/left|center|right/,i=/top|center|bottom/;return 1===(t=(t||"").split(" ")).length&&(t=e.test(t[0])?t.concat("center"):i.test(t[0])?["center"].concat(t):["center","center"]),{x:e.test(t[0])?t[0]:"center",y:i.test(t[1])?t[1]:"center"}}function gi(t,e,i){var n=(t||"").split(" "),r=n[0],o=n[1];return{x:r?j(r)*(u(r,"%")?e/100:1):0,y:o?j(o)*(u(o,"%")?i/100:1):0}}function vi(t){switch(t){case"left":return"right";case"right":return"left";case"top":return"bottom";case"bottom":return"top";default:return t}}function wi(t,e,i){return void 0===e&&(e="width"),void 0===i&&(i=window),P(t)?+t:u(t,"vh")?bi(ci(R(i)),t):u(t,"vw")?bi(li(R(i)),t):u(t,"%")?bi(ai(i)[e],t):j(t)}function bi(t,e){return t*j(e)/100}var xi={reads:[],writes:[],read:function(t){return this.reads.push(t),$i(),t},write:function(t){return this.writes.push(t),$i(),t},clear:function(t){return Si(this.reads,t)||Si(this.writes,t)},flush:yi};function yi(t){void 0===t&&(t=1),Ii(xi.reads),Ii(xi.writes.splice(0,xi.writes.length)),xi.scheduled=!1,(xi.reads.length||xi.writes.length)&&$i(t+1)}var ki=5;function $i(t){if(!xi.scheduled){if(xi.scheduled=!0,kiMath.round(si(t).height)}).reverse();return n.length?n:[i]}function Fi(t){return t===Wi(t)?window:t}function ji(t){return Li(t,/auto|scroll|hidden/)}function Wi(t){var e=R(t).document;return e.scrollingElement||e.documentElement}Ni.prototype.isVideo=function(){return this.isYoutube()||this.isVimeo()||this.isHTML5()},Ni.prototype.isHTML5=function(){return"VIDEO"===this.el.tagName},Ni.prototype.isIFrame=function(){return"IFRAME"===this.el.tagName},Ni.prototype.isYoutube=function(){return this.isIFrame()&&!!this.el.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/)},Ni.prototype.isVimeo=function(){return this.isIFrame()&&!!this.el.src.match(/vimeo\.com\/video\/.*/)},Ni.prototype.enableApi=function(){var e=this;if(this.ready)return this.ready;var i,r=this.isYoutube(),o=this.isVimeo();return r||o?this.ready=new ae(function(t){var n;Kt(e.el,"load",function(){var t;r&&(t=function(){return Di(e.el,{event:"listening",id:e.id})},i=setInterval(t,100),t())}),n=function(t){return r&&t.id===e.id&&"onReady"===t.event||o&&Number(t.player_id)===e.id},new ae(function(i){return Kt(window,"message",function(t,e){return i(e)},!1,function(t){var e=t.data;if(e&&D(e)){try{e=JSON.parse(e)}catch(t){return}return e&&n(e)}})}).then(function(){t(),i&&clearInterval(i)}),ot(e.el,"src",e.el.src+(b(e.el.src,"?")?"&":"?")+(r?"enablejsapi=1":"api=1&player_id="+e.id))}):ae.resolve()},Ni.prototype.play=function(){var t=this;if(this.isVideo())if(this.isIFrame())this.enableApi().then(function(){return Di(t.el,{func:"playVideo",method:"play"})});else if(this.isHTML5())try{var e=this.el.play();e&&e.catch(et)}catch(t){}},Ni.prototype.pause=function(){var t=this;this.isVideo()&&(this.isIFrame()?this.enableApi().then(function(){return Di(t.el,{func:"pauseVideo",method:"pause"})}):this.isHTML5()&&this.el.pause())},Ni.prototype.mute=function(){var t=this;this.isVideo()&&(this.isIFrame()?this.enableApi().then(function(){return Di(t.el,{func:"mute",method:"setVolume",value:0})}):this.isHTML5()&&(this.el.muted=!0,ot(this.el,"muted","")))};var Vi=ut&&window.IntersectionObserver||function(){function t(e,t){var i=this;void 0===t&&(t={});var n=t.rootMargin;void 0===n&&(n="0 0"),this.targets=[];var r,o=(n||"0 0").split(" ").map(j),s=o[0],a=o[1];this.offsetTop=s,this.offsetLeft=a,this.apply=function(){r=r||requestAnimationFrame(function(){return setTimeout(function(){var t=i.takeRecords();t.length&&e(t,i),r=!1})})},this.off=Xt(window,"scroll resize load",this.apply,{passive:!0,capture:!0})}return t.prototype.takeRecords=function(){var i=this;return this.targets.filter(function(t){var e=Bi(t.target,i.offsetTop,i.offsetLeft);if(null===t.isIntersecting||e^t.isIntersecting)return t.isIntersecting=e,!0})},t.prototype.observe=function(t){this.targets.push({target:t,isIntersecting:null}),this.apply()},t.prototype.disconnect=function(){this.targets=[],this.off()},t}();function Ri(t){return!(!w(t,"uk-")&&!w(t,"data-uk-"))&&f(t.replace("data-uk-","").replace("uk-",""))}function qi(t){this._init(t)}var Ui,Yi,Xi,Gi,Ki,Ji,Zi,Qi,tn;function en(t,e){if(t)for(var i in t)t[i]._connected&&t[i]._callUpdate(e)}function nn(t,e){var i={},n=t.args;void 0===n&&(n=[]);var r=t.props;void 0===r&&(r={});var o=t.el;if(!r)return i;for(var s in r){var a=d(s),h=ht(o,a);H(h)||(h=r[s]===Boolean&&""===h||on(r[s],h),("target"!==a||h&&!w(h,"_"))&&(i[s]=h))}var u=Mi(ht(o,e),n);for(var c in u){var l=f(c);void 0!==r[l]&&(i[l]=on(r[l],u[c]))}return i}function rn(e,i,n){T(i)||(i={name:n,handler:i});var t=i.name,r=i.el,o=i.handler,s=i.capture,a=i.passive,h=i.delegate,u=i.filter,c=i.self,r=$(r)?r.call(e):r||e.$el;k(r)?r.forEach(function(t){return rn(e,G({},i,{el:t}),n)}):!r||u&&!u.call(e)||e._events.push(Xt(r,t,h?D(h)?h:h.call(e):null,D(o)?e[o]:o.bind(e),{passive:a,capture:s,self:c}))}function on(t,e){return t===Boolean?L(e):t===Number?F(e):"list"===t?q(e):t?t(e):e}qi.util=Object.freeze({__proto__:null,ajax:de,getImage:fe,transition:Ze,Transition:Qe,animate:ei,Animation:ni,attr:ot,hasAttr:st,removeAttr:at,data:ht,addClass:De,removeClass:Be,removeClasses:Pe,replaceClass:Oe,hasClass:He,toggleClass:Le,positionAt:oi,offset:si,position:hi,offsetPosition:ui,height:ci,width:li,boxModelAdjust:fi,flipPosition:vi,toPx:wi,ready:pe,index:me,getIndex:ge,empty:ve,html:we,prepend:function(e,t){return(e=Me(e)).hasChildNodes()?ke(t,function(t){return e.insertBefore(t,e.firstChild)}):be(e,t)},append:be,before:xe,after:ye,remove:$e,wrapAll:Ie,wrapInner:Se,unwrap:Te,fragment:Ce,apply:Ae,$:Me,$$:Ne,inBrowser:ut,isIE:ct,isRtl:lt,hasTouch:pt,pointerDown:mt,pointerMove:gt,pointerUp:vt,pointerEnter:wt,pointerLeave:bt,pointerCancel:xt,on:Xt,off:Gt,once:Kt,trigger:Jt,createEvent:Zt,toEventTargets:ne,isTouch:re,getEventPos:oe,fastdom:xi,isVoidElement:Ft,isVisible:jt,selInput:Wt,isInput:Vt,filter:Rt,within:qt,parents:Ut,children:Yt,hasOwn:l,hyphenate:d,camelize:f,ucfirst:p,startsWith:w,endsWith:u,includes:b,findIndex:y,isArray:k,isFunction:$,isObject:I,isPlainObject:T,isWindow:E,isDocument:_,isJQuery:C,isNode:A,isElement:M,isNodeCollection:N,isBoolean:z,isString:D,isNumber:B,isNumeric:P,isEmpty:O,isUndefined:H,toBoolean:L,toNumber:F,toFloat:j,toNode:W,toNodes:V,toWindow:R,toList:q,toMs:U,isEqual:Y,swap:X,assign:G,last:K,each:J,sortBy:Z,uniqueBy:Q,clamp:tt,noop:et,intersectRect:it,pointInRect:nt,Dimensions:rt,MouseTracker:Ti,mergeOptions:Ai,parseOptions:Mi,Player:Ni,Promise:ae,Deferred:se,IntersectionObserver:Vi,query:yt,queryAll:kt,find:It,findAll:St,matches:zt,closest:Bt,parent:Pt,escape:Ht,css:Re,getStyles:qe,getStyle:Ue,getCssVar:Xe,propName:Ke,isInView:Bi,scrollTop:Pi,scrollIntoView:Oi,scrolledOver:Hi,scrollParents:Li,getViewport:Fi}),qi.data="__uikit__",qi.prefix="uk-",qi.options={},qi.version="3.5.3",Xi=(Ui=qi).data,Ui.use=function(t){if(!t.installed)return t.call(null,this),t.installed=!0,this},Ui.mixin=function(t,e){(e=(D(e)?Ui.component(e):e)||this).options=Ai(e.options,t)},Ui.extend=function(t){t=t||{};function e(t){this._init(t)}return((e.prototype=Object.create(this.prototype)).constructor=e).options=Ai(this.options,t),e.super=this,e.extend=this.extend,e},Ui.update=function(t,e){Ut(t=t?W(t):document.body).reverse().forEach(function(t){return en(t[Xi],e)}),Ae(t,function(t){return en(t[Xi],e)})},Object.defineProperty(Ui,"container",{get:function(){return Yi||document.body},set:function(t){Yi=Me(t)}}),(Gi=qi).prototype._callHook=function(t){var e=this,i=this.$options[t];i&&i.forEach(function(t){return t.call(e)})},Gi.prototype._callConnected=function(){this._connected||(this._data={},this._computeds={},this._frames={reads:{},writes:{}},this._initProps(),this._callHook("beforeConnect"),this._connected=!0,this._initEvents(),this._initObserver(),this._callHook("connected"),this._callUpdate())},Gi.prototype._callDisconnected=function(){this._connected&&(this._callHook("beforeDisconnect"),this._observer&&(this._observer.disconnect(),this._observer=null),this._unbindEvents(),this._callHook("disconnected"),this._connected=!1)},Gi.prototype._callUpdate=function(t){var o=this;void 0===t&&(t="update");var s=t.type||t;b(["update","resize"],s)&&this._callWatches();var e=this.$options.update,i=this._frames,a=i.reads,h=i.writes;e&&e.forEach(function(t,e){var i=t.read,n=t.write,r=t.events;"update"!==s&&!b(r,s)||(i&&!b(xi.reads,a[e])&&(a[e]=xi.read(function(){var t=o._connected&&i.call(o,o._data,s);!1===t&&n?xi.clear(h[e]):T(t)&&G(o._data,t)})),n&&!b(xi.writes,h[e])&&(h[e]=xi.write(function(){return o._connected&&n.call(o,o._data,s)})))})},Gi.prototype._callWatches=function(){var h,u=this,c=this._frames;c._watch||(h=!l(c,"_watch"),c._watch=xi.read(function(){if(u._connected){var t=u.$options.computed,e=u._computeds;for(var i in t){var n=l(e,i),r=e[i];delete e[i];var o=t[i],s=o.watch,a=o.immediate;s&&(h&&a||n&&!Y(r,u[i]))&&s.call(u,u[i],r)}c._watch=null}}))},Ji=0,(Ki=qi).prototype._init=function(t){(t=t||{}).data=function(t,e){var i=t.data,n=(t.el,e.args),r=e.props;void 0===r&&(r={});if(i=k(i)?O(n)?void 0:i.slice(0,n.length).reduce(function(t,e,i){return T(e)?G(t,e):t[n[i]]=e,t},{}):i)for(var o in i)H(i[o])?delete i[o]:i[o]=r[o]?on(r[o],i[o]):i[o];return i}(t,this.constructor.options),this.$options=Ai(this.constructor.options,t,this),this.$el=null,this.$props={},this._uid=Ji++,this._initData(),this._initMethods(),this._initComputeds(),this._callHook("created"),t.el&&this.$mount(t.el)},Ki.prototype._initData=function(){var t=this.$options.data;for(var e in void 0===t&&(t={}),t)this.$props[e]=this[e]=t[e]},Ki.prototype._initMethods=function(){var t=this.$options.methods;if(t)for(var e in t)this[e]=t[e].bind(this)},Ki.prototype._initComputeds=function(){var t=this.$options.computed;if(this._computeds={},t)for(var e in t)!function(n,r,o){Object.defineProperty(n,r,{enumerable:!0,get:function(){var t=n._computeds,e=n.$props,i=n.$el;return l(t,r)||(t[r]=(o.get||o).call(n,e,i)),t[r]},set:function(t){var e=n._computeds;e[r]=o.set?o.set.call(n,t):t,H(e[r])&&delete e[r]}})}(this,e,t[e])},Ki.prototype._initProps=function(t){var e;for(e in t=t||nn(this.$options,this.$name))H(t[e])||(this.$props[e]=t[e]);var i=[this.$options.computed,this.$options.methods];for(e in this.$props)e in t&&function(t,e){return t.every(function(t){return!t||!l(t,e)})}(i,e)&&(this[e]=this.$props[e])},Ki.prototype._initEvents=function(){var i=this;this._events=[];var t=this.$options.events;t&&t.forEach(function(t){if(l(t,"handler"))rn(i,t);else for(var e in t)rn(i,t[e],e)})},Ki.prototype._unbindEvents=function(){this._events.forEach(function(t){return t()}),delete this._events},Ki.prototype._initObserver=function(){var t,n=this,e=this.$options,r=e.attrs,i=e.props,o=e.el;!this._observer&&i&&!1!==r&&(r=k(r)?r:Object.keys(i),this._observer=new MutationObserver(function(t){var i=nn(n.$options,n.$name);t.some(function(t){var e=t.attributeName.replace("data-","");return(e===n.$name?r:[f(e)]).some(function(t){return!H(i[t])&&i[t]!==n.$props[t]})})&&n.$reset()}),t=r.map(d).concat(this.$name),this._observer.observe(o,{attributes:!0,attributeFilter:t.concat(t.map(function(t){return"data-"+t}))}))},Qi=(Zi=qi).data,tn={},Zi.component=function(s,t){var e=d(s);if(s=f(e),!t)return T(tn[s])&&(tn[s]=Zi.extend(tn[s])),tn[s];Zi[s]=function(t,i){for(var e=arguments.length,n=Array(e);e--;)n[e]=arguments[e];var r=Zi.component(s);return r.options.functional?new r({data:T(t)?t:[].concat(n)}):t?Ne(t).map(o)[0]:o(t);function o(t){var e=Zi.getComponent(t,s);if(e){if(!i)return e;e.$destroy()}return new r({el:t,data:i})}};var i=T(t)?G({},t):t.options;return i.name=s,i.install&&i.install(Zi,i,s),Zi._initialized&&!i.functional&&xi.read(function(){return Zi[s]("[uk-"+e+"],[data-uk-"+e+"]")}),tn[s]=T(t)?i:t},Zi.getComponents=function(t){return t&&t[Qi]||{}},Zi.getComponent=function(t,e){return Zi.getComponents(t)[e]},Zi.connect=function(t){if(t[Qi])for(var e in t[Qi])t[Qi][e]._callConnected();for(var i=0;i *",active:!1,animation:[!0],collapsible:!0,multiple:!1,clsOpen:"uk-open",toggle:"> .uk-accordion-title",content:"> .uk-accordion-content",transition:"ease",offset:0},computed:{items:{get:function(t,e){return Ne(t.targets,e)},watch:function(t,e){var i,n=this;t.forEach(function(t){return cn(Me(n.content,t),!He(t,n.clsOpen))}),e||He(t,this.clsOpen)||(i=!1!==this.active&&t[Number(this.active)]||!this.collapsible&&t[0])&&this.toggle(i,!1)},immediate:!0}},events:[{name:"click",delegate:function(){return this.targets+" "+this.$props.toggle},handler:function(t){t.preventDefault(),this.toggle(me(Ne(this.targets+" "+this.$props.toggle,this.$el),t.current))}}],methods:{toggle:function(t,r){var o=this,e=[this.items[ge(t,this.items)]],i=Rt(this.items,"."+this.clsOpen);this.multiple||b(i,e[0])||(e=e.concat(i)),(this.collapsible||Rt(e,":not(."+this.clsOpen+")").length)&&e.forEach(function(t){return o.toggleElement(t,!He(t,o.clsOpen),function(e,i){Le(e,o.clsOpen,i);var n=Me((e._wrapper?"> * ":"")+o.content,e);if(!1!==r&&o.hasTransition)return e._wrapper||(e._wrapper=Ie(n,"")),cn(n,!1),hn(o)(e._wrapper,i).then(function(){var t;cn(n,!i),delete e._wrapper,Te(n),i&&(Bi(t=Me(o.$props.toggle,e))||Oi(t,{offset:o.offset}))});cn(n,!i)})})}}};function cn(t,e){ot(t,"hidden",e?"":null)}var ln={mixins:[sn,an],args:"animation",props:{close:String},data:{animation:[!0],selClose:".uk-alert-close",duration:150,hideProps:G({opacity:0},an.data.hideProps)},events:[{name:"click",delegate:function(){return this.selClose},handler:function(t){t.preventDefault(),this.close()}}],methods:{close:function(){var t=this;this.toggleElement(this.$el).then(function(){return t.$destroy(!0)})}}},dn={args:"autoplay",props:{automute:Boolean,autoplay:Boolean},data:{automute:!1,autoplay:!0},computed:{inView:function(t){return"inview"===t.autoplay}},connected:function(){this.inView&&!st(this.$el,"preload")&&(this.$el.preload="none"),this.player=new Ni(this.$el),this.automute&&this.player.mute()},update:{read:function(){return!!this.player&&{visible:jt(this.$el)&&"hidden"!==Re(this.$el,"visibility"),inView:this.inView&&Bi(this.$el)}},write:function(t){var e=t.visible,i=t.inView;!e||this.inView&&!i?this.player.pause():(!0===this.autoplay||this.inView&&i)&&this.player.play()},events:["resize","scroll"]}},fn={mixins:[sn,dn],props:{width:Number,height:Number},data:{automute:!0},update:{read:function(){var t=this.$el,e=function(t){for(;t=Pt(t);)if("static"!==Re(t,"position"))return t}(t)||t.parentNode,i=e.offsetHeight,n=e.offsetWidth,r=rt.cover({width:this.width||t.naturalWidth||t.videoWidth||t.clientWidth,height:this.height||t.naturalHeight||t.videoHeight||t.clientHeight},{width:n+(n%2?1:0),height:i+(i%2?1:0)});return!(!r.width||!r.height)&&r},write:function(t){var e=t.height,i=t.width;Re(this.$el,{height:e,width:i})},events:["resize"]}};var pn,mn={props:{pos:String,offset:null,flip:Boolean,clsPos:String},data:{pos:"bottom-"+(lt?"right":"left"),flip:!0,offset:!1,clsPos:""},computed:{pos:function(t){var e=t.pos;return(e+(b(e,"-")?"":"-center")).split("-")},dir:function(){return this.pos[0]},align:function(){return this.pos[1]}},methods:{positionAt:function(t,e,i){var n;Pe(t,this.clsPos+"-(top|bottom|left|right)(-[a-z]+)?");var r=this.offset,o=this.getAxis();P(r)||(r=(n=Me(r))?si(n)["x"===o?"left":"top"]-si(e)["x"===o?"right":"bottom"]:0);var s=oi(t,e,"x"===o?vi(this.dir)+" "+this.align:this.align+" "+vi(this.dir),"x"===o?this.dir+" "+this.align:this.align+" "+this.dir,"x"===o?""+("left"===this.dir?-r:r):" "+("top"===this.dir?-r:r),null,this.flip,i).target,a=s.x,h=s.y;this.dir="x"===o?a:h,this.align="x"===o?h:a,Le(t,this.clsPos+"-"+this.dir+"-"+this.align,!1===this.offset)},getAxis:function(){return"top"===this.dir||"bottom"===this.dir?"y":"x"}}},gn={mixins:[mn,an],args:"pos",props:{mode:"list",toggle:Boolean,boundary:Boolean,boundaryAlign:Boolean,delayShow:Number,delayHide:Number,clsDrop:String},data:{mode:["click","hover"],toggle:"- *",boundary:ut&&window,boundaryAlign:!1,delayShow:0,delayHide:800,clsDrop:!1,animation:["uk-animation-fade"],cls:"uk-open"},computed:{boundary:function(t,e){return yt(t.boundary,e)},clsDrop:function(t){return t.clsDrop||"uk-"+this.$options.name},clsPos:function(){return this.clsDrop}},created:function(){this.tracker=new Ti},connected:function(){De(this.$el,this.clsDrop);var t=this.$props.toggle;this.toggle=t&&this.$create("toggle",yt(t,this.$el),{target:this.$el,mode:this.mode}),this.toggle||Jt(this.$el,"updatearia")},disconnected:function(){this.isActive()&&(pn=null)},events:[{name:"click",delegate:function(){return"."+this.clsDrop+"-close"},handler:function(t){t.preventDefault(),this.hide(!1)}},{name:"click",delegate:function(){return'a[href^="#"]'},handler:function(t){var e=t.defaultPrevented,i=t.current.hash;e||!i||qt(i,this.$el)||this.hide(!1)}},{name:"beforescroll",handler:function(){this.hide(!1)}},{name:"toggle",self:!0,handler:function(t,e){t.preventDefault(),this.isToggled()?this.hide(!1):this.show(e,!1)}},{name:"toggleshow",self:!0,handler:function(t,e){t.preventDefault(),this.show(e)}},{name:"togglehide",self:!0,handler:function(t){t.preventDefault(),this.hide()}},{name:wt,filter:function(){return b(this.mode,"hover")},handler:function(t){re(t)||this.clearTimers()}},{name:bt,filter:function(){return b(this.mode,"hover")},handler:function(t){re(t)||this.hide()}},{name:"toggled",self:!0,handler:function(){this.isToggled()&&(this.clearTimers(),this.position())}},{name:"show",self:!0,handler:function(){var o=this;(pn=this).tracker.init(),Jt(this.$el,"updatearia"),Kt(this.$el,"hide",Xt(document,mt,function(t){var r=t.target;return!qt(r,o.$el)&&Kt(document,vt+" "+xt+" scroll",function(t){var e=t.defaultPrevented,i=t.type,n=t.target;e||i!==vt||r!==n||o.toggle&&qt(r,o.toggle.$el)||o.hide(!1)},!0)}),{self:!0}),Kt(this.$el,"hide",Xt(document,"keydown",function(t){27===t.keyCode&&(t.preventDefault(),o.hide(!1))}),{self:!0})}},{name:"beforehide",self:!0,handler:function(){this.clearTimers()}},{name:"hide",handler:function(t){var e=t.target;this.$el===e?(pn=this.isActive()?null:pn,Jt(this.$el,"updatearia"),this.tracker.cancel()):pn=null===pn&&qt(e,this.$el)&&this.isToggled()?this:pn}},{name:"updatearia",self:!0,handler:function(t,e){t.preventDefault(),this.updateAria(this.$el),(e||this.toggle)&&(ot((e||this.toggle).$el,"aria-expanded",this.isToggled()),Le(this.toggle.$el,this.cls,this.isToggled()))}}],update:{write:function(){this.isToggled()&&!ni.inProgress(this.$el)&&this.position()},events:["resize"]},methods:{show:function(t,e){var i,n=this;if(void 0===t&&(t=this.toggle),void 0===e&&(e=!0),this.isToggled()&&t&&this.toggle&&t.$el!==this.toggle.$el&&this.hide(!1),this.toggle=t,this.clearTimers(),!this.isActive()){if(pn){if(e&&pn.isDelaying)return void(this.showTimer=setTimeout(this.show,10));for(;pn&&i!==pn&&!qt(this.$el,pn.$el);)(i=pn).hide(!1)}this.showTimer=setTimeout(function(){return!n.isToggled()&&n.toggleElement(n.$el,!0)},e&&this.delayShow||0)}},hide:function(t){var e=this;void 0===t&&(t=!0);function i(){return e.toggleElement(e.$el,!1,!1)}var n,r;this.clearTimers(),this.isDelaying=(n=this.$el,r=[],Ae(n,function(t){return"static"!==Re(t,"position")&&r.push(t)}),r.some(function(t){return e.tracker.movesTo(t)})),t&&this.isDelaying?this.hideTimer=setTimeout(this.hide,50):t&&this.delayHide?this.hideTimer=setTimeout(i,this.delayHide):i()},clearTimers:function(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.showTimer=null,this.hideTimer=null,this.isDelaying=!1},isActive:function(){return pn===this},position:function(){Be(this.$el,this.clsDrop+"-stack"),Le(this.$el,this.clsDrop+"-boundary",this.boundaryAlign);var t,e=si(this.boundary),i=this.boundaryAlign?e:si(this.toggle.$el);"justify"===this.align?(t="y"===this.getAxis()?"width":"height",Re(this.$el,t,i[t])):this.$el.offsetWidth>Math.max(e.right-i.left,i.right-e.left)&&De(this.$el,this.clsDrop+"-stack"),this.positionAt(this.$el,this.boundaryAlign?this.boundary:this.toggle.$el,this.boundary)}}};var vn={mixins:[sn],args:"target",props:{target:Boolean},data:{target:!1},computed:{input:function(t,e){return Me(Wt,e)},state:function(){return this.input.nextElementSibling},target:function(t,e){var i=t.target;return i&&(!0===i&&this.input.parentNode===e&&this.input.nextElementSibling||yt(i,e))}},update:function(){var t,e,i,n=this.target,r=this.input;!n||n[e=Vt(n)?"value":"textContent"]!==(i=r.files&&r.files[0]?r.files[0].name:zt(r,"select")&&(t=Ne("option",r).filter(function(t){return t.selected})[0])?t.textContent:r.value)&&(n[e]=i)},events:[{name:"change",handler:function(){this.$update()}},{name:"reset",el:function(){return Bt(this.$el,"form")},handler:function(){this.$update()}}]},wn={update:{read:function(t){var e=Bi(this.$el);if(!e||t.isInView===e)return!1;t.isInView=e},write:function(){this.$el.src=""+this.$el.src},events:["scroll","resize"]}},bn={props:{margin:String,firstColumn:Boolean},data:{margin:"uk-margin-small-top",firstColumn:"uk-first-column"},update:{read:function(){return{columns:(t=this.$el.children,e=yn(t,"left","right"),lt?e.reverse():e),rows:xn(this.$el.children)};var t,e},write:function(t){var i=this,n=t.columns;t.rows.forEach(function(t,e){return t.forEach(function(t){Le(t,i.margin,0!==e),Le(t,i.firstColumn,b(n[0],t))})})},events:["resize"]}};function xn(t){return yn(t,"top","bottom")}function yn(t,e,i){for(var n=[[]],r=0;r=u[i]-1&&s[e]!==u[e]){n.push([o]);break}if(s[i]-1>u[e]||s[e]===u[e]){h.push(o);break}if(0===a){n.unshift([o]);break}}}return n}function kn(t,e){var i;void 0===e&&(e=!1);var n=t.offsetTop,r=t.offsetLeft,o=t.offsetHeight,s=t.offsetWidth;return e&&(n=(i=ui(t))[0],r=i[1]),{top:n,left:r,bottom:n+o,right:r+s}}var $n={extends:bn,mixins:[sn],name:"grid",props:{masonry:Boolean,parallax:Number},data:{margin:"uk-grid-margin",clsStack:"uk-grid-stack",masonry:!1,parallax:0},connected:function(){this.masonry&&De(this.$el,"uk-flex-top uk-flex-wrap-top")},update:[{write:function(t){var e=t.columns;Le(this.$el,this.clsStack,e.length<2)},events:["resize"]},{read:function(t){var e=t.columns,i=t.rows,n=Yt(this.$el);if(!n.length||!this.masonry&&!this.parallax)return!1;var r,o,s,a,h,u=n.some(Qe.inProgress),c=!1,l=e.map(function(t){return t.reduce(function(t,e){return t+e.offsetHeight},0)}),d=(r=n,o=this.margin,j((s=r.filter(function(t){return He(t,o)})[0])?Re(s,"marginTop"):Re(r[0],"paddingLeft"))*(i.length-1)),f=Math.max.apply(Math,l)+d;this.masonry&&(e=e.map(function(t){return Z(t,"offsetTop")}),a=e,h=i.map(function(t){return Math.max.apply(Math,t.map(function(t){return t.offsetHeight}))}),c=a.map(function(i){var n=0;return i.map(function(t,e){return n+=e?h[e-1]-i[e-1].offsetHeight:0})}));var p=Math.abs(this.parallax);return{padding:p=p&&l.reduce(function(t,e,i){return Math.max(t,e+d+(i%2?p:p/8)-f)},0),columns:e,translates:c,height:!u&&(this.masonry?f:"")}},write:function(t){var e=t.height,i=t.padding;Re(this.$el,"paddingBottom",i||""),!1!==e&&Re(this.$el,"height",e)},events:["resize"]},{read:function(t){var e=t.height;return{scrolled:!!this.parallax&&Hi(this.$el,e?e-ci(this.$el):0)*Math.abs(this.parallax)}},write:function(t){var e=t.columns,n=t.scrolled,r=t.translates;!1===n&&!r||e.forEach(function(t,i){return t.forEach(function(t,e){return Re(t,"transform",n||r?"translateY("+((r&&-r[i][e])+(n?i%2?n:n/8:0))+"px)":"")})})},events:["scroll","resize"]}]};var In=ct?{props:{selMinHeight:String},data:{selMinHeight:!1,forceHeight:!1},computed:{elements:function(t,e){var i=t.selMinHeight;return i?Ne(i,e):[e]}},update:[{read:function(){Re(this.elements,"height","")},order:-5,events:["resize"]},{write:function(){var i=this;this.elements.forEach(function(t){var e=j(Re(t,"minHeight"));e&&(i.forceHeight||Math.round(e+fi(t,"height","content-box"))>=t.offsetHeight)&&Re(t,"height",e)})},order:5,events:["resize"]}]}:{},Sn={mixins:[In],args:"target",props:{target:String,row:Boolean},data:{target:"> *",row:!0,forceHeight:!0},computed:{elements:function(t,e){return Ne(t.target,e)}},update:{read:function(){return{rows:(this.row?xn(this.elements):[this.elements]).map(Tn)}},write:function(t){t.rows.forEach(function(t){var i=t.heights;return t.elements.forEach(function(t,e){return Re(t,"minHeight",i[e])})})},events:["resize"]}};function Tn(t){var e;if(t.length<2)return{heights:[""],elements:t};var i=En(t),n=i.heights,r=i.max,o=t.some(function(t){return t.style.minHeight}),s=t.some(function(t,e){return!t.style.minHeight&&n[e]"}return zn[t][e]}(t,e)||t);return(t=Me(t.substr(t.indexOf("/g,zn={};function Dn(t){return Math.ceil(Math.max.apply(Math,[0].concat(Ne("[stroke]",t).map(function(t){try{return t.getTotalLength()}catch(t){return 0}}))))}function Bn(t,e){return ot(t,"data-svg")===ot(e,"data-svg")}var Pn={spinner:'',totop:'',marker:'',"close-icon":'',"close-large":'',"navbar-toggle-icon":'',"overlay-icon":'',"pagination-next":'',"pagination-previous":'',"search-icon":'',"search-large":'',"search-navbar":'',"slidenav-next":'',"slidenav-next-large":'',"slidenav-previous":'',"slidenav-previous-large":''},On={install:function(r){r.icon.add=function(t,e){var i,n=D(t)?((i={})[t]=e,i):t;J(n,function(t,e){Pn[e]=t,delete Vn[e]}),r._initialized&&Ae(document.body,function(t){return J(r.getComponents(t),function(t){t.$options.isIcon&&t.icon in n&&t.$reset()})})}},extends:An,args:"icon",props:["icon"],data:{include:["focusable"]},isIcon:!0,beforeConnect:function(){De(this.$el,"uk-icon")},methods:{getSvg:function(){var t=function(t){if(!Pn[t])return null;Vn[t]||(Vn[t]=Me((Pn[function(t){return lt?X(X(t,"left","right"),"previous","next"):t}(t)]||Pn[t]).trim()));return Vn[t].cloneNode(!0)}(this.icon);return t?ae.resolve(t):ae.reject("Icon not found.")}}},Hn={args:!1,extends:On,data:function(t){return{icon:d(t.constructor.options.name)}},beforeConnect:function(){De(this.$el,this.$name)}},Ln={extends:Hn,beforeConnect:function(){De(this.$el,"uk-slidenav")},computed:{icon:function(t,e){var i=t.icon;return He(e,"uk-slidenav-large")?i+"-large":i}}},Fn={extends:Hn,computed:{icon:function(t,e){var i=t.icon;return He(e,"uk-search-icon")&&Ut(e,".uk-search-large").length?"search-large":Ut(e,".uk-search-navbar").length?"search-navbar":i}}},jn={extends:Hn,computed:{icon:function(){return"close-"+(He(this.$el,"uk-close-large")?"large":"icon")}}},Wn={extends:Hn,connected:function(){var e=this;this.svg.then(function(t){return 1!==e.ratio&&Re(Me("circle",t),"strokeWidth",1/e.ratio)},et)}},Vn={};var Rn={args:"dataSrc",props:{dataSrc:String,dataSrcset:Boolean,sizes:String,width:Number,height:Number,offsetTop:String,offsetLeft:String,target:String},data:{dataSrc:"",dataSrcset:!1,sizes:!1,width:!1,height:!1,offsetTop:"50vh",offsetLeft:0,target:!1},computed:{cacheKey:function(t){var e=t.dataSrc;return this.$name+"."+e},width:function(t){var e=t.width,i=t.dataWidth;return e||i},height:function(t){var e=t.height,i=t.dataHeight;return e||i},sizes:function(t){var e=t.sizes,i=t.dataSizes;return e||i},isImg:function(t,e){return Jn(e)},target:{get:function(t){var e=t.target;return[this.$el].concat(kt(e,this.$el))},watch:function(){this.observe()}},offsetTop:function(t){return wi(t.offsetTop,"height")},offsetLeft:function(t){return wi(t.offsetLeft,"width")}},connected:function(){Qn[this.cacheKey]?qn(this.$el,Qn[this.cacheKey]||this.dataSrc,this.dataSrcset,this.sizes):this.isImg&&this.width&&this.height&&qn(this.$el,function(t,e,i){var n;i&&(n=rt.ratio({width:t,height:e},"width",wi(Yn(i))),t=n.width,e=n.height);return'data:image/svg+xml;utf8,'}(this.width,this.height,this.sizes)),this.observer=new Vi(this.load,{rootMargin:this.offsetTop+"px "+this.offsetLeft+"px"}),requestAnimationFrame(this.observe)},disconnected:function(){this.observer.disconnect()},update:{read:function(t){var e=this,i=t.image;if(i||"complete"!==document.readyState||this.load(this.observer.takeRecords()),this.isImg)return!1;i&&i.then(function(t){return t&&""!==t.currentSrc&&qn(e.$el,Zn(t))})},write:function(t){var e,i,n,r,o;this.dataSrcset&&1!==window.devicePixelRatio&&(!(e=Re(this.$el,"backgroundSize")).match(/^(auto\s?)+$/)&&j(e)!==t.bgSize||(t.bgSize=(i=this.dataSrcset,n=this.sizes,r=wi(Yn(n)),(o=(i.match(Kn)||[]).map(j).sort(function(t,e){return t-e})).filter(function(t){return r<=t})[0]||o.pop()||""),Re(this.$el,"backgroundSize",t.bgSize+"px")))},events:["resize"]},methods:{load:function(t){var e=this;t.some(function(t){return H(t.isIntersecting)||t.isIntersecting})&&(this._data.image=fe(this.dataSrc,this.dataSrcset,this.sizes).then(function(t){return qn(e.$el,Zn(t),t.srcset,t.sizes),Qn[e.cacheKey]=Zn(t),t},et),this.observer.disconnect())},observe:function(){var e=this;this._connected&&!this._data.image&&this.target.forEach(function(t){return e.observer.observe(t)})}}};function qn(t,e,i,n){Jn(t)?(n&&(t.sizes=n),i&&(t.srcset=i),e&&(t.src=e)):e&&!b(t.style.backgroundImage,e)&&(Re(t,"backgroundImage","url("+Ht(e)+")"),Jt(t,Zt("load",!1)))}var Un=/\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;function Yn(t){var e,i;for(Un.lastIndex=0;e=Un.exec(t);)if(!e[1]||window.matchMedia(e[1]).matches){e=w(i=e[2],"calc")?i.substring(5,i.length-1).replace(Xn,function(t){return wi(t)}).replace(/ /g,"").match(Gn).reduce(function(t,e){return t+ +e},0):i;break}return e||"100vw"}var Xn=/\d+(?:\w+|%)/g,Gn=/[+-]?(\d+)/g;var Kn=/\s+\d+w\s*(?:,|$)/g;function Jn(t){return"IMG"===t.tagName}function Zn(t){return t.currentSrc||t.src}var Qn,tr="__test__";try{(Qn=window.sessionStorage||{})[tr]=1,delete Qn[tr]}catch(t){Qn={}}var er={props:{media:Boolean},data:{media:!1},computed:{matchMedia:function(){var t=function(t){if(D(t)){if("@"===t[0])t=j(Xe("breakpoint-"+t.substr(1)));else if(isNaN(t))return t}return!(!t||isNaN(t))&&"(min-width: "+t+"px)"}(this.media);return!t||window.matchMedia(t).matches}}};var ir={mixins:[sn,er],props:{fill:String},data:{fill:"",clsWrapper:"uk-leader-fill",clsHide:"uk-leader-hide",attrFill:"data-fill"},computed:{fill:function(t){return t.fill||Xe("leader-fill-content")}},connected:function(){var t=Se(this.$el,'');this.wrapper=t[0]},disconnected:function(){Te(this.wrapper.childNodes)},update:{read:function(t){var e=t.changed,i=t.width,n=i;return{width:i=Math.floor(this.$el.offsetWidth/2),fill:this.fill,changed:e||n!==i,hide:!this.matchMedia}},write:function(t){Le(this.wrapper,this.clsHide,t.hide),t.changed&&(t.changed=!1,ot(this.wrapper,this.attrFill,new Array(t.width).join(t.fill)))},events:["resize"]}},nr={props:{container:Boolean},data:{container:!0},computed:{container:function(t){var e=t.container;return!0===e&&this.$container||e&&Me(e)}}},rr=[],or={mixins:[sn,nr,an],props:{selPanel:String,selClose:String,escClose:Boolean,bgClose:Boolean,stack:Boolean},data:{cls:"uk-open",escClose:!0,bgClose:!0,overlay:!0,stack:!1},computed:{panel:function(t,e){return Me(t.selPanel,e)},transitionElement:function(){return this.panel},bgClose:function(t){return t.bgClose&&this.panel}},beforeDisconnect:function(){this.isToggled()&&this.toggleElement(this.$el,!1,!1)},events:[{name:"click",delegate:function(){return this.selClose},handler:function(t){t.preventDefault(),this.hide()}},{name:"toggle",self:!0,handler:function(t){t.defaultPrevented||(t.preventDefault(),this.isToggled()===b(rr,this)&&this.toggle())}},{name:"beforeshow",self:!0,handler:function(t){if(b(rr,this))return!1;!this.stack&&rr.length?(ae.all(rr.map(function(t){return t.hide()})).then(this.show),t.preventDefault()):rr.push(this)}},{name:"show",self:!0,handler:function(){var o=this;li(window)-li(document)&&this.overlay&&Re(document.body,"overflowY","scroll"),this.stack&&Re(this.$el,"zIndex",Re(this.$el,"zIndex")+rr.length),De(document.documentElement,this.clsPage),this.bgClose&&Kt(this.$el,"hide",Xt(document,mt,function(t){var r=t.target;K(rr)!==o||o.overlay&&!qt(r,o.$el)||qt(r,o.panel)||Kt(document,vt+" "+xt+" scroll",function(t){var e=t.defaultPrevented,i=t.type,n=t.target;e||i!==vt||r!==n||o.hide()},!0)}),{self:!0}),this.escClose&&Kt(this.$el,"hide",Xt(document,"keydown",function(t){27===t.keyCode&&K(rr)===o&&(t.preventDefault(),o.hide())}),{self:!0})}},{name:"hidden",self:!0,handler:function(){var e=this;rr.splice(rr.indexOf(this),1),rr.length||Re(document.body,"overflowY",""),Re(this.$el,"zIndex",""),rr.some(function(t){return t.clsPage===e.clsPage})||Be(document.documentElement,this.clsPage)}}],methods:{toggle:function(){return this.isToggled()?this.hide():this.show()},show:function(){var e=this;return this.container&&this.$el.parentNode!==this.container?(be(this.container,this.$el),new ae(function(t){return requestAnimationFrame(function(){return e.show().then(t)})})):this.toggleElement(this.$el,!0,sr(this))},hide:function(){return this.toggleElement(this.$el,!1,sr(this))}}};function sr(t){var s=t.transitionElement,a=t._toggle;return function(r,o){return new ae(function(i,n){return Kt(r,"show hide",function(){r._reject&&r._reject(),r._reject=n,a(r,o);var t=Kt(s,"transitionstart",function(){Kt(s,"transitionend transitioncancel",i,{self:!0}),clearTimeout(e)},{self:!0}),e=setTimeout(function(){t(),i()},U(Re(s,"transitionDuration")))})})}}var ar={install:function(t){var a=t.modal;function e(t,e,i,n){e=G({bgClose:!1,escClose:!0,labels:a.labels},e);var r=a.dialog(t(e),e),o=new se,s=!1;return Xt(r.$el,"submit","form",function(t){t.preventDefault(),o.resolve(n&&n(r)),s=!0,r.hide()}),Xt(r.$el,"hide",function(){return!s&&i(o)}),o.promise.dialog=r,o.promise}a.dialog=function(t,e){var i=a('
'+t+"
",e);return i.show(),Xt(i.$el,"hidden",function(){return ae.resolve().then(function(){return i.$destroy(!0)})},{self:!0}),i},a.alert=function(i,t){return e(function(t){var e=t.labels;return'
'+(D(i)?i:we(i))+'
"},t,function(t){return t.resolve()})},a.confirm=function(i,t){return e(function(t){var e=t.labels;return'
'+(D(i)?i:we(i))+'
"},t,function(t){return t.reject()})},a.prompt=function(i,n,t){return e(function(t){var e=t.labels;return'
"},t,function(t){return t.resolve(null)},function(t){return Me("input",t.$el).value})},a.labels={ok:"Ok",cancel:"Cancel"}},mixins:[or],data:{clsPage:"uk-modal-page",selPanel:".uk-modal-dialog",selClose:".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full"},events:[{name:"show",self:!0,handler:function(){He(this.panel,"uk-margin-auto-vertical")?De(this.$el,"uk-flex"):Re(this.$el,"display","block"),ci(this.$el)}},{name:"hidden",self:!0,handler:function(){Re(this.$el,"display",""),Be(this.$el,"uk-flex")}}]};var hr={extends:un,data:{targets:"> .uk-parent",toggle:"> a",content:"> ul"}},ur={mixins:[sn,In],props:{dropdown:String,mode:"list",align:String,offset:Number,boundary:Boolean,boundaryAlign:Boolean,clsDrop:String,delayShow:Number,delayHide:Number,dropbar:Boolean,dropbarMode:String,dropbarAnchor:Boolean,duration:Number},data:{dropdown:".uk-navbar-nav > li",align:lt?"right":"left",clsDrop:"uk-navbar-dropdown",mode:void 0,offset:void 0,delayShow:void 0,delayHide:void 0,boundaryAlign:void 0,flip:"x",boundary:!0,dropbar:!1,dropbarMode:"slide",dropbarAnchor:!1,duration:200,forceHeight:!0,selMinHeight:".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle"},computed:{boundary:function(t,e){var i=t.boundary,n=t.boundaryAlign;return!0===i||n?e:i},dropbarAnchor:function(t,e){return yt(t.dropbarAnchor,e)},pos:function(t){return"bottom-"+t.align},dropbar:{get:function(t){var e=t.dropbar;return e?(e=this._dropbar||yt(e,this.$el)||Me("+ .uk-navbar-dropbar",this.$el))||(this._dropbar=Me("
")):null},watch:function(t){De(t,"uk-navbar-dropbar")},immediate:!0},dropdowns:{get:function(t,e){return Ne(t.dropdown+" ."+t.clsDrop,e)},watch:function(t){var e=this;this.$create("drop",t.filter(function(t){return!e.getDropdown(t)}),G({},this.$props,{boundary:this.boundary,pos:this.pos,offset:this.dropbar||this.offset}))},immediate:!0}},disconnected:function(){this.dropbar&&$e(this.dropbar),delete this._dropbar},events:[{name:"mouseover",delegate:function(){return this.dropdown},handler:function(t){var e=t.current,i=this.getActive();i&&i.toggle&&!qt(i.toggle.$el,e)&&!i.tracker.movesTo(i.$el)&&i.hide(!1)}},{name:"mouseleave",el:function(){return this.dropbar},handler:function(){var t=this.getActive();t&&!this.dropdowns.some(function(t){return zt(t,":hover")})&&t.hide()}},{name:"beforeshow",capture:!0,filter:function(){return this.dropbar},handler:function(){this.dropbar.parentNode||ye(this.dropbarAnchor||this.$el,this.dropbar)}},{name:"show",filter:function(){return this.dropbar},handler:function(t,e){var i=e.$el,n=e.dir;Le(this.dropbar,"uk-navbar-dropbar-slide","slide"===this.dropbarMode||Ut(this.$el).some(function(t){return"static"!==Re(t,"position")})),this.clsDrop&&De(i,this.clsDrop+"-dropbar"),"bottom"===n&&this.transitionTo(i.offsetHeight+j(Re(i,"marginTop"))+j(Re(i,"marginBottom")),i)}},{name:"beforehide",filter:function(){return this.dropbar},handler:function(t,e){var i=e.$el,n=this.getActive();zt(this.dropbar,":hover")&&n&&n.$el===i&&t.preventDefault()}},{name:"hide",filter:function(){return this.dropbar},handler:function(t,e){var i=e.$el,n=this.getActive();(!n||n&&n.$el===i)&&this.transitionTo(0)}}],methods:{getActive:function(){var t=this.dropdowns.map(this.getDropdown).filter(function(t){return t&&t.isActive()})[0];return t&&b(t.mode,"hover")&&qt(t.toggle.$el,this.$el)&&t},transitionTo:function(t,e){var i=this,n=this.dropbar,r=jt(n)?ci(n):0;return Re(e=r"),De(this.panel.parentNode,this.clsMode)),Re(document.documentElement,"overflowY",this.overlay?"hidden":""),De(document.body,this.clsContainer,this.clsFlip),Re(document.body,"touch-action","pan-y pinch-zoom"),Re(this.$el,"display","block"),De(this.$el,this.clsOverlay),De(this.panel,this.clsSidebarAnimation,"reveal"!==this.mode?this.clsMode:""),ci(document.body),De(document.body,this.clsContainerAnimation),this.clsContainerAnimation&&(lr().content+=",user-scalable=0")}},{name:"hide",self:!0,handler:function(){Be(document.body,this.clsContainerAnimation),Re(document.body,"touch-action","")}},{name:"hidden",self:!0,handler:function(){var t;this.clsContainerAnimation&&((t=lr()).content=t.content.replace(/,user-scalable=0$/,"")),"reveal"===this.mode&&Te(this.panel),Be(this.panel,this.clsSidebarAnimation,this.clsMode),Be(this.$el,this.clsOverlay),Re(this.$el,"display",""),Be(document.body,this.clsContainer,this.clsFlip),Re(document.documentElement,"overflowY","")}},{name:"swipeLeft swipeRight",handler:function(t){this.isToggled()&&u(t.type,"Left")^this.flip&&this.hide()}}]};function lr(){return Me('meta[name="viewport"]',document.head)||be(document.head,'')}var dr={mixins:[sn],props:{selContainer:String,selContent:String},data:{selContainer:".uk-modal",selContent:".uk-modal-dialog"},computed:{container:function(t,e){return Bt(e,t.selContainer)},content:function(t,e){return Bt(e,t.selContent)}},connected:function(){Re(this.$el,"minHeight",150)},update:{read:function(){return!(!this.content||!this.container)&&{current:j(Re(this.$el,"maxHeight")),max:Math.max(150,ci(this.container)-(si(this.content).height-ci(this.$el)))}},write:function(t){var e=t.current,i=t.max;Re(this.$el,"maxHeight",i),Math.round(e)!==Math.round(i)&&Jt(this.$el,"resize")},events:["resize"]}},fr={props:["width","height"],connected:function(){De(this.$el,"uk-responsive-width")},update:{read:function(){return!!(jt(this.$el)&&this.width&&this.height)&&{width:li(this.$el.parentNode),height:this.height}},write:function(t){ci(this.$el,rt.contain({height:this.height,width:this.width},t).height)},events:["resize"]}},pr={props:{offset:Number},data:{offset:0},methods:{scrollTo:function(t){var e=this;t=t&&Me(t)||document.body,Jt(this.$el,"beforescroll",[this,t])&&Oi(t,{offset:this.offset}).then(function(){return Jt(e.$el,"scrolled",[e,t])})}},events:{click:function(t){t.defaultPrevented||(t.preventDefault(),this.scrollTo(Ht(decodeURIComponent(this.$el.hash)).substr(1)))}}},mr={args:"cls",props:{cls:String,target:String,hidden:Boolean,offsetTop:Number,offsetLeft:Number,repeat:Boolean,delay:Number},data:function(){return{cls:!1,target:!1,hidden:!0,offsetTop:0,offsetLeft:0,repeat:!1,delay:0,inViewClass:"uk-scrollspy-inview"}},computed:{elements:{get:function(t,e){var i=t.target;return i?Ne(i,e):[e]},watch:function(t){this.hidden&&Re(Rt(t,":not(."+this.inViewClass+")"),"visibility","hidden")},immediate:!0}},update:[{read:function(t){var i=this;t.update&&this.elements.forEach(function(t){var e=t._ukScrollspyState;(e=e||{cls:ht(t,"uk-scrollspy-class")||i.cls}).show=Bi(t,i.offsetTop,i.offsetLeft),t._ukScrollspyState=e})},write:function(n){var r=this;if(!n.update)return this.$emit(),n.update=!0;this.elements.forEach(function(e){function t(t){Re(e,"visibility",!t&&r.hidden?"hidden":""),Le(e,r.inViewClass,t),Le(e,i.cls),Jt(e,t?"inview":"outview"),i.inview=t,r.$update(e)}var i=e._ukScrollspyState;!i.show||i.inview||i.queued?!i.show&&i.inview&&!i.queued&&r.repeat&&t(!1):(i.queued=!0,n.promise=(n.promise||ae.resolve()).then(function(){return new ae(function(t){return setTimeout(t,r.delay)})}).then(function(){t(!0),setTimeout(function(){i.queued=!1,r.$emit()},300)}))})},events:["scroll","resize"]}]},gr={props:{cls:String,closest:String,scroll:Boolean,overflow:Boolean,offset:Number},data:{cls:"uk-active",closest:!1,scroll:!1,overflow:!0,offset:0},computed:{links:{get:function(t,e){return Ne('a[href^="#"]',e).filter(function(t){return t.hash})},watch:function(t){this.scroll&&this.$create("scroll",t,{offset:this.offset||0})},immediate:!0},targets:function(){return Ne(this.links.map(function(t){return Ht(t.hash).substr(1)}).join(","))},elements:function(t){var e=t.closest;return Bt(this.links,e||"*")}},update:[{read:function(){var i=this,t=this.targets.length;if(!t||!jt(this.$el))return!1;var e=K(Li(this.targets[0])),n=e.scrollTop,r=e.scrollHeight,o=Fi(e),s=r-si(o).height,a=!1;return n===s?a=t-1:(this.targets.every(function(t,e){if(hi(t,o).top-i.offset<=0)return a=e,!0}),!1===a&&this.overflow&&(a=0)),{active:a}},write:function(t){var e=t.active;this.links.forEach(function(t){return t.blur()}),Be(this.elements,this.cls),!1!==e&&Jt(this.$el,"active",[e,De(this.elements[e],this.cls)])},events:["scroll","resize"]}]},vr={mixins:[sn,er],props:{top:null,bottom:Boolean,offset:String,animation:String,clsActive:String,clsInactive:String,clsFixed:String,clsBelow:String,selTarget:String,widthElement:Boolean,showOnUp:Boolean,targetOffset:Number},data:{top:0,bottom:!1,offset:0,animation:"",clsActive:"uk-active",clsInactive:"",clsFixed:"uk-sticky-fixed",clsBelow:"uk-sticky-below",selTarget:"",widthElement:!1,showOnUp:!1,targetOffset:!1},computed:{offset:function(t){return wi(t.offset)},selTarget:function(t,e){var i=t.selTarget;return i&&Me(i,e)||e},widthElement:function(t,e){return yt(t.widthElement,e)||this.placeholder},isActive:{get:function(){return He(this.selTarget,this.clsActive)},set:function(t){t&&!this.isActive?(Oe(this.selTarget,this.clsInactive,this.clsActive),Jt(this.$el,"active")):t||He(this.selTarget,this.clsInactive)||(Oe(this.selTarget,this.clsActive,this.clsInactive),Jt(this.$el,"inactive"))}}},connected:function(){this.placeholder=Me("+ .uk-sticky-placeholder",this.$el)||Me('
'),this.isFixed=!1,this.isActive=!1},disconnected:function(){this.isFixed&&(this.hide(),Be(this.selTarget,this.clsInactive)),$e(this.placeholder),this.placeholder=null,this.widthElement=null},events:[{name:"load hashchange popstate",el:ut&&window,handler:function(){var n,r=this;!1!==this.targetOffset&&location.hash&&0this.topOffset?(ni.cancel(this.$el),ni.out(this.$el,this.animation).then(function(){return i.hide()},et)):this.hide()}else this.isFixed?this.update():this.animation?(ni.cancel(this.$el),this.show(),ni.in(this.$el,this.animation).catch(et)):this.show()},events:["resize","scroll"]}],methods:{show:function(){this.isFixed=!0,this.update(),ot(this.placeholder,"hidden",null)},hide:function(){this.isActive=!1,Be(this.$el,this.clsFixed,this.clsBelow),Re(this.$el,{position:"",top:"",width:""}),ot(this.placeholder,"hidden","")},update:function(){var t=0!==this.top||this.scroll>this.top,e=Math.max(0,this.offset);P(this.bottom)&&this.scroll>this.bottom-this.offset&&(e=this.bottom-this.scroll),Re(this.$el,{position:"fixed",top:e+"px",width:this.width}),this.isActive=t,Le(this.$el,this.clsBelow,this.scroll>this.bottomOffset),De(this.$el,this.clsFixed)}}};function wr(t,e){var i=e.$props,n=e.$el,r=e[t+"Offset"],o=i[t];if(o)return D(o)&&o.match(/^-?\d/)?r+wi(o):si(!0===o?n.parentNode:yt(o,n)).bottom}var br,xr,yr,kr={mixins:[an],args:"connect",props:{connect:String,toggle:String,active:Number,swiping:Boolean},data:{connect:"~.uk-switcher",toggle:"> * > :first-child",active:0,swiping:!0,cls:"uk-active",clsContainer:"uk-switcher",attrItem:"uk-switcher-item"},computed:{connects:{get:function(t,e){return kt(t.connect,e)},watch:function(t){var e=this;t.forEach(function(t){return e.updateAria(t.children)}),this.swiping&&Re(t,"touch-action","pan-y pinch-zoom")},immediate:!0},toggles:{get:function(t,e){return Ne(t.toggle,e).filter(function(t){return!zt(t,".uk-disabled *, .uk-disabled, [disabled]")})},watch:function(t){var e=this.index();this.show(~e&&e||t[this.active]||t[0])},immediate:!0},children:function(){var t=this;return Yt(this.$el).filter(function(e){return t.toggles.some(function(t){return qt(t,e)})})}},events:[{name:"click",delegate:function(){return this.toggle},handler:function(t){b(this.toggles,t.current)&&(t.preventDefault(),this.show(t.current))}},{name:"click",el:function(){return this.connects},delegate:function(){return"["+this.attrItem+"],[data-"+this.attrItem+"]"},handler:function(t){t.preventDefault(),this.show(ht(t.current,this.attrItem))}},{name:"swipeRight swipeLeft",filter:function(){return this.swiping},el:function(){return this.connects},handler:function(t){var e=t.type;this.show(u(e,"Left")?"next":"previous")}}],methods:{index:function(){var e=this;return y(this.children,function(t){return He(t,e.cls)})},show:function(t){var i=this,n=this.index(),r=ge(t,this.toggles,n);this.children.forEach(function(t,e){Le(t,i.cls,r===e),ot(i.toggles[e],"aria-expanded",r===e)}),this.connects.forEach(function(t){var e=t.children;return i.toggleElement(V(e).filter(function(t,e){return e!==r&&i.isToggled(t)}),!1,0<=n).then(function(){return i.toggleElement(e[r],!0,0<=n)})})}}},$r={mixins:[sn],extends:kr,props:{media:Boolean},data:{media:960,attrItem:"uk-tab-item"},connected:function(){var t=He(this.$el,"uk-tab-left")?"uk-tab-left":!!He(this.$el,"uk-tab-right")&&"uk-tab-right";t&&this.$create("toggle",this.$el,{cls:t,mode:"media",media:this.media})}},Ir={mixins:[er,an],args:"target",props:{href:String,target:null,mode:"list",queued:Boolean},data:{href:!1,target:!1,mode:"click",queued:!0},computed:{target:{get:function(t,e){var i=t.href,n=t.target;return(n=kt(n||i,e)).length&&n||[e]},watch:function(){Jt(this.target,"updatearia",[this])},immediate:!0}},events:[{name:wt+" "+bt,filter:function(){return b(this.mode,"hover")},handler:function(t){re(t)||this.toggle("toggle"+(t.type===wt?"show":"hide"))}},{name:"click",filter:function(){return b(this.mode,"click")||pt&&b(this.mode,"hover")},handler:function(t){var e;(Bt(t.target,'a[href="#"], a[href=""]')||(e=Bt(t.target,"a[href]"))&&(this.cls&&!He(this.target,this.cls.split(" ")[0])||!jt(this.target)||e.hash&&zt(this.target,e.hash)))&&t.preventDefault(),this.toggle()}}],update:{read:function(){return!(!b(this.mode,"media")||!this.media)&&{match:this.matchMedia}},write:function(t){var e=t.match,i=this.isToggled(this.target);(e?!i:i)&&this.toggle()},events:["resize"]},methods:{toggle:function(t){var e,i=this;Jt(this.target,t||"toggle",[this])&&(this.queued?(e=this.target.filter(this.isToggled),this.toggleElement(e,!1).then(function(){return i.toggleElement(i.target.filter(function(t){return!b(e,t)}),!0)})):this.toggleElement(this.target))}}};J(Object.freeze({__proto__:null,Accordion:un,Alert:ln,Cover:fn,Drop:gn,Dropdown:gn,FormCustom:vn,Gif:wn,Grid:$n,HeightMatch:Sn,HeightViewport:_n,Icon:On,Img:Rn,Leader:ir,Margin:bn,Modal:ar,Nav:hr,Navbar:ur,Offcanvas:cr,OverflowAuto:dr,Responsive:fr,Scroll:pr,Scrollspy:mr,ScrollspyNav:gr,Sticky:vr,Svg:An,Switcher:kr,Tab:$r,Toggle:Ir,Video:dn,Close:jn,Spinner:Wn,SlidenavNext:Ln,SlidenavPrevious:Ln,SearchIcon:Fn,Marker:Hn,NavbarToggleIcon:Hn,OverlayIcon:Hn,PaginationNext:Hn,PaginationPrevious:Hn,Totop:Hn}),function(t,e){return qi.component(e,t)}),qi.use(function(r){ut&&pe(function(){var e;r.update(),Xt(window,"load resize",function(){return r.update(null,"resize")}),Xt(document,"loadedmetadata load",function(t){var e=t.target;return r.update(e,"resize")},!0),Xt(window,"scroll",function(t){e||(e=!0,xi.write(function(){return e=!1}),r.update(null,t.type))},{passive:!0,capture:!0});var i,n=0;Xt(document,"animationstart",function(t){var e=t.target;(Re(e,"animationName")||"").match(/^uk-.*(left|right)/)&&(n++,Re(document.body,"overflowX","hidden"),setTimeout(function(){--n||Re(document.body,"overflowX","")},U(Re(e,"animationDuration"))+100))},!0),Xt(document,mt,function(t){var s,a;i&&i(),re(t)&&(s=oe(t),a="tagName"in t.target?t.target:t.target.parentNode,i=Kt(document,vt+" "+xt,function(t){var e=oe(t),r=e.x,o=e.y;(a&&r&&100=Math.abs(e-n)?0
"}).join("")),e.forEach(function(t,e){return i.children[e].textContent=t}))})}},methods:{start:function(){this.stop(),this.date&&this.units.length&&(this.$update(),this.timer=setInterval(this.$update,1e3))},stop:function(){this.timer&&(clearInterval(this.timer),this.timer=null)}}};var Tr,Er="uk-animation-target",_r={props:{animation:Number},data:{animation:150},computed:{target:function(){return this.$el}},methods:{animate:function(t){var n=this;!function(){if(Tr)return;(Tr=be(document.head,"