18 files deleted
2 files renamed
5 files modified
17 files added
| New file |
| | |
| | | <?php |
| | | /* |
| | | Plugin Name: Martian Infotech Extension |
| | | Plugin URI: https://martianit.ca/ |
| | | Description: An Extension of JakeVan Base, for Martian Infotech. |
| | | Author: Jake Vanderwerf |
| | | Version: 1.0.0 |
| | | Author URI: https://jakevan.ca/ |
| | | Textdomain: ami |
| | | */ |
| | | |
| | | //PLUGIN STRUCTURE |
| | | // /content/ |
| | | // art.php |
| | | // design.php |
| | | // development.php |
| | | // setup.php |
| | | // strategy.php |
| | | // writing.php |
| | | // /dashboard/ |
| | | // setup.php |
| | | // /files/ |
| | | // fileManagement.php |
| | | // /forms/ |
| | | // setup.php |
| | | // /login/ |
| | | // setup.php |
| | | // /taxonomies/ |
| | | // city.php |
| | | // form.php |
| | | // media.php |
| | | // progress.php |
| | | // setup.php |
| | | // style.php |
| | | // target.php |
| | | // theme.php |
| | | // /users/ |
| | | // client.php |
| | | // setup.php |
| | | // ajakevan.php <-- main plugin file |
| | | |
| | | use JVBase\base\Site; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | | exit; |
| | | } |
| | | |
| | | //use JVBase\managers\CacheManager; |
| | | |
| | | add_filter('jvb_base', function () { |
| | | return 'ami_'; |
| | | }); |
| | | |
| | | |
| | | const AMI_DIR = WP_PLUGIN_DIR . '/amartianit'; |
| | | define('AMI_URL', plugin_dir_url(__FILE__)); |
| | | |
| | | add_filter('jvbChildDir', function() { return AMI_DIR; }); |
| | | add_filter('jvbChildUrl', function() { return AMI_URL; }); |
| | | require(AMI_DIR . '/content/_setup.php'); |
| | | //require(AMI_DIR . '/dashboard/_setup.php'); |
| | | require(AMI_DIR . '/forms/_setup.php'); |
| | | require(AMI_DIR . '/login/_setup.php'); |
| | | require(AMI_DIR . '/taxonomies/_setup.php'); |
| | | //require(AMI_DIR . '/users/setup.php'); |
| | | require(AMI_DIR . '/blocks/_setup.php'); |
| | | require(AMI_DIR . '/seo.php'); |
| | | //require(AMI_DIR . '/files/fileManagement.php'); |
| | | |
| | | |
| | | |
| | | add_action('plugins_loaded', 'aei_siteDefinition', 2); |
| | | add_action('jvbLoadDefinitions', 'aei_siteDefinition'); |
| | | function aei_siteDefinition():void |
| | | { |
| | | if (!class_exists('JVBase\base\Site')) { |
| | | return; |
| | | } |
| | | $site = Site::getInstance(); |
| | | $site->set('icons', 'light'); |
| | | $site->setAll([ |
| | | 'dashboard', |
| | | 'is_directory', |
| | | 'magic_link', |
| | | 'feed_block', |
| | | // 'faq', |
| | | // 'referrals' |
| | | // 'has_map', |
| | | // 'referrals', |
| | | ]); |
| | | $site->setIntegrations([ |
| | | 'cloudflare', |
| | | 'facebook', |
| | | 'gmb', |
| | | 'maps', |
| | | 'helcim', |
| | | 'postmark', |
| | | 'instagram', |
| | | 'umami' |
| | | ]); |
| | | |
| | | // $login = $site->login(); |
| | | $site->setDirectorySingular('List'); |
| | | $site->setDirectoryPlural('Lists'); |
| | | } |
| | | /** |
| | | * Defines base options like: |
| | | * - directory & Membership |
| | | * - dashboard |
| | | * - membership settings (JVB_MEMBERSHIP) |
| | | * - post types (JVB_CONTENT) |
| | | * - taxonomies (JVB_TAXONOMY) |
| | | * - User Roles (JVB_USER) |
| | | * - enthusiast = (bool) short form for a subscriber-like user that can collect content for reference |
| | | * - forum = (bool) create a forum |
| | | * - member_only = (bool) if forum and this is true, creates a member-only forum in the custom dashboard |
| | | * |
| | | * as well as central filters for |
| | | * - rewrite rules |
| | | * - archive title |
| | | */ |
| | | //add_filter('jvb_site', 'ami_setup_site'); |
| | | function ami_setup_site():array |
| | | { |
| | | return [ |
| | | 'icons' => 'light', |
| | | 'is_directory' => false, //as in, a membership directory |
| | | 'has_membership' => false, |
| | | 'has_map' => false, |
| | | 'dashboard' => true, |
| | | 'support' => true, |
| | | 'feed_block' => true, |
| | | 'email_notifications' => true, |
| | | 'integrations' => [ |
| | | 'bluesky' => true, |
| | | 'cloudflare' => true, |
| | | 'facebook' => true, |
| | | 'maps' => true, |
| | | 'gmb' => true, |
| | | 'helcim' => true, |
| | | 'instagram' => true, |
| | | 'square' => false, |
| | | 'umami' => true, |
| | | ], |
| | | 'is_restaurant' => false, |
| | | 'limit_hours' => false, |
| | | 'enthusiast' => false, |
| | | 'favourites' => false, //optional flag to allow enthusiasts, but not favourites |
| | | ]; |
| | | } |
| | | /** |
| | | * JVB_MEMBERSHIP defines the structure of the directory |
| | | * Options include: |
| | | * - membership_expires = useful if members pay a yearly membership fee |
| | | * - hide_expired = removes users once membership expired; only used if membership_expires is true |
| | | * - clip_expired = keeps users once membership expires, but limits the information shown; only used if membership_expires is true |
| | | * - membership_approval = verified users can approve other users |
| | | * - term_approval = (bool) verified users can create new terms, but needs approval |
| | | * - member_only = (array) if empty, open to any registered user. otherwise an array of registered user roles |
| | | */ |
| | | //add_filter('jvb_membership', 'ami_setup_membership'); |
| | | //function ami_setup_membership():array |
| | | //{ |
| | | // return [ |
| | | // 'member_content' => true, |
| | | // 'can_invite' => ['artist' => ['artist']], |
| | | // 'member_verified' => true, |
| | | // 'notifications' => true, |
| | | // 'forum' => true, |
| | | // 'member_only' => [ 'artist' ], |
| | | // 'member_expires' => false, |
| | | // 'hide_expired' => false, |
| | | // 'clip_expired' => false, |
| | | // 'term_approval' => true, |
| | | // 'can_approve' => [ 'artist' ] |
| | | // ]; |
| | | //} |
| | | // |
| | | //add_filter('jvbLoadingQuips', 'ami_loading_quips'); |
| | | //function ami_loading_quips(array $quips):array |
| | | //{ |
| | | // return []; |
| | | //} |
| | | |
| | | //add_filter('jvbBeforeFooter', 'ami_acknowledgement'); |
| | | function ami_acknowledgement():string |
| | | { |
| | | |
| | | return '<p>I live and work in Tk’emlúps te Secwe̓pemc territory.</p><p>The <a href="https://stkemlups.ca/" title="Learn More">unceded ancestral lands of Stk’emlúpsemc te Secwépemc Nation.</a></p><p>Kamloops, British Columbia, Canada</p>'; |
| | | } |
| | | add_filter('jvbSeparatorLogo', 'ami_logo_separator'); |
| | | function ami_logo_separator(string $logo):string |
| | | { |
| | | return 'logo-alien-shadow'; |
| | | } |
| | | |
| | | add_filter('jvbRegisterCustomIcons', 'ami_custom_icons'); |
| | | function ami_custom_icons(array $icons):array |
| | | { |
| | | $icons['logo'] = AMI_DIR . '/assets/icons/full-logo.svg'; |
| | | $icons['logo-text'] = AMI_DIR . '/assets/icons/martian infotech.svg'; |
| | | $icons['logo-alien'] = AMI_DIR . '/assets/icons/martian infotech logo.svg'; |
| | | $icons['logo-alien-shadow'] = AMI_DIR . '/assets/icons/martian logo shadow.svg'; |
| | | return $icons; |
| | | } |
| | | |
| | | add_filter('jvbLoadingIcon', 'ami_loading_icon', 999999); |
| | | function ami_loading_icon():string |
| | | { |
| | | return 'logo-alien'; |
| | | } |
| | | |
| | | |
| | | add_filter('jvbMenuExtra', 'ami_contact_nav', 10, 3); |
| | | function ami_contact_nav(string $nav, string $menuName, array $block):string |
| | | { |
| | | if (array_key_exists('attrs', $block) |
| | | && array_key_exists('className', $block['attrs']) |
| | | && $block['attrs']['className'] === 'is-style-fixed' |
| | | && $nav === '') { |
| | | $text = '<li><a href="tel:+17808008354" title="Call Me">'.jvbIcon('phone').'<span class="hide-small">780-800-8354</span></a></li>'; |
| | | $email = '<li><a href="'.jvbMailToLink( |
| | | 'myron@martianit.ca', |
| | | '[Martian Infotech] Website Inquiry','Be sure to as much detail as possible, including what your idea is about, when you need it done by, and budget.' |
| | | ).'" title="Email Me">'.jvbIcon('envelope').'<span class="hide-small">myron@martianit.ca</span></a></li>'; |
| | | |
| | | return $text.$email; |
| | | } |
| | | |
| | | if (array_key_exists('attrs', $block) |
| | | && array_key_exists('className', $block['attrs']) |
| | | && $block['attrs']['className'] === 'is-style-floating' |
| | | ) { |
| | | return $nav.'<li>'.ami_socials_nav().'</li>'; |
| | | } |
| | | |
| | | return $nav; |
| | | } |
| | | |
| | | function ami_socials_nav():string |
| | | { |
| | | return '<ul class="socials row right"> |
| | | <li> |
| | | <a href="https://www.facebook.com/MartianIT/" target="_blank" rel="nofollow" title="Find us on Facebook"> |
| | | '.jvbIcon('facebook-logo').' |
| | | <span class="screen-reader-text"> |
| | | Find us on Facebook |
| | | </span> |
| | | </a> |
| | | </li> |
| | | <li> |
| | | <a href="https://x.com/martianinfotech" target="_blank" rel="nofollow" title="Find us on X, previously known as Twitter"> |
| | | '.jvbIcon('x-logo').' |
| | | <span class="screen-reader-text"> |
| | | Find us on X |
| | | </span> |
| | | </a> |
| | | </li> |
| | | <li> |
| | | <a href="https://www.instagram.com/martianinfotech/" target="_blank" rel="nofollow" title="Find me on Instagram"> |
| | | '.jvbIcon('instagram-logo').' |
| | | <span class="screen-reader-text"> |
| | | Find me on Instagram |
| | | </span> |
| | | </a> |
| | | </li> |
| | | <li> |
| | | <a href="https://ca.linkedin.com/in/mlewitski" target="_blank" rel="nofollow" title="Find us on LinkedIn"> |
| | | '.jvbIcon('linkedin-logo').' |
| | | <span class="screen-reader-text"> |
| | | Find me on LinkedIn |
| | | </span> |
| | | </a> |
| | | </li> |
| | | </ul>'; |
| | | } |
| | | |
| | | |
| | | add_filter('jvbAboveHeader', 'ami_above_header'); |
| | | function ami_above_header(string $header):string |
| | | { |
| | | return ami_socials_nav(); |
| | | } |
| | | add_filter('jvbBelowHeader', 'ami_below_header'); |
| | | function ami_below_header(string $header):string |
| | | { |
| | | return '<p>'.get_bloginfo('description').'</p>'; |
| | | } |
| | | |
| | | |
| | | |
| | | add_filter('the_seo_framework_meta_render_data', 'ami_no_next_archive', 10, 1); |
| | | function ami_no_next_archive($tags) { |
| | | if (is_tax() || is_post_type_archive()) { |
| | | if (array_key_exists('next', $tags)) { |
| | | unset($tags['next']); |
| | | } |
| | | } |
| | | return $tags; // Keep the link for other pages |
| | | } |
| | | |
| New file |
| | |
| | | .icon-magnifying-glass{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjguMjQsMjE5Ljc2bC01MS4zOC01MS4zOGE4Ni4xNSw4Ni4xNSwwLDEsMC04LjQ4LDguNDhsNTEuMzgsNTEuMzhhNiw2LDAsMCwwLDguNDgtOC40OFpNMzgsMTEyYTc0LDc0LDAsMSwxLDc0LDc0QTc0LjA5LDc0LjA5LDAsMCwxLDM4LDExMloiLz48L3N2Zz4=');} |
| New file |
| | |
| | | .icon-copy{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsMzRIODhhNiw2LDAsMCwwLTYsNlY4Mkg0MGE2LDYsMCwwLDAtNiw2VjIxNmE2LDYsMCwwLDAsNiw2SDE2OGE2LDYsMCwwLDAsNi02VjE3NGg0MmE2LDYsMCwwLDAsNi02VjQwQTYsNiwwLDAsMCwyMTYsMzRaTTE2MiwyMTBINDZWOTRIMTYyWm00OC00OEgxNzRWODhhNiw2LDAsMCwwLTYtNkg5NFY0NkgyMTBaIi8+PC9zdmc+');}.icon-paragraph{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMDgsNDJIOTZhNjIsNjIsMCwwLDAsMCwxMjRoNDJ2NDJhNiw2LDAsMCwwLDEyLDBWNTRoMjhWMjA4YTYsNiwwLDAsMCwxMiwwVjU0aDE4YTYsNiwwLDAsMCwwLTEyWk0xMzgsMTU0SDk2QTUwLDUwLDAsMCwxLDk2LDU0aDQyWiIvPjwvc3ZnPg==');}.icon-text-h-one{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzAsMTEydjk2YTYsNiwwLDAsMS0xMiwwVjEyMy4yMUwyMDMuMzMsMTMzYTYsNiwwLDAsMS02LjY2LTEwbDI0LTE2YTYsNiwwLDAsMSw5LjMzLDVaTTE0NCw1MGE2LDYsMCwwLDAtNiw2djU0SDQ2VjU2YTYsNiwwLDAsMC0xMiwwVjE3NmE2LDYsMCwwLDAsMTIsMFYxMjJoOTJ2NTRhNiw2LDAsMCwwLDEyLDBWNTZBNiw2LDAsMCwwLDE0NCw1MFoiLz48L3N2Zz4=');}.icon-text-h-two{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNTAsNTZWMTc2YTYsNiwwLDAsMS0xMiwwVjEyMkg0NnY1NGE2LDYsMCwwLDEtMTIsMFY1NmE2LDYsMCwwLDEsMTIsMHY1NGg5MlY1NmE2LDYsMCwwLDEsMTIsMFptOTAsMTQ2SDIwNEwyNDAsMTU0LjA1QTMwLDMwLDAsMSwwLDE4Ny43MSwxMjYsNiw2LDAsMSwwLDE5OSwxMzBhMTgsMTgsMCwwLDEsMTQuNDctMTEuODIsMTgsMTgsMCwwLDEsMTYuODcsMjguNjZMMTg3LjIsMjA0LjRBNiw2LDAsMCwwLDE5MiwyMTRoNDhhNiw2LDAsMCwwLDAtMTJaIi8+PC9zdmc+');}.icon-text-h-three{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTgwYTM0LDM0LDAsMCwxLTU4LjI5LDIzLjc5LDYsNiwwLDAsMSw4LjU4LTguMzlBMjIsMjIsMCwxLDAsMjEyLDE1OGE2LDYsMCwwLDEtNC45Mi05LjQ0TDIyOC40OCwxMThIMTkyYTYsNiwwLDAsMSwwLTEyaDQ4YTYsNiwwLDAsMSw0LjkxLDkuNDRsLTIyLjUyLDMyLjE4QTM0LjA2LDM0LjA2LDAsMCwxLDI0NiwxODBaTTE0NCw1MGE2LDYsMCwwLDAtNiw2djU0SDQ2VjU2YTYsNiwwLDAsMC0xMiwwVjE3NmE2LDYsMCwwLDAsMTIsMFYxMjJoOTJ2NTRhNiw2LDAsMCwwLDEyLDBWNTZBNiw2LDAsMCwwLDE0NCw1MFoiLz48L3N2Zz4=');}.icon-text-h-four{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNTAsNTZWMTc2YTYsNiwwLDAsMS0xMiwwVjEyMkg0NnY1NGE2LDYsMCwwLDEtMTIsMFY1NmE2LDYsMCwwLDEsMTIsMHY1NGg5MlY1NmE2LDYsMCwwLDEsMTIsMFpNMjU0LDE4NGE2LDYsMCwwLDEtNiw2SDIzOHYxOGE2LDYsMCwwLDEtMTIsMFYxOTBIMTc2YTYsNiwwLDAsMS00Ljc0LTkuNjhsNTYtNzJBNiw2LDAsMCwxLDIzOCwxMTJ2NjZoMTBBNiw2LDAsMCwxLDI1NCwxODRabS0yOC01NC41MUwxODguMjcsMTc4SDIyNloiLz48L3N2Zz4=');}.icon-text-h-five{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDYsMTgwYTM0LDM0LDAsMCwxLTM0LDM0LDMzLjYsMzMuNiwwLDAsMS0yNC4yOS05LjgsNiw2LDAsMCwxLDguNTgtOC40QTIxLjY1LDIxLjY1LDAsMCwwLDIxMiwyMDJhMjIsMjIsMCwwLDAsMC00NCwyMS42NSwyMS42NSwwLDAsMC0xNS43MSw2LjJBNiw2LDAsMCwxLDE4Ni4wOCwxNTlsOC00OGE2LDYsMCwwLDEsNS45Mi01aDQwYTYsNiwwLDAsMSwwLDEySDIwNS4wOGwtNSwzMEEzNiwzNiwwLDAsMSwyMTIsMTQ2LDM0LDM0LDAsMCwxLDI0NiwxODBaTTE0NCw1MGE2LDYsMCwwLDAtNiw2djU0SDQ2VjU2YTYsNiwwLDAsMC0xMiwwVjE3NmE2LDYsMCwwLDAsMTIsMFYxMjJoOTJ2NTRhNiw2LDAsMCwwLDEyLDBWNTZBNiw2LDAsMCwwLDE0NCw1MFoiLz48L3N2Zz4=');}.icon-text-h-six{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTIsMTQ2YTM0LjUsMzQuNSwwLDAsMC01LjYuNDdsMTguNzUtMzEuMzlhNiw2LDAsMCwwLTEwLjMtNi4xNmwtMzIuMjUsNTQtLjIyLjQxQTM0LDM0LDAsMSwwLDIxMiwxNDZabTAsNTZhMjIsMjIsMCwxLDEsMjItMjJBMjIsMjIsMCwwLDEsMjEyLDIwMlpNMTUwLDU2VjE3NmE2LDYsMCwwLDEtMTIsMFYxMjJINDZ2NTRhNiw2LDAsMCwxLTEyLDBWNTZhNiw2LDAsMCwxLDEyLDB2NTRoOTJWNTZhNiw2LDAsMCwxLDEyLDBaIi8+PC9zdmc+');}.icon-text-italic{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xOTgsNTZhNiw2LDAsMCwxLTYsNkgxNTYuMzJsLTQ0LDEzMkgxNDRhNiw2LDAsMCwxLDAsMTJINjRhNiw2LDAsMCwxLDAtMTJIOTkuNjhsNDQtMTMySDExMmE2LDYsMCwwLDEsMC0xMmg4MEE2LDYsMCwwLDEsMTk4LDU2WiIvPjwvc3ZnPg==');}.icon-text-underline{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xOTgsMjI0YTYsNiwwLDAsMS02LDZINjRhNiw2LDAsMCwxLDAtMTJIMTkyQTYsNiwwLDAsMSwxOTgsMjI0Wm0tNzAtMjZhNjIuMDcsNjIuMDcsMCwwLDAsNjItNjJWNTZhNiw2LDAsMCwwLTEyLDB2ODBhNTAsNTAsMCwwLDEtMTAwLDBWNTZhNiw2LDAsMCwwLTEyLDB2ODBBNjIuMDcsNjIuMDcsMCwwLDAsMTI4LDE5OFoiLz48L3N2Zz4=');}.icon-text-strikethrough{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTYsNiwwLDAsMS02LDZIMTY5LjQ1YzExLjI4LDYuOTIsMjAuNTUsMTcuMzgsMjAuNTUsMzQsMCwyNS4zNi0yNy44MSw0Ni02Miw0NnMtNjItMjAuNjQtNjItNDZhNiw2LDAsMCwxLDEyLDBjMCwxOC43NSwyMi40MywzNCw1MCwzNHM1MC0xNS4yNSw1MC0zNGMwLTE4LjIzLTE1LjQ2LTI2LjU5LTQwLjQ3LTM0SDQwYTYsNiwwLDAsMSwwLTEySDIxNkE2LDYsMCwwLDEsMjIyLDEyOFpNNzYuMzMsMTAyYTYuMiw2LjIsMCwwLDAsMS44OC0uM0E2LDYsMCwwLDAsODIsOTQuMTMsMTkuNzQsMTkuNzQsMCwwLDEsODEuMTEsODhjMC0xOS4zOCwyMC4xNi0zNCw0Ni44OS0zNCwxOS41OCwwLDM1LjU2LDcuODEsNDIuNzQsMjAuODlhNiw2LDAsMCwwLDEwLjUyLTUuNzhDMTcxLjk0LDUyLjEzLDE1Miw0MiwxMjgsNDIsOTQuNDMsNDIsNjkuMTEsNjEuNzcsNjkuMTEsODhhMzEuNjIsMzEuNjIsMCwwLDAsMS41Miw5Ljg3QTYsNiwwLDAsMCw3Ni4zMywxMDJaIi8+PC9zdmc+');}.icon-list-dashes{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik05MCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg5NkE2LDYsMCwwLDEsOTAsNjRabTEyNiw1OEg5NmE2LDYsMCwwLDAsMCwxMkgyMTZhNiw2LDAsMCwwLDAtMTJabTAsNjRIOTZhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWk01Niw1OEg0MGE2LDYsMCwwLDAsMCwxMkg1NmE2LDYsMCwwLDAsMC0xMlptMCw2NEg0MGE2LDYsMCwwLDAsMCwxMkg1NmE2LDYsMCwwLDAsMC0xMlptMCw2NEg0MGE2LDYsMCwwLDAsMCwxMkg1NmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}.icon-list-numbers{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTI4YTYsNiwwLDAsMS02LDZIMTA0YTYsNiwwLDAsMSwwLTEySDIxNkE2LDYsMCwwLDEsMjIyLDEyOFpNMTA0LDcwSDIxNmE2LDYsMCwwLDAsMC0xMkgxMDRhNiw2LDAsMCwwLDAsMTJaTTIxNiwxODZIMTA0YTYsNiwwLDAsMCwwLDEySDIxNmE2LDYsMCwwLDAsMC0xMlpNNDIuNjgsNTMuMzcsNTAsNDkuNzFWMTA0YTYsNiwwLDAsMCwxMiwwVjQwYTYsNiwwLDAsMC04LjY4LTUuMzdsLTE2LDhhNiw2LDAsMCwwLDUuMzYsMTAuNzRaTTcyLDIwMkg1MmwyMS40OC0yOC43NEEyMS41LDIxLjUsMCwwLDAsNzcuNzksMTU3LDIxLjc1LDIxLjc1LDAsMCwwLDY5LDE0Mi4zOGEyMi44NiwyMi44NiwwLDAsMC0zMS4zNSw0LjMxLDIyLjE4LDIyLjE4LDAsMCwwLTMuMjgsNS45Miw2LDYsMCwwLDAsMTEuMjgsNC4xMSw5Ljg3LDkuODcsMCwwLDEsMS40OC0yLjY3LDEwLjc4LDEwLjc4LDAsMCwxLDE0Ljc4LTIsOS44OSw5Ljg5LDAsMCwxLDQsNi42MSw5LjY0LDkuNjQsMCwwLDEtMiw3LjI4bC0uMDYuMDlMMzUuMiwyMDQuNDFBNiw2LDAsMCwwLDQwLDIxNEg3MmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}.icon-text-align-left{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0zNCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg0MEE2LDYsMCwwLDEsMzQsNjRabTYsNDZIMTY4YTYsNiwwLDAsMCwwLTEySDQwYTYsNiwwLDAsMCwwLDEyWm0xNzYsMjhINDBhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWm0tNDgsNDBINDBhNiw2LDAsMCwwLDAsMTJIMTY4YTYsNiwwLDAsMCwwLTEyWiIvPjwvc3ZnPg==');}.icon-text-align-center{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0zNCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg0MEE2LDYsMCwwLDEsMzQsNjRaTTY0LDk4YTYsNiwwLDAsMCwwLDEySDE5MmE2LDYsMCwwLDAsMC0xMlptMTUyLDQwSDQwYTYsNiwwLDAsMCwwLDEySDIxNmE2LDYsMCwwLDAsMC0xMlptLTI0LDQwSDY0YTYsNiwwLDAsMCwwLDEySDE5MmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}.icon-text-align-right{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0zNCw2NGE2LDYsMCwwLDEsNi02SDIxNmE2LDYsMCwwLDEsMCwxMkg0MEE2LDYsMCwwLDEsMzQsNjRaTTIxNiw5OEg4OGE2LDYsMCwwLDAsMCwxMkgyMTZhNiw2LDAsMCwwLDAtMTJabTAsNDBINDBhNiw2LDAsMCwwLDAsMTJIMjE2YTYsNiwwLDAsMCwwLTEyWm0wLDQwSDg4YTYsNiwwLDAsMCwwLDEySDIxNmE2LDYsMCwwLDAsMC0xMloiLz48L3N2Zz4=');}input[type=url],.icon-link{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzgsODguMThhNTIuNDIsNTIuNDIsMCwwLDEtMTUuNCwzNS42NmwtMzQuNzUsMzQuNzVBNTIuMjgsNTIuMjgsMCwwLDEsMTUwLjYyLDE3NGgtLjA1QTUyLjYzLDUyLjYzLDAsMCwxLDk4LDExOS45YTYsNiwwLDAsMSw2LTUuODRoLjE3YTYsNiwwLDAsMSw1LjgzLDYuMTZBNDAuNjIsNDAuNjIsMCwwLDAsMTUwLjU4LDE2MmgwYTQwLjQsNDAuNCwwLDAsMCwyOC43My0xMS45bDM0Ljc1LTM0Ljc0QTQwLjYzLDQwLjYzLDAsMCwwLDE1Ni42Myw1Ny45bC0xMSwxMWE2LDYsMCwwLDEtOC40OS04LjQ5bDExLTExYTUyLjYyLDUyLjYyLDAsMCwxLDc0LjQzLDBBNTIuODMsNTIuODMsMCwwLDEsMjM4LDg4LjE4Wm0tMTI3LjYyLDk4LjktMTEsMTFBNDAuMzYsNDAuMzYsMCwwLDEsNzAuNiwyMTBoMGE0MC42Myw0MC42MywwLDAsMS0yOC43LTY5LjM2TDc2LjYyLDEwNS45QTQwLjYzLDQwLjYzLDAsMCwxLDE0NiwxMzUuNzdhNiw2LDAsMCwwLDUuODMsNi4xNkgxNTJhNiw2LDAsMCwwLDYtNS44NEE1Mi42Myw1Mi42MywwLDAsMCw2OC4xNCw5Ny40MkwzMy4zOCwxMzIuMTZBNTIuNjMsNTIuNjMsMCwwLDAsNzAuNTYsMjIyaDBhNTIuMjYsNTIuMjYsMCwwLDAsMzcuMjItMTUuNDJsMTEtMTFhNiw2LDAsMSwwLTguNDktOC40OFoiLz48L3N2Zz4=');}.icon-file-pdf{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjIsMTUyYTYsNiwwLDAsMS02LDZIMTkwdjIwaDE4YTYsNiwwLDAsMSwwLDEySDE5MHYxOGE2LDYsMCwwLDEtMTIsMFYxNTJhNiw2LDAsMCwxLDYtNmgzMkE2LDYsMCwwLDEsMjIyLDE1MlpNOTAsMTcyYTI2LDI2LDAsMCwxLTI2LDI2SDU0djEwYTYsNiwwLDAsMS0xMiwwVjE1MmE2LDYsMCwwLDEsNi02SDY0QTI2LDI2LDAsMCwxLDkwLDE3MlptLTEyLDBhMTQsMTQsMCwwLDAtMTQtMTRINTR2MjhINjRBMTQsMTQsMCwwLDAsNzgsMTcyWm04NCw4YTM0LDM0LDAsMCwxLTM0LDM0SDExMmE2LDYsMCwwLDEtNi02VjE1MmE2LDYsMCwwLDEsNi02aDE2QTM0LDM0LDAsMCwxLDE2MiwxODBabS0xMiwwYTIyLDIyLDAsMCwwLTIyLTIySDExOHY0NGgxMEEyMiwyMiwwLDAsMCwxNTAsMTgwWk00MiwxMTJWNDBBMTQsMTQsMCwwLDEsNTYsMjZoOTZhNiw2LDAsMCwxLDQuMjUsMS43Nmw1Niw1NkE2LDYsMCwwLDEsMjE0LDg4djI0YTYsNiwwLDAsMS0xMiwwVjk0SDE1MmE2LDYsMCwwLDEtNi02VjM4SDU2YTIsMiwwLDAsMC0yLDJ2NzJhNiw2LDAsMCwxLTEyLDBaTTE1OCw4MmgzNS41MkwxNTgsNDYuNDhaIi8+PC9zdmc+');}.icon-file-csv{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik00NiwxODBjMCwxMi4xMyw4LjA3LDIyLDE4LDIyYTE2LjI0LDE2LjI0LDAsMCwwLDExLjY3LTUuMjgsNiw2LDAsMCwxLDguNjYsOC4zQTI4LjA2LDI4LjA2LDAsMCwxLDY0LDIxNGMtMTYuNTQsMC0zMC0xNS4yNS0zMC0zNHMxMy40Ni0zNCwzMC0zNGEyOC4wNiwyOC4wNiwwLDAsMSwyMC4zMyw5LDYsNiwwLDAsMS04LjY2LDguM0ExNi4yMywxNi4yMywwLDAsMCw2NCwxNThDNTQuMDcsMTU4LDQ2LDE2Ny44Niw0NiwxODBabTgxLjA1LTYuNzdjLTEwLjg2LTMuMTMtMTMuNDEtNC42OS0xMy03LjkxYTYuNTksNi41OSwwLDAsMSwyLjg4LTUuMDhjNS42LTMuNzksMTcuNjYtMS44MiwyMS40NS0uODRhNiw2LDAsMCwwLDMuMDYtMTEuNmMtMi0uNTMtMjAuMS01LTMxLjIxLDIuNDhhMTguNjEsMTguNjEsMCwwLDAtOC4wOCwxMy41NGMtMS44LDE0LjE5LDEyLjI2LDE4LjI1LDIxLjU3LDIwLjk0LDEyLjEyLDMuNSwxNC43OCw1LjMzLDE0LjIsOS43NmE2Ljg1LDYuODUsMCwwLDEtMyw1LjM0Yy01LjYxLDMuNzMtMTcuNDgsMS42NC0yMS4xOS42MkE2LDYsMCwwLDAsMTEwLjQ4LDIxMmE1OS40MSw1OS40MSwwLDAsMCwxNC42OCwyYzUuNDksMCwxMS41NC0uOTUsMTYuMzYtNC4xNGExOC44OSwxOC44OSwwLDAsMCw4LjMxLTEzLjgxQzE1MS44NCwxODAuMzksMTM2LjkyLDE3Ni4wOCwxMjcuMDUsMTczLjIyWm04My0yNi44OGE2LDYsMCwwLDAtNy42NywzLjYzTDE4OCwxOTAuMTUsMTczLjY1LDE1MGE2LDYsMCwxLDAtMTEuMyw0bDIwLDU2YTYsNiwwLDAsMCwxMS4zLDBsMjAtNTZBNiw2LDAsMCwwLDIxMCwxNDYuMzRaTTIxNCw4OHYyNGE2LDYsMCwxLDEtMTIsMFY5NEgxNTJhNiw2LDAsMCwxLTYtNlYzOEg1NmEyLDIsMCwwLDAtMiwydjcyYTYsNiwwLDEsMS0xMiwwVjQwQTE0LDE0LDAsMCwxLDU2LDI2aDk2YTYsNiwwLDAsMSw0LjI0LDEuNzZsNTYsNTZBNiw2LDAsMCwxLDIxNCw4OFptLTIwLjQ5LTZMMTU4LDQ2LjQ4VjgyWiIvPjwvc3ZnPg==');}.icon-file-doc{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik01MiwxNDZIMzZhNiw2LDAsMCwwLTYsNnY1NmE2LDYsMCwwLDAsNiw2SDUyYTM0LDM0LDAsMCwwLDAtNjhabTAsNTZINDJWMTU4SDUyYTIyLDIyLDAsMCwxLDAsNDRabTE2OC4xNS01LjQ2YTYsNiwwLDAsMSwuMTgsOC40OEEyOC4wNiwyOC4wNiwwLDAsMSwyMDAsMjE0Yy0xNi41NCwwLTMwLTE1LjI1LTMwLTM0czEzLjQ2LTM0LDMwLTM0YTI4LjA2LDI4LjA2LDAsMCwxLDIwLjMzLDksNiw2LDAsMCwxLTguNjYsOC4zQTE2LjIzLDE2LjIzLDAsMCwwLDIwMCwxNThjLTkuOTMsMC0xOCw5Ljg3LTE4LDIyczguMDcsMjIsMTgsMjJhMTYuMjMsMTYuMjMsMCwwLDAsMTEuNjctNS4yOEE2LDYsMCwwLDEsMjIwLjE1LDE5Ni41NFpNMTI4LDE0NmMtMTYuNTQsMC0zMCwxNS4yNS0zMCwzNHMxMy40NiwzNCwzMCwzNCwzMC0xNS4yNSwzMC0zNFMxNDQuNTQsMTQ2LDEyOCwxNDZabTAsNTZjLTkuOTMsMC0xOC05Ljg3LTE4LTIyczguMDctMjIsMTgtMjIsMTgsOS44NywxOCwyMlMxMzcuOTMsMjAyLDEyOCwyMDJaTTQ4LDExOGE2LDYsMCwwLDAsNi02VjQwYTIsMiwwLDAsMSwyLTJoOTBWODhhNiw2LDAsMCwwLDYsNmg1MHYxOGE2LDYsMCwwLDAsMTIsMFY4OGE2LDYsMCwwLDAtMS43Ni00LjI0bC01Ni01NkE2LDYsMCwwLDAsMTUyLDI2SDU2QTE0LDE0LDAsMCwwLDQyLDQwdjcyQTYsNiwwLDAsMCw0OCwxMThaTTE1OCw0Ni40OCwxOTMuNTIsODJIMTU4WiIvPjwvc3ZnPg==');}.icon-file-txt{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik00OCwxMThhNiw2LDAsMCwwLDYtNlY0MGEyLDIsMCwwLDEsMi0yaDkwVjg4YTYsNiwwLDAsMCw2LDZoNTB2MThhNiw2LDAsMCwwLDEyLDBWODhhNiw2LDAsMCwwLTEuNzYtNC4yNGwtNTYtNTZBNiw2LDAsMCwwLDE1MiwyNkg1NkExNCwxNCwwLDAsMCw0Miw0MHY3MkE2LDYsMCwwLDAsNDgsMTE4Wk0xNTgsNDYuNDgsMTkzLjUyLDgySDE1OFptLTUuMTIsMTA5TDEzNS4zNywxODBsMTcuNTEsMjQuNTFhNiw2LDAsMSwxLTkuNzYsN0wxMjgsMTkwLjMybC0xNS4xMiwyMS4xN2E2LDYsMCwwLDEtOS43Ni03TDEyMC42MywxODBsLTE3LjUxLTI0LjUxYTYsNiwwLDEsMSw5Ljc2LTdMMTI4LDE2OS42OGwxNS4xMi0yMS4xN2E2LDYsMCwwLDEsOS43Niw3Wk05MCwxNTJhNiw2LDAsMCwxLTYsNkg3MHY1MGE2LDYsMCwwLDEtMTIsMFYxNThINDRhNiw2LDAsMCwxLDAtMTJIODRBNiw2LDAsMCwxLDkwLDE1MlptMTI4LDBhNiw2LDAsMCwxLTYsNkgxOTh2NTBhNiw2LDAsMCwxLTEyLDBWMTU4SDE3MmE2LDYsMCwwLDEsMC0xMmg0MEE2LDYsMCwwLDEsMjE4LDE1MloiLz48L3N2Zz4=');}.icon-file-xls{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNTQsMjA4YTYsNiwwLDAsMS02LDZIMTIwYTYsNiwwLDAsMS02LTZWMTUyYTYsNiwwLDEsMSwxMiwwdjUwaDIyQTYsNiwwLDAsMSwxNTQsMjA4Wk05MS40OCwxNDcuMTFhNiw2LDAsMCwwLTguMzYsMS4zOUw2OCwxNjkuNjcsNTIuODgsMTQ4LjVhNiw2LDAsMSwwLTkuNzYsN0w2MC42MywxODAsNDMuMTIsMjA0LjVhNiw2LDAsMSwwLDkuNzYsN0w2OCwxOTAuMzFsMTUuMTIsMjEuMTZBNiw2LDAsMCwwLDg4LDIxNGE1LjkxLDUuOTEsMCwwLDAsMy40OC0xLjEyLDYsNiwwLDAsMCwxLjQtOC4zN0w3NS4zNywxODBsMTcuNTEtMjQuNTFBNiw2LDAsMCwwLDkxLjQ4LDE0Ny4xMVpNMTkxLDE3My4yMmMtMTAuODUtMy4xMy0xMy40MS00LjY5LTEzLTcuOTFhNi41OSw2LjU5LDAsMCwxLDIuODgtNS4wOGM1LjYtMy43OSwxNy42NS0xLjgzLDIxLjQ0LS44NGE2LDYsMCwwLDAsMy4wNy0xMS42Yy0yLS41NC0yMC4xLTUtMzEuMjEsMi40OGExOC42NCwxOC42NCwwLDAsMC04LjA4LDEzLjU0Yy0xLjgsMTQuMTksMTIuMjYsMTguMjUsMjEuNTcsMjAuOTQsMTIuMTIsMy41LDE0Ljc3LDUuMzMsMTQuMiw5Ljc2YTYuODUsNi44NSwwLDAsMS0zLDUuMzRjLTUuNjEsMy43My0xNy40OCwxLjY0LTIxLjE5LjYyQTYsNiwwLDAsMCwxNzQuNDcsMjEyYTU5LjQxLDU5LjQxLDAsMCwwLDE0LjY4LDJjNS40OSwwLDExLjU0LS45NSwxNi4zNi00LjE0YTE4Ljg5LDE4Ljg5LDAsMCwwLDguMzEtMTMuODFDMjE1LjgzLDE4MC4zOSwyMDAuOTEsMTc2LjA4LDE5MSwxNzMuMjJaTTQyLDExMlY0MEExNCwxNCwwLDAsMSw1NiwyNmg5NmE2LDYsMCwwLDEsNC4yNCwxLjc2bDU2LDU2QTYsNiwwLDAsMSwyMTQsODh2MjRhNiw2LDAsMSwxLTEyLDBWOTRIMTUyYTYsNiwwLDAsMS02LTZWMzhINTZhMiwyLDAsMCwwLTIsMnY3MmE2LDYsMCwxLDEtMTIsMFpNMTU4LDgySDE5My41TDE1OCw0Ni40OFoiLz48L3N2Zz4=');}.icon-text-b-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjgsMTU2YTIwLDIwLDAsMCwxLTIwLDIwSDk2VjEzNmg1MkEyMCwyMCwwLDAsMSwxNjgsMTU2Wk0yMjQsNDhWMjA4YTE2LDE2LDAsMCwxLTE2LDE2SDQ4YTE2LDE2LDAsMCwxLTE2LTE2VjQ4QTE2LDE2LDAsMCwxLDQ4LDMySDIwOEExNiwxNiwwLDAsMSwyMjQsNDhaTTE4NCwxNTZhMzYsMzYsMCwwLDAtMTgtMzEuMTVBMzYsMzYsMCwwLDAsMTQwLDY0SDg4YTgsOCwwLDAsMC04LDhWMTg0YTgsOCwwLDAsMCw4LDhoNjBBMzYsMzYsMCwwLDAsMTg0LDE1NlptLTI0LTU2YTIwLDIwLDAsMCwwLTIwLTIwSDk2djQwaDQ0QTIwLDIwLDAsMCwwLDE2MCwxMDBaIi8+PC9zdmc+');} |
| New file |
| | |
| | | .icon-google-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsMTI4YTk2LDk2LDAsMSwxLTIxLjk1LTYxLjA5LDgsOCwwLDEsMS0xMi4zMywxMC4xOEE4MCw4MCwwLDEsMCwyMDcuNiwxMzZIMTI4YTgsOCwwLDAsMSwwLTE2aDg4QTgsOCwwLDAsMSwyMjQsMTI4WiIvPjwvc3ZnPg==');}.icon-apple-logo{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjMuMywxNjkuNTlhOC4wNyw4LjA3LDAsMCwwLTIuOC0zLjRDMjAzLjUzLDE1NC41MywyMDAsMTM0LjY0LDIwMCwxMjBjMC0xNy42NywxMy40Ny0zMy4wNiwyMS41LTQwLjY3YTgsOCwwLDAsMCwwLTExLjYyQzIwOC44Miw1NS43NCwxODcuODIsNDgsMTY4LDQ4YTcyLjIsNzIuMiwwLDAsMC00MCwxMi4xMyw3MS41Niw3MS41NiwwLDAsMC05MC43MSw5LjA5QTc0LjYzLDc0LjYzLDAsMCwwLDE2LDEyMy40YTEyNy4wNiwxMjcuMDYsMCwwLDAsNDAuMTQsODkuNzNBMzkuOCwzOS44LDAsMCwwLDgzLjU5LDIyNGg4Ny42OGEzOS44NCwzOS44NCwwLDAsMCwyOS4xMi0xMi41NywxMjUsMTI1LDAsMCwwLDE3LjgyLTI0LjZDMjI1LjIzLDE3NCwyMjQuMzMsMTcyLDIyMy4zLDE2OS41OVptLTM0LjYzLDMwLjk0YTIzLjc2LDIzLjc2LDAsMCwxLTE3LjQsNy40N0g4My41OWEyMy44MiwyMy44MiwwLDAsMS0xNi40NC02LjUxQTExMS4xNCwxMTEuMTQsMCwwLDEsMzIsMTIzLDU4LjUsNTguNSwwLDAsMSw0OC42NSw4MC40Nyw1NC44MSw1NC44MSwwLDAsMSw4OCw2NGguNzhBNTUuNDUsNTUuNDUsMCwwLDEsMTIzLDc2LjI4YTgsOCwwLDAsMCwxMCwwQTU1LjQ0LDU1LjQ0LDAsMCwxLDE2OCw2NGE3MC42NCw3MC42NCwwLDAsMSwzNiwxMC4zNWMtMTMsMTQuNTItMjAsMzAuNDctMjAsNDUuNjUsMCwyMy43Nyw3LjY0LDQyLjczLDIyLjE4LDU1LjNBMTA1LjgyLDEwNS44MiwwLDAsMSwxODguNjcsMjAwLjUzWk0xMjguMjMsMzBBNDAsNDAsMCwwLDEsMTY3LDBoMWE4LDgsMCwwLDEsMCwxNmgtMWEyNCwyNCwwLDAsMC0yMy4yNCwxOCw4LDgsMCwxLDEtMTUuNS00WiIvPjwvc3ZnPg==');}.icon-check-circle{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzMuNjYsOTguMzRhOCw4LDAsMCwxLDAsMTEuMzJsLTU2LDU2YTgsOCwwLDAsMS0xMS4zMiwwbC0yNC0yNGE4LDgsMCwwLDEsMTEuMzItMTEuMzJMMTEyLDE0OC42OWw1MC4zNC01MC4zNUE4LDgsMCwwLDEsMTczLjY2LDk4LjM0Wk0yMzIsMTI4QTEwNCwxMDQsMCwxLDEsMTI4LDI0LDEwNC4xMSwxMDQuMTEsMCwwLDEsMjMyLDEyOFptLTE2LDBhODgsODgsMCwxLDAtODgsODhBODguMSw4OC4xLDAsMCwwLDIxNiwxMjhaIi8+PC9zdmc+');}details.all-filters summary::after,.icon-faders-horizontal{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzYsODBhOCw4LDAsMCwxLDgtOGgzMmE4LDgsMCwwLDEsMCwxNkgxODRBOCw4LDAsMCwxLDE3Niw4MFpNNDAsODhIMTQ0djE2YTgsOCwwLDAsMCwxNiwwVjU2YTgsOCwwLDAsMC0xNiwwVjcySDQwYTgsOCwwLDAsMCwwLDE2Wm0xNzYsODBIMTIwYTgsOCwwLDAsMCwwLDE2aDk2YTgsOCwwLDAsMCwwLTE2Wk04OCwxNDRhOCw4LDAsMCwwLTgsOHYxNkg0MGE4LDgsMCwwLDAsMCwxNkg4MHYxNmE4LDgsMCwwLDAsMTYsMFYxNTJBOCw4LDAsMCwwLDg4LDE0NFoiLz48L3N2Zz4=');}.icon-cloud-slash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik01My45MiwzNC42MkE4LDgsMCwxLDAsNDIuMDgsNDUuMzhMODEuMzIsODguNTVsLS4wNi4xMkE2NSw2NSwwLDAsMCw3Miw4OGE2NCw2NCwwLDAsMCwwLDEyOGg4OGE4Ny4zNCw4Ny4zNCwwLDAsMCwzMS44LTUuOTNsMTAuMjgsMTEuMzFhOCw4LDAsMSwwLDExLjg0LTEwLjc2Wk0xNjAsMjAwSDcyYTQ4LDQ4LDAsMCwxLDAtOTZjMS4xLDAsMi4yLDAsMy4zLjEyQTg4LjQsODguNCwwLDAsMCw3MiwxMjhhOCw4LDAsMCwwLDE2LDAsNzIuMjUsNzIuMjUsMCwwLDEsNS4wNi0yNi41NGw4Nyw5NS43QTcxLjY2LDcxLjY2LDAsMCwxLDE2MCwyMDBabTg4LTcyYTg3Ljg5LDg3Ljg5LDAsMCwxLTIyLjM1LDU4LjYxQTgsOCwwLDAsMSwyMTMuNzEsMTc2LDcyLDcyLDAsMCwwLDExNy4zNyw3MGE4LDgsMCwwLDEtOS40OC0xMi44OUE4OCw4OCwwLDAsMSwyNDgsMTI4WiIvPjwvc3ZnPg==');}.icon-exclamation-mark{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNDQsMjAwYTE2LDE2LDAsMSwxLTE2LTE2QTE2LDE2LDAsMCwxLDE0NCwyMDBabS0xNi00MGE4LDgsMCwwLDAsOC04VjQ4YTgsOCwwLDAsMC0xNiwwVjE1MkE4LDgsMCwwLDAsMTI4LDE2MFoiLz48L3N2Zz4=');}.icon-cloud-arrow-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yNDgsMTI4YTg3LjM0LDg3LjM0LDAsMCwxLTE3LjYsNTIuODEsOCw4LDAsMSwxLTEyLjgtOS42MkE3MS4zNCw3MS4zNCwwLDAsMCwyMzIsMTI4YTcyLDcyLDAsMCwwLTE0NCwwLDgsOCwwLDAsMS0xNiwwLDg4LDg4LDAsMCwxLDMuMjktMjMuODhDNzQuMiwxMDQsNzMuMSwxMDQsNzIsMTA0YTQ4LDQ4LDAsMCwwLDAsOTZIOTZhOCw4LDAsMCwxLDAsMTZINzJBNjQsNjQsMCwxLDEsODEuMjksODguNjgsODgsODgsMCwwLDEsMjQ4LDEyOFptLTY5LjY2LDQyLjM0TDE2MCwxODguNjlWMTI4YTgsOCwwLDAsMC0xNiwwdjYwLjY5bC0xOC4zNC0xOC4zNWE4LDgsMCwwLDAtMTEuMzIsMTEuMzJsMzIsMzJhOCw4LDAsMCwwLDExLjMyLDBsMzItMzJhOCw4LDAsMCwwLTExLjMyLTExLjMyWiIvPjwvc3ZnPg==');}details summary::after,.icon-caret-down{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTMuNjYsMTAxLjY2bC04MCw4MGE4LDgsMCwwLDEtMTEuMzIsMGwtODAtODBBOCw4LDAsMCwxLDUzLjY2LDkwLjM0TDEyOCwxNjQuNjlsNzQuMzQtNzQuMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyWiIvPjwvc3ZnPg==');}.icon-cloud-arrow-up{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNzguMzQsMTY1LjY2LDE2MCwxNDcuMzFWMjA4YTgsOCwwLDAsMS0xNiwwVjE0Ny4zMWwtMTguMzQsMTguMzVhOCw4LDAsMCwxLTExLjMyLTExLjMybDMyLTMyYTgsOCwwLDAsMSwxMS4zMiwwbDMyLDMyYTgsOCwwLDAsMS0xMS4zMiwxMS4zMlpNMTYwLDQwQTg4LjA4LDg4LjA4LDAsMCwwLDgxLjI5LDg4LjY4LDY0LDY0LDAsMSwwLDcyLDIxNmg0MGE4LDgsMCwwLDAsMC0xNkg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTJBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDEwMC44LDY2LDgsOCwwLDAsMCwzLjIsMTUuMzQsNy45LDcuOSwwLDAsMCwzLjItLjY4QTg4LDg4LDAsMCwwLDE2MCw0MFoiLz48L3N2Zz4=');}.icon-cloud-check{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0zNy42Ni05My42NmE4LDgsMCwwLDEsMCwxMS4zMmwtNDgsNDhhOCw4LDAsMCwxLTExLjMyLDBsLTI0LTI0YTgsOCwwLDAsMSwxMS4zMi0xMS4zMkwxNDQsMTQ4LjY5bDQyLjM0LTQyLjM1QTgsOCwwLDAsMSwxOTcuNjYsMTA2LjM0WiIvPjwvc3ZnPg==');}.icon-cloud-warning{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0tOC03MlY4OGE4LDgsMCwwLDEsMTYsMHY0MGE4LDgsMCwwLDEtMTYsMFptMjAsMzZhMTIsMTIsMCwxLDEtMTItMTJBMTIsMTIsMCwwLDEsMTcyLDE2NFoiLz48L3N2Zz4=');}.icon-syncing{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjU2IDI1NiI+PHBhdGggaWQ9InJlZnJlc2giIGQ9Ik0xNjAuMDQ3IDEyMi44NzVhMzAuNzg0IDMwLjc4NCAwIDAgMC0yMS43NSA4Ljc5N2MtMi44NDIgMy4wMDMtLjQ2NyA0Ljk3MSAxLjMxMiAzLjE1NiAxMS4wNDMtMTAuNzg2IDI4LjcxLTEwLjY4IDM5LjYyNS4yMzRsNy4yMDMgNy4yMDRoLTEyLjg3NWMtMy4zNDcuMDA4LTMuMTY1IDMuODc1IDAgMy44NzVoMTYuMTFjMi4wNjIgMCAyLjU0LTEuNDE4IDIuNTYyLTQuOTdsLjA5NC0xNC45MjFjLjAyLTMuMjktMy40MzctMy4xNjUtMy40MzcgMHYxMi44NmwtNy4yMDMtNy4xODhhMzAuNzY4IDMwLjc2OCAwIDAgMC0yMS42NDEtOS4wNDd6bS0yOS41OTQgMzkuNzk3Yy0yLjA2MiAwLTIuNTI0IDEuNDAyLTIuNTQ3IDQuOTUzbC0uMDk0IDE0LjkyMmMtLjAyIDMuMjkgMy40MjIgMy4xNjQgMy40MjIgMHYtMTIuODZsNy4yMDMgNy4yMDRjMTEuOTU2IDExLjk1NSAzMS4zMTIgMTIuMDY0IDQzLjQwNy4yNSAyLjg0Mi0zLjAwMy40NTEtNC45ODgtMS4zMjgtMy4xNzItMTEuMDQzIDEwLjc4Ni0yOC43MSAxMC42OC0zOS42MjUtLjIzNWwtNy4xODgtNy4yMDNoMTIuODZjMy4zNDctLjAwOCAzLjE2NS0zLjg2IDAtMy44NmgtMTYuMTF6Ii8+PHBhdGggZD0iTTE2MCA0NGE4NC4xMSA4NC4xMSAwIDAgMC03Ni40MSA0OS4xMkE2MC43MSA2MC43MSAwIDAgMCA3MiA5MmE2MCA2MCAwIDAgMCAwIDEyMGg4OGE4NCA4NCAwIDAgMCAwLTE2OFptMCAxNjBINzJhNTIgNTIgMCAxIDEgOC41NS0xMDMuM0E4My42NiA4My42NiAwIDAgMCA3NiAxMjhhNCA0IDAgMCAwIDggMCA3NiA3NiAwIDEgMSA3NiA3NloiLz48L3N2Zz4=');}.icon-cloud-x{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xNjAsNDBBODguMDksODguMDksMCwwLDAsODEuMjksODguNjcsNjQsNjQsMCwxLDAsNzIsMjE2aDg4YTg4LDg4LDAsMCwwLDAtMTc2Wm0wLDE2MEg3MmE0OCw0OCwwLDAsMSwwLTk2YzEuMSwwLDIuMiwwLDMuMjkuMTFBODgsODgsMCwwLDAsNzIsMTI4YTgsOCwwLDAsMCwxNiwwLDcyLDcyLDAsMSwxLDcyLDcyWm0yOS42Ni04Mi4zNEwxNzEuMzEsMTM2bDE4LjM1LDE4LjM0YTgsOCwwLDAsMS0xMS4zMiwxMS4zMkwxNjAsMTQ3LjMxbC0xOC4zNCwxOC4zNWE4LDgsMCwwLDEtMTEuMzItMTEuMzJMMTQ4LjY5LDEzNmwtMTguMzUtMTguMzRhOCw4LDAsMCwxLDExLjMyLTExLjMyTDE2MCwxMjQuNjlsMTguMzQtMTguMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyWiIvPjwvc3ZnPg==');}.icon-arrows-clockwise{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMjQsNDhWOTZhOCw4LDAsMCwxLTgsOEgxNjhhOCw4LDAsMCwxLDAtMTZoMjguNjlMMTgyLjA2LDczLjM3YTc5LjU2LDc5LjU2LDAsMCwwLTU2LjEzLTIzLjQzaC0uNDVBNzkuNTIsNzkuNTIsMCwwLDAsNjkuNTksNzIuNzEsOCw4LDAsMCwxLDU4LjQxLDYxLjI3YTk2LDk2LDAsMCwxLDEzNSwuNzlMMjA4LDc2LjY5VjQ4YTgsOCwwLDAsMSwxNiwwWk0xODYuNDEsMTgzLjI5YTgwLDgwLDAsMCwxLTExMi40Ny0uNjZMNTkuMzEsMTY4SDg4YTgsOCwwLDAsMCwwLTE2SDQwYTgsOCwwLDAsMC04LDh2NDhhOCw4LDAsMCwwLDE2LDBWMTc5LjMxbDE0LjYzLDE0LjYzQTk1LjQzLDk1LjQzLDAsMCwwLDEzMCwyMjIuMDZoLjUzYTk1LjM2LDk1LjM2LDAsMCwwLDY3LjA3LTI3LjMzLDgsOCwwLDAsMC0xMS4xOC0xMS40NFoiLz48L3N2Zz4=');}.icon-share-fat{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzcuNjYsMTA2LjM1bC04MC04MEE4LDgsMCwwLDAsMTQ0LDMyVjcyLjM1Yy0yNS45NCwyLjIyLTU0LjU5LDE0LjkyLTc4LjE2LDM0LjkxLTI4LjM4LDI0LjA4LTQ2LjA1LDU1LjExLTQ5Ljc2LDg3LjM3YTEyLDEyLDAsMCwwLDIwLjY4LDkuNThoMGMxMS0xMS43MSw1MC4xNC00OC43NCwxMDcuMjQtNTJWMTkyYTgsOCwwLDAsMCwxMy42Niw1LjY1bDgwLTgwQTgsOCwwLDAsMCwyMzcuNjYsMTA2LjM1Wk0xNjAsMTcyLjY5VjE0NGE4LDgsMCwwLDAtOC04Yy0yOC4wOCwwLTU1LjQzLDcuMzMtODEuMjksMjEuOGExOTYuMTcsMTk2LjE3LDAsMCwwLTM2LjU3LDI2LjUyYzUuOC0yMy44NCwyMC40Mi00Ni41MSw0Mi4wNS02NC44NkM5OS40MSw5OS43NywxMjcuNzUsODgsMTUyLDg4YTgsOCwwLDAsMCw4LThWNTEuMzJMMjIwLjY5LDExMloiLz48L3N2Zz4=');}.icon-trash{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMTYsNDhIMTc2VjQwYTI0LDI0LDAsMCwwLTI0LTI0SDEwNEEyNCwyNCwwLDAsMCw4MCw0MHY4SDQwYTgsOCwwLDAsMCwwLDE2aDhWMjA4YTE2LDE2LDAsMCwwLDE2LDE2SDE5MmExNiwxNiwwLDAsMCwxNi0xNlY2NGg4YTgsOCwwLDAsMCwwLTE2Wk05Niw0MGE4LDgsMCwwLDEsOC04aDQ4YTgsOCwwLDAsMSw4LDh2OEg5NlptOTYsMTY4SDY0VjY0SDE5MlpNMTEyLDEwNHY2NGE4LDgsMCwwLDEtMTYsMFYxMDRhOCw4LDAsMCwxLDE2LDBabTQ4LDB2NjRhOCw4LDAsMCwxLTE2LDBWMTA0YTgsOCwwLDAsMSwxNiwwWiIvPjwvc3ZnPg==');}.icon-star{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjM4LDE2LjM4LDAsMCwwLDI0LjUsMTcuODJMMTI4LDE5OC40OWw1MC41MywzMS4wOEExNi40LDE2LjQsMCwwLDAsMjAzLDIxMS43NWwtMTMuNzYtNTguMDcsNDUtMzguODNBMTYuNDMsMTYuNDMsMCwwLDAsMjM5LjE4LDk3LjI2Wm0tMTUuMzQsNS40Ny00OC43LDQyYTgsOCwwLDAsMC0yLjU2LDcuOTFsMTQuODgsNjIuOGEuMzcuMzcsMCwwLDEtLjE3LjQ4Yy0uMTguMTQtLjIzLjExLS4zOCwwbC01NC43Mi0zMy42NWE4LDgsMCwwLDAtOC4zOCwwTDY5LjA5LDIxNS45NGMtLjE1LjA5LS4xOS4xMi0uMzgsMGEuMzcuMzcsMCwwLDEtLjE3LS40OGwxNC44OC02Mi44YTgsOCwwLDAsMC0yLjU2LTcuOTFsLTQ4LjctNDJjLS4xMi0uMS0uMjMtLjE5LS4xMy0uNXMuMTgtLjI3LjMzLS4yOWw2My45Mi01LjE2QTgsOCwwLDAsMCwxMDMsOTEuODZsMjQuNjItNTkuNjFjLjA4LS4xNy4xMS0uMjUuMzUtLjI1cy4yNy4wOC4zNS4yNUwxNTMsOTEuODZhOCw4LDAsMCwwLDYuNzUsNC45Mmw2My45Miw1LjE2Yy4xNSwwLC4yNCwwLC4zMy4yOVMyMjQsMTAyLjYzLDIyMy44NCwxMDIuNzNaIi8+PC9zdmc+');}.icon-alphabetical{--icon:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIGZpbGw9ImN1cnJlbnRDb2xvciIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTgzLjc4IDE4NC4wNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNTkuNTg2IDY5Ljc0MmMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAyMjktMC41Mjk1OCAxLjk0OTNzMC4xNzkwMyAxLjU5MzcgMC41Mjk1OCAxLjk5NDRjMC4zNzU1OCAwLjM3NTU4IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGg3LjAxOTdsLTEyLjQyOCAzNC4zNjZoLTIuMTA3Yy0wLjg1MTMgMC0xLjQ2MSAwLjE5NjU2LTEuODM2NiAwLjU5NzE4LTAuMzUwNTQgMC4zNzU1OC0wLjUyOTU3IDEuMDM0MS0wLjUyOTU3IDEuOTYwNiAwIDAuOTI2NDQgMC4xNzkwMyAxLjU4MjUgMC41Mjk1NyAxLjk4MyAwLjM3NTU4IDAuMzc1NTkgMC45ODUyOSAwLjU2MzM4IDEuODM2NiAwLjU2MzM4aDEyLjU1MmMwLjg1MTMgMCAxLjQ1MjItMC4xODc3OSAxLjgwMjgtMC41NjMzOCAwLjM3NTU4LTAuNDAwNjIgMC41NjMzNy0xLjA1NjYgMC41NjMzNy0xLjk4MyAwLTAuOTI2NDUtMC4xODc3OS0xLjU4NS0wLjU2MzM3LTEuOTYwNi0wLjM1MDU0LTAuNDAwNjItMC45NTE0Ny0wLjU5NzE4LTEuODAyOC0wLjU5NzE4aC00LjU1MjFsMy4xMjExLTguOTM0OWgxOC4yMmwzLjA3NiA4LjkzNDloLTUuMDcwNGMtMC44NTEzIDAtMS40NjEgMC4xOTY1Ni0xLjgzNjYgMC41OTcxOC0wLjM1MDU0IDAuMzc1NTgtMC41Mjk1OCAxLjAzNDEtMC41Mjk1OCAxLjk2MDYgMCAwLjkyNjQ0IDAuMTc5MDMgMS41ODI1IDAuNTI5NTggMS45ODMgMC4zNzU1OCAwLjM3NTU5IDAuOTg1MjkgMC41NjMzOCAxLjgzNjYgMC41NjMzOGgxMy4yOTZjMC44NTEzIDAgMS40NTIyLTAuMTg3NzkgMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzctMS4wNTY2IDAuNTYzMzctMS45ODMgMC0wLjkyNjQ1LTAuMTg3NzktMS41ODUtMC41NjMzNy0xLjk2MDYtMC4zNTA1NC0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOGgtMi4yODczbC0xMy4yNjItMzcuMDM2Yy0wLjMwMDQ3LTAuODUxMy0wLjc1OTk0LTEuNDYxLTEuMzg1OS0xLjgzNjYtMC42MDA5My0wLjQwMDYyLTEuNDA5Ny0wLjU5NzE4LTIuNDExMy0wLjU5NzE4em00NC4xNDYgMGMtMC44NTEzIDAtMS40NzIzIDAuMTk2NTYtMS44NDc4IDAuNTk3MTgtMC4zNTA1NSAwLjM3NTU4LTAuNTE4MyAxLjAyMjktMC41MTgzIDEuOTQ5M3YxMS45MWMwIDAuODc2MzMgMC4yMDUzMiAxLjUwNjEgMC42MzA5OCAxLjg4MTcgMC40MjU2NiAwLjM3NTU4IDEuMTU5MyAwLjU2MzM3IDIuMTg1OSAwLjU2MzM3czEuNzQ5LTAuMTg3NzkgMi4xNzQ3LTAuNTYzMzdjMC40MjU2OS0wLjM3NTU4IDAuNjQyMjYtMS4wMDUzIDAuNjQyMjYtMS44ODE3di05LjM1MTdoMTguODUxbC0yNC43NTQgMzUuMzAxYy0wLjM1MDU0IDAuNTI1ODItMC41MTgzMSAxLjA3MTctMC41MTgzMSAxLjYyMjYgMCAwLjkyNjQ1IDAuMTY3NzcgMS41ODI1IDAuNTE4MzEgMS45ODMxIDAuMzc1NTggMC4zNzU1OCAwLjk5NjU0IDAuNTYzMzggMS44NDc4IDAuNTYzMzhoMjguNzY2YzAuODUxMyAwIDEuNDUyMi0wLjE4NzggMS44MDI4LTAuNTYzMzggMC4zNzU1OC0wLjQwMDYyIDAuNTYzMzgtMS4wNTY2IDAuNTYzMzgtMS45ODMxdi0xMi42NjVjMC0wLjg3NjMzLTAuMjE2NTgtMS40OTQ4LTAuNjQyMjUtMS44NzA0LTAuNDI1NjYtMC4zNzU1OC0xLjE0OC0wLjU2MzM4LTIuMTc0Ny0wLjU2MzM4LTEuMDI2NiAwLTEuNzQ5IDAuMTg3NzktMi4xNzQ3IDAuNTYzMzgtMC40MjU2NiAwLjM3NTU4LTAuNjQyMjQgMC45OTQwMi0wLjY0MjI0IDEuODcwNHYxMC4xMDdoLTE5Ljk3OGwyNC45MDEtMzUuNDU5YzAuMjUwMzktMC4zNTA1NCAwLjM3MTgzLTAuODM4ODMgMC4zNzE4My0xLjQ2NDggMC0wLjkyNjQ1LTAuMTg3OC0xLjU3MzctMC41NjMzOC0xLjk0OTMtMC4zNTA1NS0wLjQwMDYyLTAuOTUxNDctMC41OTcxOC0xLjgwMjgtMC41OTcxOHptLTMxLjc1MiA1LjEwNDJoMC43MDk4NWw2Ljk4NTkgMjAuMzE1aC0xNC43MTZ6bS0zNy43MjMtNDkuMTgzYy00LjczNDIgMC04LjYzMTMgMy44OTctOC42MzEzIDguNjMxM3YxMTUuNDdjMCA0LjczNDIgMy44OTcgOC42MzEzIDguNjMxMyA4LjYzMTNoMTE1LjI2YzQuNzM0MiAwIDguNjQyMS0zLjg5NyA4LjY0MjEtOC42MzEzdi0xMTUuNDdjMC00LjczNDItMy45MDgyLTguNjMxMy04LjY0MjEtOC42MzEzem0wIDUuNzI0aDExNS4yNmMxLjY1OCAwIDIuOTA3IDEuMjQ5MSAyLjkwNyAyLjkwNzF2MTE1LjQ3YzAgMS42NTgtMS4yNDkxIDIuOTA3LTIuOTA3IDIuOTA3aC0xMTUuMjZjLTEuNjU4IDAtMi44OTU4LTEuMjQ5MS0yLjg5NTgtMi45MDd2LTExNS40N2MwLTEuNjU4IDEuMjM3OC0yLjkwNzEgMi44OTU4LTIuOTA3MXoiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIuNzIxMTQiLz48L3N2Zz4=');}.icon-shopping-cart-simple{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0xMDQsMjE2YTE2LDE2LDAsMSwxLTE2LTE2QTE2LDE2LDAsMCwxLDEwNCwyMTZabTg4LTE2YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE5MiwyMDBaTTIzOS43MSw3NC4xNGwtMjUuNjQsOTIuMjhBMjQuMDYsMjQuMDYsMCwwLDEsMTkxLDE4NEg5Mi4xNkEyNC4wNiwyNC4wNiwwLDAsMSw2OSwxNjYuNDJMMzMuOTIsNDBIMTZhOCw4LDAsMCwxLDAtMTZINDBhOCw4LDAsMCwxLDcuNzEsNS44Nkw1Ny4xOSw2NEgyMzJhOCw4LDAsMCwxLDcuNzEsMTAuMTRaTTIyMS40Nyw4MEg2MS42NGwyMi44MSw4Mi4xNEE4LDgsMCwwLDAsOTIuMTYsMTY4SDE5MWE4LDgsMCwwLDAsNy43MS01Ljg2WiIvPjwvc3ZnPg==');}.icon-star-half-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzkuMTgsOTcuMjZBMTYuMzgsMTYuMzgsMCwwLDAsMjI0LjkyLDg2bC01OS00Ljc2TDE0My4xNCwyNi4xNWExNi4zNiwxNi4zNiwwLDAsMC0zMC4yNywwTDkwLjExLDgxLjIzLDMxLjA4LDg2YTE2LjQ2LDE2LjQ2LDAsMCwwLTkuMzcsMjguODZsNDUsMzguODNMNTMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMCwyNC41LDE3LjgyTDEyOCwxOTguNDlsNTAuNTMsMzEuMDhBMTYuNCwxNi40LDAsMCwwLDIwMywyMTEuNzVsLTEzLjc2LTU4LjA3LDQ1LTM4LjgzQTE2LjQzLDE2LjQzLDAsMCwwLDIzOS4xOCw5Ny4yNlptLTE1LjM0LDUuNDctNDguNyw0MmE4LDgsMCwwLDAtMi41Niw3LjkxbDE0Ljg4LDYyLjhhLjM3LjM3LDAsMCwxLS4xNy40OGMtLjE4LjE0LS4yMy4xMS0uMzgsMGwtNTQuNzItMzMuNjVBOCw4LDAsMCwwLDEyOCwxODEuMVYzMmMuMjQsMCwuMjcuMDguMzUuMjZMMTUzLDkxLjg2YTgsOCwwLDAsMCw2Ljc1LDQuOTJsNjMuOTEsNS4xNmMuMTYsMCwuMjUsMCwuMzQuMjlTMjI0LDEwMi42MywyMjMuODQsMTAyLjczWiIvPjwvc3ZnPg==');}.icon-star-fi{--icon:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0yMzQuMjksMTE0Ljg1bC00NSwzOC44M0wyMDMsMjExLjc1YTE2LjQsMTYuNCwwLDAsMS0yNC41LDE3LjgyTDEyOCwxOTguNDksNzcuNDcsMjI5LjU3QTE2LjQsMTYuNCwwLDAsMSw1MywyMTEuNzVsMTMuNzYtNTguMDctNDUtMzguODNBMTYuNDYsMTYuNDYsMCwwLDEsMzEuMDgsODZsNTktNC43NiwyMi43Ni01NS4wOGExNi4zNiwxNi4zNiwwLDAsMSwzMC4yNywwbDIyLjc1LDU1LjA4LDU5LDQuNzZhMTYuNDYsMTYuNDYsMCwwLDEsOS4zNywyOC44NloiLz48L3N2Zz4=');} |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="svg5" width="32" height="32" viewBox="0 0 32 32" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1"><path id="Martian" d="M3.58 18.13v5.75H3V20.9l-.45 1.97h-.18c-.34 0-.4-.34-.44-.47l-.35-1.5v2.97H1v-5.75h.36c.23 0 .26.2.26.2l.69 3.31.65-3.3c0-.03.04-.21.26-.21Zm4.72 5.75h-.65l-.51-3.96-.52 3.96h-.65l.87-5.75h.32c.25 0 .29.15.31.3zm4.49 0h-.6v-2.1c0-.29-.14-.38-.3-.38h-.3v2.48h-.6v-5.75h1.08c.39 0 .72.32.72.72v1.77s.02.45-.22.51c.23.12.22.54.22.54zm-1.2-3.04h.3c.16 0 .3-.06.3-.32v-1.55c0-.21-.14-.3-.3-.3h-.3zm6.4-2.71-.2.42c-.03.08-.12.16-.31.16h-.46c-.08 0-.14.06-.15.14v5.03h-.42c-.14 0-.16-.09-.16-.13v-5.04h-.83v-.4c0-.1.08-.18.18-.18zm2.65 0H21c.18 0 .24.13.24.23v5.52h-.42c-.14 0-.16-.09-.17-.13zm5.82 5.75h-.65l-.52-3.96-.52 3.96h-.65l.87-5.75h.33c.24 0 .28.15.3.3zM31 18.13v5.75h-.27c-.32 0-.37-.26-.4-.37l-.63-2.85v3.22h-.59v-5.75h.27c.33 0 .39.15.42.32l.6 2.99v-3.31z" style="fill:#15a54b;stroke-width:.0996171"/><path id="Infotech" d="M6.57 26.1h.17v1.73h-.17Zm2.47.82-.2-.54.02.56v.89h-.18v-1.74h.2l.37.92.2.54a6.4 6.4 0 0 1-.02-.57v-.89h.18v1.74h-.2zm2.51.9V26.1h.7v.16h-.52v.66h.49v.15h-.5v.77zm3.34-.37a.4.4 0 0 1-.11.3c-.08.07-.18.1-.33.1-.14 0-.25-.03-.32-.1a.4.4 0 0 1-.11-.3v-.98a.4.4 0 0 1 .1-.3c.08-.07.19-.1.33-.1.15 0 .25.03.33.1a.4.4 0 0 1 .1.3zm-.18-.97c0-.17-.08-.25-.26-.25-.17 0-.26.08-.26.25v.96c0 .17.09.26.26.26.18 0 .26-.09.26-.26zm2.74-.23h-.32v1.58h-.18v-1.58h-.33v-.16h.83zm2.51 1.58h-.75v-1.74h.75v.16h-.57v.63h.5v.15h-.5v.64h.57zm2.67-.51v.13a.4.4 0 0 1-.11.3c-.08.07-.18.1-.33.1-.14 0-.25-.03-.32-.1a.4.4 0 0 1-.11-.3v-.98a.4.4 0 0 1 .1-.3c.08-.07.19-.1.33-.1.15 0 .25.03.33.1a.4.4 0 0 1 .1.3v.14h-.17v-.13c0-.17-.08-.25-.26-.25-.17 0-.26.08-.26.25v.96c0 .17.09.26.26.26.18 0 .26-.09.26-.26v-.12zm2.8-1.23v1.74h-.17v-.78h-.57v.78h-.17v-1.74h.17v.8h.57v-.8z" style="fill:#231f20;stroke-width:.0996171"/><path id="spaceship-loop-black" d="M24.02 11.6c-.27-.93-1.64-1.4-3.51-1.4 1.5.06 2.56.49 2.79 1.25.41 1.4-2.06 3.35-5.52 4.38-3.45 1.03-6.6.75-7.01-.64-.26-.85.58-1.92 2.06-2.85-1.87 1.09-2.96 2.37-2.66 3.38.46 1.53 3.92 1.85 7.75.7 3.82-1.13 6.55-3.3 6.1-4.82z" style="clip-rule:evenodd;fill:#231f20;fill-rule:nonzero;stroke:#fff;stroke-width:.424869;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="spaceship-loop-green-2" d="M21.65 9.84c.83.03 1.68.16 2.46.49.2.08.38.18.55.31.17.14.33.3.43.49a1.22 1.22 0 0 1 .15.63c0 .22-.08.43-.16.62-.09.2-.2.38-.32.55a9.04 9.04 0 0 1-1.32 1.36 17.69 17.69 0 0 1-2.06 1.45c.68-.49 1.36-.98 1.99-1.53.3-.27.62-.56.9-.86a5.1 5.1 0 0 0 .39-.48c.11-.17.23-.35.3-.54a1.49 1.49 0 0 0 .14-.88c-.02-.09-.06-.18-.1-.27a1.98 1.98 0 0 0-.93-.76c-.37-.18-.78-.3-1.18-.39-.4-.09-.82-.15-1.24-.19Zm-11.24 7.05c-.23-.11-.43-.25-.62-.42a1.4 1.4 0 0 1-.38-.65c-.06-.25-.02-.5.04-.75.08-.24.2-.47.34-.68.29-.4.63-.77 1-1.1a10.65 10.65 0 0 1 1.18-.89l-.28.24-.29.24-.27.23-.27.26c-.36.34-.7.7-.96 1.1-.14.2-.26.4-.33.63-.08.23-.1.47-.06.7.04.23.17.45.33.63s.36.33.57.46z" style="clip-rule:evenodd;fill:#15a54b;fill-rule:evenodd;stroke:none;stroke-width:.424869;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="path2" d="M14.87 4.32c1.3.4 1.14 1.02 1.14 1.02-1.7-1.43-3.4.83-3.4.83a4.87 4.87 0 0 1 1.77-.12 4.68 4.68 0 0 0-2.15 2.58 4.66 4.66 0 0 0-.04.01c-.5.13-.77.71-.6 1.24a8.22 8.22 0 0 0 1.68 3.06s0 0 0 0a13.02 13.02 0 0 0 .07.08 10.48 10.48 0 0 0 1.03.98 13.02 13.02 0 0 0 .13.11l.57.45c.3.22.62.43.96.42h.04a2.27 2.27 0 0 0 1.76-.42c.75-.56 1.65-1.34 2.3-2.22.6-.74.97-1.82 1.18-2.46.18-.53-.1-1.1-.6-1.24h-.03A4.58 4.58 0 0 0 17.3 5.6c-.5-1.1-2.43-1.28-2.43-1.28Z" style="clip-rule:evenodd;fill:none;fill-rule:nonzero;stroke:#fff;stroke-width:.424869;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1"/><path id="Dark-Back-7" d="M20.95 10.25c0 1.66-1.8 3.32-3.12 4.3a2.27 2.27 0 0 1-2.76 0c-1.32-.98-3.11-2.64-3.11-4.3a4.62 4.62 0 0 1 4.49-4.73c2.48 0 4.5 2.12 4.5 4.73z" style="clip-rule:evenodd;fill:#0a8943;fill-rule:nonzero;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/><path id="path1-6" d="M13.77 13.1c-.11-.05-.23-.1-.34-.17-1-.6-1.56-2.2-1.84-3.05-.17-.53.1-1.1.6-1.23a4.66 4.66 0 0 1 2.16-.1 4.25 4.25 0 0 0-2.06-.07 4.88 4.88 0 0 1 2.68-2.7c1.33-.55 3.49.83 4.32 2.62-.25.02-.5.07-.75.15a4.74 4.74 0 0 1 2.18.1c.49.13.77.7.6 1.23-.3.85-.85 2.46-1.84 3.05-.23.13-.46.2-.68.24-.7 1.08-1.73 1.8-2.77 1.81-.34.01-.67-.2-.96-.42a13.02 13.02 0 0 1-1.8-1.62c.16.08.33.12.5.15zm3.68-.11c.35.06.35.27.35.27.02-.42-.34-.27-.34-.27Zm-.31 1c.17 0 .38 0 .47-.08.1-.09.07-.3.05-.38 0 .12.03.25-.1.36-.1.09-.23.1-.42.1z" style="clip-rule:evenodd;fill:#15a54b;fill-rule:evenodd;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/><path id="Black" d="M12.22 9c.62-.17 1.55-.3 2.33.2.77.48 1.2 1.47 1.42 2.16.14.43-.07.9-.45 1.01-.63.17-1.56.3-2.34-.19-.77-.49-1.2-1.47-1.43-2.16-.13-.43.08-.91.47-1.02zm8.46 0c.39.12.6.59.47 1.02-.22.7-.65 1.67-1.43 2.16-.78.49-1.72.36-2.33.2-.38-.12-.6-.6-.46-1.03.22-.69.65-1.67 1.42-2.16.78-.48 1.71-.36 2.33-.19zm-5.06-2.2s-.42-1.2-3-.63c0 0 1.69-2.26 3.4-.83 0 0 .15-.62-1.15-1.02 0 0 2.01.2 2.45 1.35 0 0-.24.56-1.7 1.13zm.4 6.93s1.35-.16 1.55-.54v.5c0 .12-.11.16-.2.18-.26.05-.96.05-1.36-.14z" style="clip-rule:evenodd;fill:#231f20;fill-rule:evenodd;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/><path id="whites-1" d="M15.03 10.32c-.08.17-.6.07-1.15-.22-.56-.3-.93-.67-.85-.84.1-.17.67-.15 1.22.14.56.3.87.76.79.92zm2.87 0c-.08-.16.23-.62.79-.92.55-.29 1.13-.3 1.21-.14.1.17-.28.54-.84.84-.55.29-1.07.4-1.16.22z" style="clip-rule:evenodd;fill:#fff;fill-rule:evenodd;stroke-width:.0987792;stroke-linejoin:round;stroke-miterlimit:2"/></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="martian-infotech-logo" width="32" height="32" viewBox="0 0 32 32" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1"><path id="spaceship-loop-black" d="M27.84 17.56c-.48-1.63-2.9-2.47-6.2-2.46 2.65.1 4.53.86 4.93 2.2.73 2.46-3.63 5.9-9.74 7.73-6.1 1.82-11.65 1.32-12.38-1.12-.45-1.5 1.03-3.4 3.64-5.04-3.3 1.92-5.23 4.19-4.7 5.97.8 2.7 6.93 3.26 13.68 1.25s11.57-5.83 10.77-8.53z" style="fill:#231f20;fill-rule:nonzero;stroke:#fff;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="spaceship-loop-green" d="M23.66 14.46c1.47.06 2.96.28 4.34.86.35.15.68.33.98.56.3.23.57.5.76.85a2.16 2.16 0 0 1 .26 1.12c-.02.39-.14.76-.3 1.1-.14.35-.34.67-.56.97a15.95 15.95 0 0 1-2.33 2.39 31.22 31.22 0 0 1-3.63 2.56c1.2-.86 2.4-1.73 3.5-2.7.56-.48 1.1-.98 1.59-1.52a9 9 0 0 0 .7-.85c.2-.3.4-.61.54-.94a2.62 2.62 0 0 0 .24-1.55c-.04-.16-.1-.33-.2-.5a3.49 3.49 0 0 0-1.62-1.33c-.66-.31-1.37-.52-2.1-.68-.7-.16-1.43-.27-2.17-.34zM3.8 26.9a4.37 4.37 0 0 1-1.08-.73c-.31-.31-.56-.7-.67-1.15-.11-.44-.05-.9.07-1.33a5 5 0 0 1 .6-1.2c.5-.72 1.1-1.35 1.76-1.93a18.8 18.8 0 0 1 2.08-1.58l-.5.42-.5.42-.5.42-.46.45c-.63.6-1.23 1.22-1.7 1.93-.24.36-.45.73-.58 1.13-.13.4-.18.83-.1 1.24.07.4.3.79.58 1.1.29.32.64.58 1 .8z" style="fill:#15a54b;stroke:none;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/><path id="path2" d="M11.69 4.7c2.3.72 2.02 1.8 2.02 1.8-3.01-2.5-6 1.48-6 1.48a8.6 8.6 0 0 1 3.12-.21 8.26 8.26 0 0 0-3.8 4.56 8.23 8.23 0 0 0-.08.02c-.87.23-1.35 1.25-1.05 2.18.38 1.14 1.04 3.06 2.12 4.38.26.35.54.7.84 1.02h-.01a22.98 22.98 0 0 0 .14.14 18.5 18.5 0 0 0 1.82 1.73 22.98 22.98 0 0 0 .23.2l1 .8c.52.38 1.09.75 1.7.74h.07a4.01 4.01 0 0 0 3.1-.75c1.33-1 2.93-2.37 4.06-3.91 1.06-1.31 1.7-3.22 2.09-4.35.3-.93-.18-1.95-1.05-2.18l-.07-.02a8.08 8.08 0 0 0-5.97-5.35c-.86-1.93-4.28-2.27-4.28-2.27z" style="fill:none;fill-rule:nonzero;stroke:#fff;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"/><path id="Dark-Back" d="M22.42 15.19c0 2.93-3.18 5.85-5.51 7.6a4.01 4.01 0 0 1-4.86 0c-2.33-1.75-5.5-4.67-5.5-7.6 0-4.62 3.55-8.36 7.93-8.36s7.94 3.74 7.94 8.36z" style="fill:#0a8943;fill-rule:nonzero;stroke-width:.17437"/><path id="path1" d="M9.75 20.2c-.2-.07-.41-.16-.61-.28-1.76-1.05-2.74-3.9-3.24-5.4-.3-.92.18-1.94 1.05-2.17a8.23 8.23 0 0 1 3.82-.17 7.51 7.51 0 0 0-3.63-.12 8.61 8.61 0 0 1 4.73-4.77c2.35-.96 6.15 1.46 7.62 4.63-.44.04-.88.12-1.32.27 1.38-.32 2.8-.1 3.84.16.87.23 1.36 1.25 1.05 2.18-.5 1.5-1.48 4.34-3.24 5.39-.4.23-.8.36-1.2.42-1.23 1.9-3.04 3.17-4.88 3.2-.61 0-1.18-.36-1.7-.75a22.98 22.98 0 0 1-3.2-2.86c.3.14.6.22.9.27zm6.5-.18c.62.1.62.48.62.48.02-.74-.61-.48-.61-.48zm-.56 1.78c.3 0 .68 0 .83-.15.17-.16.13-.53.1-.68 0 .2.04.44-.17.63-.18.16-.41.17-.76.2z" style="clip-rule:evenodd;fill:#15a54b;fill-rule:evenodd;stroke-width:.17437;stroke-linejoin:round;stroke-miterlimit:2"/><path id="Black" d="M7 12.98c1.1-.3 2.75-.52 4.12.34 1.37.86 2.13 2.6 2.52 3.82.24.76-.14 1.6-.81 1.79-1.1.3-2.75.52-4.12-.34-1.37-.86-2.13-2.6-2.52-3.82-.24-.76.14-1.6.82-1.8zm14.95 0c.68.2 1.06 1.03.82 1.8-.4 1.22-1.15 2.95-2.52 3.8-1.37.87-3.03.65-4.12.35-.67-.2-1.05-1.03-.81-1.8.39-1.22 1.15-2.95 2.52-3.81 1.37-.86 3.02-.64 4.1-.34zM13 9.1s-.74-2.14-5.3-1.12c0 0 2.99-3.98 6-1.46 0 0 .28-1.1-2.02-1.81 0 0 3.55.35 4.33 2.38 0 0-.42 1-3.01 2zm.7 12.23s2.39-.3 2.75-.95v.86c0 .22-.2.3-.35.33-.47.1-1.7.1-2.4-.24z" style="fill:#231f20;stroke-width:.17437"/><path id="whites" d="M11.98 15.3c-.15.3-1.07.13-2.04-.4-.98-.51-1.64-1.17-1.5-1.46.17-.3 1.18-.27 2.16.25.98.52 1.54 1.33 1.39 1.62zm5.06 0c-.15-.28.4-1.1 1.39-1.61.97-.52 1.99-.54 2.14-.25.16.3-.5.95-1.48 1.47s-1.9.7-2.05.4z" style="fill:#fff;stroke-width:.17437"/></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="martian-infotech" width="60" height="19.46" viewBox="0 0 60 19.462367" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1"><path id="Martian" d="M7.23.81v10.55H6.16V5.92l-.81 3.61h-.33c-.64 0-.76-.63-.82-.86l-.63-2.75v5.44H2.5V.8h.66c.42 0 .49.4.49.4L4.9 7.25l1.18-6.07c.02-.05.1-.38.49-.38Zm8.66 10.55h-1.2l-.94-7.26-.95 7.26h-1.19L13.21.8h.59c.45 0 .52.29.57.58zm8.22 0h-1.08V7.5c0-.51-.27-.68-.56-.68h-.57v4.54H20.8V.8h1.98c.72 0 1.32.6 1.32 1.33v3.25s.05.83-.39.94c.42.2.4.99.4.99zM21.9 5.8h.57c.29 0 .56-.12.56-.6V2.36c0-.39-.27-.54-.56-.54h-.57ZM33.64.8l-.36.79c-.06.13-.22.28-.57.28h-.84c-.15 0-.26.12-.27.26v9.22h-.77c-.26 0-.3-.16-.3-.23V1.88H29v-.74c0-.18.15-.33.33-.33zm4.87 0h.65c.31 0 .43.24.43.42v10.13h-.76c-.26 0-.3-.16-.32-.23zm10.66 10.55h-1.19l-.95-7.26-.95 7.26H44.9L46.5.8h.59c.45 0 .52.29.57.58zM57.5.8v10.55H57c-.58 0-.68-.47-.72-.68l-1.16-5.21v5.89h-1.08V.8h.5c.6 0 .7.29.76.6l1.12 5.47V.81Z" style="fill:#15a54b;stroke-width:.18263"/><path id="Infotech" d="M12.7 15.42h.33v3.18h-.33Zm4.55 1.51-.38-1c.02.25.03.6.03 1.04v1.63h-.32v-3.18h.38l.66 1.67.37 1c-.02-.18-.03-.52-.03-1.04v-1.63h.33v3.18h-.38zm4.6 1.67v-3.18h1.29v.28h-.97v1.22h.9v.28h-.9v1.4zm6.11-.7c0 .22-.07.4-.2.54s-.33.2-.6.2c-.26 0-.46-.06-.6-.2a.74.74 0 0 1-.2-.54v-1.78c0-.23.07-.4.2-.54.14-.14.34-.21.6-.21.27 0 .47.07.6.2.13.14.2.32.2.55zm-.32-1.78c0-.3-.16-.46-.48-.46-.32 0-.48.16-.48.46v1.77c0 .31.16.47.48.47.32 0 .48-.16.48-.47zm5.02-.42h-.6v2.9h-.32v-2.9h-.6v-.28h1.52zm4.6 2.9H35.9v-3.18h1.37v.28h-1.05v1.16h.91v.28h-.91v1.18h1.05zm4.9-.93v.23c0 .22-.08.4-.21.54-.14.14-.33.2-.6.2-.26 0-.46-.06-.6-.2a.74.74 0 0 1-.2-.54v-1.78c0-.23.07-.4.2-.54.14-.14.34-.21.6-.21.27 0 .46.07.6.2.13.14.2.32.2.55v.25h-.32v-.25c0-.3-.16-.46-.48-.46-.32 0-.48.16-.48.46v1.77c0 .31.16.47.48.47.32 0 .48-.16.48-.47v-.22zm5.14-2.25v3.18h-.33v-1.42h-1.03v1.42h-.32v-3.18h.32v1.48h1.03v-1.48z" style="fill:#231f20;stroke-width:.18263"/></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 32 32"><path d="M11.69 4.623c-.105-.01-.136.139-.036.17 1.137.35 1.621.793 1.825 1.133a1 1 0 0 1 .142.418c.003.039 0 .034-.002.058-.721-.557-1.449-.822-2.129-.804-.724.019-1.394.287-1.965.632-1.141.691-1.894 1.698-1.894 1.698a.087.087 0 0 0 .088.136c1.198-.267 2.124-.315 2.841-.242-1.712 1.006-3.051 2.58-3.693 4.555-.817.271-1.257 1.252-.967 2.143.144.43.333.977.563 1.556.126.99.665 1.987 1.4 2.932-3.158 1.89-4.99 4.094-4.472 5.832.8 2.7 6.93 3.26 13.68 1.25s11.569-5.83 10.769-8.53c-.42-1.422-2.317-2.244-4.987-2.423.077-.217.147-.426.207-.608.295-.882-.133-1.844-.921-2.136a8.16 8.16 0 0 0-6.116-5.489c-.45-.96-1.497-1.52-2.443-1.847-.988-.343-1.86-.429-1.875-.43zm.458.283c.298.042.652.064 1.375.315.96.332 1.988.913 2.377 1.861.055.023.146.032.19.041l.002-.006a7.96 7.96 0 0 1 5.814 5.21c-1.03-.25-2.4-.447-3.736-.138.44-.15.88-.23 1.32-.27-.816-1.76-2.352-3.289-3.959-4.136l.002-.002c-.07-.007-.145-.05-.199-.068-.027.022-.063.058-.086.076-.103.08-.228.167-.363.256l-.078.053-.002.002a8 8 0 0 1-.274.166l-.002.002a9 9 0 0 1-.312.17l-.004.001q-.165.087-.352.176l-.004.002q-.373.179-.832.36c-.023-.055-.036-.11-.142-.248l-.06-.075a2 2 0 0 0-.307-.299 3 3 0 0 0-.342-.232q-.036-.022-.072-.043a3 3 0 0 0-.334-.15q-.071-.028-.145-.053a4.3 4.3 0 0 0-.783-.193.1.1 0 0 0-.055.01h-.002c-.72-.09-1.652-.059-2.83.175.13-.164.668-.887 1.664-1.49.553-.335 1.194-.59 1.877-.608.684-.018 1.412.197 2.15.815.05.041.125.017.141-.045 0 0 .02-.085.01-.21-.01-.127-.052-.301-.168-.495-.178-.298-.796-.624-1.479-.93m-3.627 6.992q.221-.006.442 0a7.5 7.5 0 0 1 1.807.282 8.2 8.2 0 0 0-3.655.132q.045-.131.094-.261c.432-.09.872-.14 1.312-.153m.168.817q.135-.004.27 0c.721.015 1.475.175 2.16.605 1.37.86 2.132 2.6 2.522 3.82.24.76-.14 1.6-.81 1.79-1.1.3-2.75.52-4.12-.34s-2.132-2.6-2.522-3.82c-.24-.76.14-1.6.82-1.8L7 12.98a7.2 7.2 0 0 1 1.69-.265m11.309 0a6.8 6.8 0 0 1 1.941.265h.01c.68.2 1.06 1.03.82 1.8-.4 1.22-1.149 2.95-2.519 3.8-1.37.87-3.03.65-4.12.35-.67-.2-1.05-1.03-.81-1.8.39-1.22 1.15-2.95 2.52-3.81.685-.43 1.44-.59 2.158-.605m-11.059.535c-.254.011-.436.077-.5.19-.14.29.52.95 1.5 1.46.97.53 1.891.7 2.041.4l.01.01c.15-.29-.41-1.1-1.39-1.62-.613-.326-1.237-.459-1.66-.44m11.012.004c-.413.01-.976.143-1.521.435-.99.51-1.54 1.332-1.39 1.612v.01c.15.3 1.07.12 2.05-.4s1.64-1.172 1.48-1.472c-.065-.126-.297-.193-.619-.185m3.71 1.207c.74.07 1.47.18 2.17.34.73.16 1.439.37 2.099.68a3.5 3.5 0 0 1 1.62 1.33c.1.17.16.34.2.5a2.6 2.6 0 0 1-.24 1.548c-.14.33-.34.642-.54.942a9 9 0 0 1-.7.85c-.49.54-1.03 1.039-1.59 1.519-1.1.97-2.3 1.84-3.5 2.7a31 31 0 0 0 3.63-2.56 16 16 0 0 0 2.33-2.39c.22-.3.42-.62.56-.97.16-.34.28-.71.3-1.1a2.16 2.16 0 0 0-.26-1.12c-.19-.35-.46-.62-.76-.85s-.63-.41-.98-.56c-1.38-.58-2.87-.8-4.34-.86m-.829.736c2.012.258 3.401.975 3.738 2.104.73 2.46-3.63 5.898-9.74 7.728-6.1 1.82-11.65 1.321-12.38-1.119-.438-1.456.95-3.288 3.42-4.894q.294.378.624.744c1.095 1.206 2.428 2.291 3.504 3.1v-.003a4.1 4.1 0 0 0 4.965 0v.002c2.124-1.595 5.061-4.146 5.566-6.851q.167-.426.303-.81M8.068 18.97c.321.383.676.714 1.073.95.2.12.409.21.609.28h-.01a3.5 3.5 0 0 1-.812-.232 9.285 9.285 0 0 1-.86-.998m-1.507.011a19 19 0 0 0-2.08 1.58c-.66.58-1.26 1.21-1.76 1.93a5 5 0 0 0-.602 1.2c-.12.43-.178.89-.068 1.33.11.45.36.84.67 1.15a4.4 4.4 0 0 0 1.08.73v-.01c-.36-.22-.71-.48-1-.8-.28-.31-.51-.7-.58-1.1-.08-.41-.03-.84.1-1.24s.34-.77.58-1.13c.47-.71 1.069-1.33 1.699-1.93l.46-.45.5-.42.5-.42zm13.72.606c-1.049 1.22-2.325 2.308-3.424 3.133v.002a3.92 3.92 0 0 1-2.699.789c1.693-.199 3.325-1.414 4.461-3.17.4-.06.801-.19 1.201-.42.161-.096.313-.21.461-.334m-3.822.39c.183-.01.423.062.41.524 0 0 .001-.38-.619-.48h.01s.09-.037.199-.043m-.01.405v.86c0 .22-.2.3-.35.33-.47.1-1.7.1-2.4-.24 0 0 2.39-.3 2.75-.95m.17.59c.03.15.07.52-.1.68-.15.15-.53.15-.83.15.35-.03.58-.041.76-.201.21-.19.17-.43.17-.63" style="fill:#231f20;fill-rule:nonzero;stroke:none;stroke-width:.75;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"/></svg> |
| New file |
| | |
| | | <?php |
| | | |
| | | function ami_prerender_core_site_logo(array $block, ?string $content):?string |
| | | { |
| | | $open = $close = ''; |
| | | |
| | | if (!is_home() && !is_front_page()) { |
| | | $open = '<a href="'.get_home_url().'" rel="home">'; |
| | | $close = '</a>'; |
| | | } |
| | | $cache = (class_exists('JVBase\managers\Cache')) ? JVBase\managers\Cache::for('full-icons') : false; |
| | | |
| | | if (array_key_exists('attrs', $block) && array_key_exists('className', $block['attrs'])) { |
| | | $logo = false; |
| | | if (str_contains($block['attrs']['className'], 'is-text')) { |
| | | if ($cache) { |
| | | $martian = $cache->remember('martian', function() { |
| | | return file_get_contents(AMI_DIR . '/assets/icons/martian infotech logo.svg'); |
| | | }); |
| | | $text = $cache->remember('text', function() { |
| | | return file_get_contents(AMI_DIR . '/assets/icons/martian infotech.svg'); |
| | | }); |
| | | }else { |
| | | $martian = file_get_contents(AMI_DIR . '/assets/icons/martian infotech logo.svg'); |
| | | $text = file_get_contents(AMI_DIR . '/assets/icons/martian infotech.svg'); |
| | | } |
| | | |
| | | $logo = '<div class="logo">'.$martian.$text.'</div>'; |
| | | }else if (array_key_exists('attrs', $block) && str_contains($block['attrs']['className'], 'is-full')) { |
| | | if ($cache) { |
| | | $logo = $cache->remember('logo', function() { |
| | | return file_get_contents(AMI_DIR . '/assets/icons/full-logo.svg'); |
| | | }); |
| | | }else { |
| | | $logo = file_get_contents(AMI_DIR . '/assets/icons/full-logo.svg'); |
| | | } |
| | | |
| | | } |
| | | if ($logo) { |
| | | return $open.$logo.$close; |
| | | } |
| | | } |
| | | |
| | | return JVB()->blocks()->prerender_core_site_logo($block, $content); |
| | | } |
| | | |
| File was renamed from content/setup.php |
| | |
| | | * - 'section' => (string) the slug of the section, as defined above |
| | | */ |
| | | |
| | | require(AJV_DIR . '/content/art.php'); |
| | | require(AJV_DIR . '/content/design.php'); |
| | | require(AJV_DIR . '/content/development.php'); |
| | | require(AJV_DIR . '/content/strategy.php'); |
| | | require(AJV_DIR . '/content/support.php'); |
| | | require(AJV_DIR . '/content/writing.php'); |
| | | require(AMI_DIR . '/content/product.php'); |
| | | require(AMI_DIR . '/content/service.php'); |
| | | //require(AMI_DIR . '/content/support.php'); |
| | | |
| | | add_filter('jvb_content', 'ajv_content'); |
| | | function ajv_content($content):array |
| | | { |
| | | return [ |
| | | 'design' => ajv_design(), |
| | | 'development' => ajv_development(), |
| | | 'strategy' => ajv_strategy(), |
| | | 'art' => ajv_art(), |
| | | 'writing' => ajv_writing(), |
| | | 'support' => ajv_support(), |
| | | ]; |
| | | } |
| | | //add_filter('jvb_content', 'ami_content'); |
| | | //function ami_content($content):array |
| | | //{ |
| | | // return [ |
| | | // 'product' => ami_product(), |
| | | // 'service' => ami_service(), |
| | | // 'support' => ami_support(), |
| | | // ]; |
| | | //} |
| New file |
| | |
| | | <?php |
| | | // /content/product.php |
| | | |
| | | use JVBase\registrar\Registrar; |
| | | |
| | | add_action('jvbDefineRegistrar', 'ami_product'); |
| | | add_action('jvbDefineRegistrarFields', 'ami_product_fields'); |
| | | |
| | | add_action('plugins_loaded', 'ami_product',1); |
| | | //Add fields later so we can verify taxonomies/post types exist |
| | | add_action('plugins_loaded', 'ami_product_fields', 2); |
| | | |
| | | add_filter('ami_ProductSchemaDefault', 'ami_product_schema'); |
| | | add_filter('ami_ProductMetaDefault', 'ami_product_meta'); |
| | | add_filter('ami_ProductArchiveDefault', 'ami_product_archive'); |
| | | |
| | | function ami_product(){ |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $product = Registrar::forPost('product', 'Product', 'Products') |
| | | ->setIcon('shopping-cart-simple') |
| | | ->make([ |
| | | 'rewrite' => [ |
| | | 'slug' => 'products', |
| | | 'with_front' => false, |
| | | ], |
| | | 'taxonomies' => [ |
| | | 'product_cat', |
| | | ], |
| | | 'rewrite_taxonomy' => 'product_cat' |
| | | ]) |
| | | ->setAll([ |
| | | 'show_directory', |
| | | ]) |
| | | ->setIntegration('helcim') |
| | | ->setIntegration('facebook') |
| | | ->setIntegration('instagram'); |
| | | |
| | | //$directory = $product->getConfig('directory'); |
| | | |
| | | } |
| | | |
| | | function ami_product_fields():void |
| | | { |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $product = Registrar::getInstance('product'); |
| | | $breadcrumbs = $product->config('breadcrumbs'); |
| | | $breadcrumbs->setCrumb('product_cat'); |
| | | |
| | | |
| | | $fields = $product->fields(); |
| | | $fields->addField('gallery', [ |
| | | 'type' => 'upload', |
| | | 'subtype' => 'image', |
| | | 'multiple' => true, |
| | | 'label' => 'Gallery', |
| | | ]); |
| | | $fields->addField('product_cat', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'product_cat', |
| | | 'label' => 'Categories' |
| | | ]); |
| | | } |
| | | |
| | | function ami_product_schema():array |
| | | { |
| | | return [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork', |
| | | 'mainEntity' => [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => '{{post_title}}' |
| | | ], |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_product_meta():array |
| | | { |
| | | return[ |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_product_archive(array $defaults):array |
| | | { |
| | | return array_merge($defaults, [ |
| | | ]); |
| | | } |
| | | |
| | | function ami_product_reference_schema(array $defaults):array |
| | | { |
| | | return $defaults; |
| | | } |
| | | |
| | | |
| | | |
| | | // |
| | | //function ami_product():array |
| | | //{ |
| | | // return [ |
| | | // 'singular' => 'Product', |
| | | // 'plural' => 'Products', |
| | | // 'show_feed' => true, |
| | | // 'favouritable' => true, |
| | | // 'icon' => 'shopping-cart-simple', |
| | | // 'rewrite' => [ |
| | | // 'slug' => 'products', |
| | | // 'with_front' => false, |
| | | // ], |
| | | // 'use_helcim' => true, |
| | | // 'fields' => [ |
| | | // 'post_title' => [ |
| | | // 'type' => 'text', |
| | | // 'label' => 'Title', |
| | | // ], |
| | | // 'featured_image' => [ |
| | | // 'type' => 'image', |
| | | // 'label' => 'Image', |
| | | // ], |
| | | // 'gallery' => [ |
| | | // 'type' => 'gallery', |
| | | // 'label' => 'Gallery', |
| | | // ], |
| | | // 'price' => [ |
| | | // 'type' => 'number', |
| | | // 'label' => 'Price', |
| | | // ], |
| | | // 'post_content' => [ |
| | | // 'type' => 'textarea', |
| | | // 'quill' => true, |
| | | // 'label' => 'Notes' |
| | | // ] |
| | | // ], |
| | | // 'single_image' => false, |
| | | // 'upload_title' => 'Upload Products', |
| | | // ]; |
| | | //} |
| New file |
| | |
| | | <?php |
| | | // /content/service.php |
| | | |
| | | use JVBase\registrar\Registrar; |
| | | |
| | | add_action('jvbDefineRegistrar', 'ami_service'); |
| | | add_action('jvbDefineRegistrarFields', 'ami_service_fields'); |
| | | |
| | | add_action('plugins_loaded', 'ami_service',1); |
| | | //Add fields later so we can verify taxonomies/post types exist |
| | | add_action('plugins_loaded', 'ami_service_fields', 2); |
| | | |
| | | add_filter('ami_ServiceSchemaDefault', 'ami_service_schema'); |
| | | add_filter('ami_ServiceMetaDefault', 'ami_service_meta'); |
| | | add_filter('ami_ServiceArchiveDefault', 'ami_service_archive'); |
| | | |
| | | function ami_service(){ |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $service = Registrar::forPost('service', 'Service', 'Services') |
| | | ->setIcon('headset') |
| | | ->make([ |
| | | 'rewrite' => [ |
| | | 'slug' => 'services', |
| | | 'with_front' => false, |
| | | ], |
| | | 'taxonomies' => [ |
| | | 'tags', |
| | | 'city', |
| | | ], |
| | | ]) |
| | | ->setAll([ |
| | | 'show_directory', |
| | | ]) |
| | | ->setIntegration('helcim') |
| | | ->setIntegration('facebook') |
| | | ->setIntegration('instagram'); |
| | | |
| | | //$directory = $service->getConfig('directory'); |
| | | |
| | | } |
| | | |
| | | function ami_service_fields():void |
| | | { |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $service = Registrar::getInstance('service'); |
| | | // $breadcrumbs = $service->config('breadcrumbs'); |
| | | |
| | | |
| | | |
| | | $fields = $service->fields(); |
| | | $fields->addField('gallery', [ |
| | | 'type' => 'upload', |
| | | 'subtype' => 'image', |
| | | 'multiple' => true, |
| | | 'label' => 'Gallery', |
| | | ]); |
| | | $fields->addField('tags', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'tags', |
| | | 'label' => 'Tags' |
| | | ]); |
| | | $fields->addField('city', [ |
| | | 'type' => 'selector', |
| | | 'subtype' => 'taxonomy', |
| | | 'taxonomy' => 'city', |
| | | 'label' => 'City' |
| | | ]); |
| | | } |
| | | |
| | | function ami_service_schema():array |
| | | { |
| | | return [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork', |
| | | 'name' => '{{post_title}}', |
| | | 'mainEntity' => [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => '{{post_title}}' |
| | | ] |
| | | ]; |
| | | } |
| | | |
| | | function ami_service_meta():array |
| | | { |
| | | return[ |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_service_archive(array $defaults):array |
| | | { |
| | | return array_merge($defaults, [ |
| | | ]); |
| | | } |
| | | |
| | | function ami_service_reference_schema(array $defaults):array |
| | | { |
| | | return $defaults; |
| | | } |
| | | // |
| | | //function ami_service():array |
| | | //{ |
| | | // return [ |
| | | // 'singular' => 'Service', |
| | | // 'plural' => 'Services', |
| | | // 'show_feed' => true, |
| | | // 'favouritable' => true, |
| | | // 'icon' => 'headset', |
| | | // 'rewrite' => [ |
| | | // 'slug' => 'services', |
| | | // 'with_front' => false, |
| | | // ], |
| | | // 'use_helcim' => true, |
| | | // 'fields' => [ |
| | | // 'post_title' => [ |
| | | // 'type' => 'text', |
| | | // 'label' => 'Title', |
| | | // ], |
| | | // 'featured_image' => [ |
| | | // 'type' => 'image', |
| | | // 'label' => 'Image', |
| | | // ], |
| | | // 'gallery' => [ |
| | | // 'type' => 'gallery', |
| | | // 'label' => 'Gallery', |
| | | // ], |
| | | // 'price' => [ |
| | | // 'type' => 'number', |
| | | // 'label' => 'Price', |
| | | // ], |
| | | // 'post_content' => [ |
| | | // 'type' => 'textarea', |
| | | // 'quill' => true, |
| | | // 'label' => 'Notes' |
| | | // ] |
| | | // ], |
| | | // 'single_image' => false, |
| | | // 'upload_title' => 'Upload Services', |
| | | // ]; |
| | | //} |
| | |
| | | <?php |
| | | // /content/support.php |
| | | function ajv_support(): array |
| | | function ami_support(): array |
| | | { |
| | | return [ |
| | | 'singular' => 'Support', |
| | |
| | | 'hide_single' => false, |
| | | 'show_feed' => false, |
| | | 'icon' => 'question', |
| | | 'public' => false, |
| | | 'rewrite' => [ |
| | | 'slug' => 'support', |
| | | 'with_front' => false, |
| | |
| | | <?php |
| | | |
| | | /** |
| | | * Custom upload directory structure for edmonton.ink |
| | | * Recreates the original directory logic with shops, artists, partners, etc. |
| | | */ |
| | | add_filter('jvb_upload_directory', 'ajv_upload_directory', 10, 4); |
| | | function ajv_upload_directory($path, $post_type, $user_id, $term_id) |
| | | { |
| | | switch ($post_type) { |
| | | case 'shop': |
| | | // Shop directory |
| | | return 'shops/' . $term_id; |
| | | |
| | | case 'partner': |
| | | // Partner directory |
| | | return 'partners/' . $user_id; |
| | | |
| | | case 'artist': |
| | | // Artist profile directory |
| | | return 'artists/' . $user_id; |
| | | |
| | | default: |
| | | // Content directories within artist folder (tattoos, artwork, etc) |
| | | if (!$user_id) { |
| | | return $path; // fallback to default |
| | | } |
| | | |
| | | $link = get_user_meta($user_id, BASE . 'link', true); |
| | | $type = str_replace(BASE, '', get_post_type((int)$link)); |
| | | |
| | | return sanitize_title($type) . '/' . $user_id . '/' . sanitize_title($post_type); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Custom filename generation for edmonton.ink |
| | | * Recreates the original SEO-friendly filename logic |
| | | */ |
| | | add_filter('jvb_upload_filename', 'ajv_filename', 10, 6); |
| | | function ajv_filename($filename, $original_name, $user_data, $post_type, $user_id, $term_id) |
| | | { |
| | | // Get artist/shop/partner details |
| | | $post = (int)get_user_meta($user_id, BASE . 'link', true); |
| | | |
| | | if (!$post) { |
| | | return $filename; // fallback to default |
| | | } |
| | | |
| | | $city = jvbArtistCity($post); |
| | | |
| | | switch ($post_type) { |
| | | case 'shop': |
| | | // Shop images: {city}-best-tattoo-shop-{shop-name} |
| | | $shop_term = get_term($term_id, BASE . 'shop'); |
| | | if (!$shop_term || is_wp_error($shop_term)) { |
| | | return $filename; |
| | | } |
| | | |
| | | return sprintf( |
| | | '%s-best-tattoo-shop-%s-%s', |
| | | sanitize_title($city), |
| | | sanitize_title($shop_term->name), |
| | | ajv_get_counter($user_id, $post_type) |
| | | ); |
| | | |
| | | case 'artist': |
| | | // Profile images: {city}-best-{type}-{specialties}-{name} |
| | | $type = jvbArtistType($post); |
| | | $specialties = ajv_get_artist_top_styles($post); |
| | | |
| | | return sprintf( |
| | | '%s-best-%s-%s-%s-%s', |
| | | sanitize_title($city), |
| | | sanitize_title($type), |
| | | sanitize_title($specialties), |
| | | sanitize_title($user_data->display_name), |
| | | ajv_get_counter($user_id, $post_type) |
| | | ); |
| | | |
| | | case 'partner': |
| | | // Partner images: {city}-tattoo-{service-type}-{name} |
| | | $service_type = jvb_partner_type($post); |
| | | |
| | | return sprintf( |
| | | '%s-tattoo-%s-%s-%s', |
| | | sanitize_title($city), |
| | | sanitize_title($service_type), |
| | | sanitize_title($user_data->display_name), |
| | | ajv_get_counter($user_id, $post_type) |
| | | ); |
| | | |
| | | case 'tattoo': |
| | | // Get style and subject if available |
| | | $style = ajv_get_primary_taxonomy($post, BASE . 'style'); |
| | | $subject = ajv_get_primary_taxonomy($post, BASE . 'theme'); |
| | | |
| | | return sprintf( |
| | | '%s-%s-%s-tattoo-by-%s-%s', |
| | | sanitize_title($city), |
| | | sanitize_title($style), |
| | | sanitize_title($subject), |
| | | sanitize_title($user_data->display_name), |
| | | ajv_get_counter($user_id, $post_type) |
| | | ); |
| | | |
| | | case 'artwork': |
| | | // Get style and subject if available |
| | | $style = ajv_get_primary_taxonomy($post, BASE . 'artstyle'); |
| | | $subject = ajv_get_primary_taxonomy($post, BASE . 'arttheme'); |
| | | |
| | | return sprintf( |
| | | '%s-%s-%s-artwork-by-%s-%s', |
| | | sanitize_title($city), |
| | | sanitize_title($style), |
| | | sanitize_title($subject), |
| | | sanitize_title($user_data->display_name), |
| | | ajv_get_counter($user_id, $post_type) |
| | | ); |
| | | |
| | | case 'piercing': |
| | | // Get style if available |
| | | $style = ajv_get_primary_taxonomy($post, BASE . 'pstyle'); |
| | | |
| | | return sprintf( |
| | | '%s-%s-piercing-by-%s-%s', |
| | | sanitize_title($city), |
| | | sanitize_title($style), |
| | | sanitize_title($user_data->display_name), |
| | | ajv_get_counter($user_id, $post_type) |
| | | ); |
| | | |
| | | default: |
| | | // Content: {city}-{content_type}-by-{name} |
| | | $content_type = $post_type; |
| | | |
| | | return sprintf( |
| | | '%s-%s-by-%s-%s', |
| | | sanitize_title($city), |
| | | sanitize_title($content_type), |
| | | sanitize_title($user_data->display_name), |
| | | ajv_get_counter($user_id, $post_type) |
| | | ); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Custom alt text generation for edmonton.ink |
| | | * Recreates the original detailed alt text logic |
| | | */ |
| | | add_filter('jvb_upload_alt_text', 'ajv_alt_text', 10, 7); |
| | | function ajv_alt_text($alt_text, $file, $user_data, $post_id, $post_type, $user_id, $term_id) |
| | | { |
| | | $post = get_user_meta($user_id, BASE . 'link', true); |
| | | |
| | | if (!$post) { |
| | | return $alt_text; // fallback to default |
| | | } |
| | | |
| | | $city = jvbArtistCity($post); |
| | | $type = jvbArtistType($post); |
| | | |
| | | switch ($post_type) { |
| | | case 'shop': |
| | | $shop_term = get_term($term_id, BASE . 'shop'); |
| | | if (!$shop_term || is_wp_error($shop_term)) { |
| | | return $alt_text; |
| | | } |
| | | |
| | | return sprintf( |
| | | 'A photo of %s tattoo shop %s', |
| | | $city, |
| | | $shop_term->name |
| | | ); |
| | | |
| | | case 'artist': |
| | | $specialties = ajv_get_artist_top_styles($post); |
| | | |
| | | return sprintf( |
| | | 'A photo of %s %s %s, specializing in %s tattoos', |
| | | $city, |
| | | $type, |
| | | $user_data->display_name, |
| | | $specialties |
| | | ); |
| | | |
| | | case 'partner': |
| | | $service_type = jvb_partner_type($post); |
| | | |
| | | return sprintf( |
| | | 'A photo of %s, providing %s in %s', |
| | | $user_data->display_name, |
| | | $service_type, |
| | | $city |
| | | ); |
| | | |
| | | default: |
| | | if (!$post_id) { |
| | | return $alt_text; |
| | | } |
| | | |
| | | // Get primary style |
| | | $style = wp_get_post_terms($post_id, BASE . 'style', ['fields' => 'names']); |
| | | $first_style = !empty($style) ? $style[0] : 'custom'; |
| | | |
| | | // Get content type |
| | | $content_type = $post_type; |
| | | |
| | | // Base alt text |
| | | $alt = sprintf( |
| | | 'A photo of a %s %s by %s %s %s', |
| | | $first_style, |
| | | $content_type, |
| | | $city, |
| | | $type, |
| | | $user_data->display_name |
| | | ); |
| | | |
| | | // Add themes for tattoos only |
| | | if ($post_type === 'tattoo') { |
| | | $themes = wp_get_post_terms($post_id, BASE . 'theme', [ |
| | | 'fields' => 'names', |
| | | 'number' => 3 |
| | | ]); |
| | | |
| | | if (!empty($themes)) { |
| | | $theme_list = implode(', ', $themes); |
| | | $alt .= sprintf(', with %s', $theme_list); |
| | | } |
| | | } |
| | | |
| | | return $alt; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Custom image title generation for edmonton.ink |
| | | * Recreates the original SEO-friendly title logic |
| | | */ |
| | | add_filter('jvb_upload_image_title', 'ajv_image_title', 10, 7); |
| | | function ajv_image_title($title, $file, $user_data, $post_id, $post_type, $user_id, $term_id) |
| | | { |
| | | $post = get_user_meta($user_id, BASE . 'link', true); |
| | | |
| | | if (!$post) { |
| | | return $title; // fallback to default |
| | | } |
| | | |
| | | $city = jvbArtistCity($post); |
| | | $type = jvbArtistType($post); |
| | | |
| | | switch ($post_type) { |
| | | case 'shop': |
| | | $shop_term = get_term($term_id, BASE . 'shop'); |
| | | if (!$shop_term || is_wp_error($shop_term)) { |
| | | return $title; |
| | | } |
| | | |
| | | return sprintf( |
| | | '%s | %s\'s Best Tattoo Shops', |
| | | $shop_term->name, |
| | | $city |
| | | ); |
| | | |
| | | case 'artist': |
| | | return sprintf( |
| | | '%s | %s\'s Best %s', |
| | | $user_data->display_name, |
| | | $city, |
| | | $type |
| | | ); |
| | | |
| | | case 'tattoo': |
| | | if (!$post_id) { |
| | | return $title; |
| | | } |
| | | |
| | | $style = wp_get_post_terms($post_id, BASE . 'style', ['fields' => 'names']); |
| | | $first_style = !empty($style) ? $style[0] : 'custom'; |
| | | $content_type = str_replace(BASE, '', $post_type); |
| | | |
| | | return sprintf( |
| | | '%s %s by %s | %s\'s Best %s', |
| | | $first_style, |
| | | $content_type, |
| | | $user_data->display_name, |
| | | $city, |
| | | $type |
| | | ); |
| | | |
| | | case 'artwork': |
| | | if (!$post_id) { |
| | | return $title; |
| | | } |
| | | |
| | | $style = wp_get_post_terms($post_id, BASE . 'artstyle', ['fields' => 'names']); |
| | | $first_style = !empty($style) ? $style[0] : 'custom'; |
| | | $content_type = str_replace(BASE, '', $post_type); |
| | | |
| | | return sprintf( |
| | | '%s %s by %s | %s\'s Best %s', |
| | | $first_style, |
| | | $content_type, |
| | | $user_data->display_name, |
| | | $city, |
| | | $type |
| | | ); |
| | | |
| | | case 'piercing': |
| | | if (!$post_id) { |
| | | return $title; |
| | | } |
| | | |
| | | $style = wp_get_post_terms($post_id, BASE . 'pstyle', ['fields' => 'names']); |
| | | $first_style = !empty($style) ? $style[0] : 'custom'; |
| | | $content_type = str_replace(BASE, '', $post_type); |
| | | |
| | | return sprintf( |
| | | '%s %s by %s | %s\'s Best %s', |
| | | $first_style, |
| | | $content_type, |
| | | $user_data->display_name, |
| | | $city, |
| | | $type |
| | | ); |
| | | |
| | | default: |
| | | return sprintf( |
| | | 'Image by %s %s, %s', |
| | | $city, |
| | | $type, |
| | | $user_data->display_name |
| | | ); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Helper Functions |
| | | * These recreate the helper functions from the original UploadManager |
| | | */ |
| | | |
| | | /** |
| | | * Get the next file counter for edmonton.ink style counters |
| | | */ |
| | | function ajv_get_counter($user_id, $post_type) |
| | | { |
| | | // Get counter key for this post type |
| | | $counter_key = BASE . str_replace(BASE, '', $post_type) . '_counter'; |
| | | |
| | | // Get current counter value, default to 0 |
| | | $counter = (int)get_user_meta($user_id, $counter_key, true) ?: 0; |
| | | |
| | | // Increment counter |
| | | $counter++; |
| | | |
| | | // Update counter in user meta |
| | | update_user_meta($user_id, $counter_key, $counter); |
| | | |
| | | // Return formatted counter |
| | | return sprintf('%08d', $counter); |
| | | } |
| | | |
| | | /** |
| | | * Get artist's top styles for filename generation |
| | | */ |
| | | function ajv_get_artist_top_styles($post_id) |
| | | { |
| | | if (!function_exists('JVBase\\meta\\MetaManager')) { |
| | | // Fallback if MetaManager not available |
| | | $styles = wp_get_post_terms($post_id, BASE . 'style', array('fields' => 'names')); |
| | | if (is_wp_error($styles) || empty($styles)) { |
| | | return 'custom-tattoos'; |
| | | } |
| | | return implode('-', array_slice($styles, 0, 2)); |
| | | } |
| | | |
| | | $styles = wp_get_post_terms($post_id, BASE . 'style', array('fields' => 'names')); |
| | | if (is_wp_error($styles) || empty($styles)) { |
| | | return 'custom-tattoos'; |
| | | } |
| | | |
| | | // Get top highlighted styles first |
| | | $meta = new JVBase\meta\MetaManager($post_id, 'post'); |
| | | $highlighted = explode(',', $meta->getValue('top_style')) ?: array(); |
| | | |
| | | if (!empty($highlighted)) { |
| | | $style_names = array(); |
| | | foreach ($highlighted as $style_id) { |
| | | $term = get_term((int)$style_id, BASE . 'style'); |
| | | if ($term && !is_wp_error($term)) { |
| | | $style_names[] = $term->name; |
| | | } |
| | | } |
| | | if (!empty($style_names)) { |
| | | return implode('-', array_slice($style_names, 0, 2)); |
| | | } |
| | | } |
| | | |
| | | // Fallback to first two styles |
| | | return implode('-', array_slice($styles, 0, 2)); |
| | | } |
| | | |
| | | /** |
| | | * Get primary taxonomy term for content |
| | | */ |
| | | function ajv_get_primary_taxonomy($post_id, $taxonomy) |
| | | { |
| | | $terms = wp_get_post_terms($post_id, $taxonomy, array('fields' => 'names')); |
| | | if (is_wp_error($terms) || empty($terms)) { |
| | | return $taxonomy === BASE . 'style' ? 'custom' : 'tattoo'; |
| | | } |
| | | return $terms[0]; |
| | | } |
| | | |
| | | /** |
| | | * Get partner type (placeholder - implement based on your edmonton.ink logic) |
| | | * This function was referenced in the original but not provided |
| | | */ |
| | | function ajv_partner_type($post_id) |
| | | { |
| | | // Implement based on your edmonton.ink logic |
| | | // This might look at a taxonomy or meta field |
| | | $terms = wp_get_post_terms($post_id, BASE . 'partner_type', array('fields' => 'names')); |
| | | if (is_wp_error($terms) || empty($terms)) { |
| | | return 'service'; |
| | | } |
| | | return $terms[0]; |
| | | } |
| | | |
| | | /** |
| | | * Optional: Add action to schedule cleanup (from original code) |
| | | * Uncomment if you want the original cleanup functionality |
| | | */ |
| | | /* |
| | | add_action('init', function() { |
| | | if (!wp_next_scheduled('jvb_cleanup_original_uploads')) { |
| | | wp_schedule_event(time(), 'daily', 'jvb_cleanup_original_uploads'); |
| | | } |
| | | }); |
| | | |
| | | add_action('jvb_cleanup_original_uploads', function() { |
| | | // You could instantiate your upload manager here and call cleanup |
| | | // Or implement the cleanup logic directly |
| | | }); |
| | | */ |
| New file |
| | |
| | | <?php |
| | | |
| | | /************************************************************* |
| | | * |
| | | * Filters the forms for the form block |
| | | * Must contain an array with: |
| | | * 'title' => {string} optional |
| | | * 'description => {array} of strings, each entry becoming its own <p></p> |
| | | * 'submit' => {string} submit button text |
| | | * 'success_title' => {string} a custom heading for the success message |
| | | * 'success_message'=> {array} of strings, each entry becoming its own <p></p> |
| | | * 'email_subject' => {string} subject for admin's email |
| | | * 'fields' => {array} as per MetaManager.php |
| | | * 'sections' => {array} optional array of sections, as per MetaManager.php, for a tabbed form |
| | | * |
| | | ************************************************************/ |
| | | |
| | | require(AMI_DIR . '/forms/contact.php'); |
| | | |
| | | add_filter('jvb_register_forms', 'ami_register_forms'); |
| | | |
| | | function ami_register_forms($forms) { |
| | | $forms['contact'] = ami_contact(); |
| | | return $forms; |
| | | } |
| New file |
| | |
| | | <?php |
| | | |
| | | function ami_contact():array |
| | | { |
| | | return [ |
| | | 'title' => 'Contact', |
| | | 'description' => [ |
| | | 'You can always text, call, or email.', |
| | | 'Or you can fill out this form and we\'ll get back to you as soon as we can.', |
| | | ], |
| | | 'submit' => 'Contact', |
| | | 'success_title' => 'Success!', |
| | | 'success_description' => [ |
| | | 'We got it.', |
| | | 'We\'ll get back to you as soon as we can - usually pretty quick (unless it\'s a Monday or a Tuesday)' |
| | | ], |
| | | 'email_subject' => '[CONTACT]', |
| | | 'fields' => [ |
| | | 'first_name' => [ |
| | | 'type' => 'text', |
| | | 'label' => 'First Name', |
| | | 'autocomplete' => 'given-name', |
| | | 'required' => true, |
| | | 'section' => 'about_you', |
| | | ], |
| | | 'last_name' => [ |
| | | 'type' => 'text', |
| | | 'label' => 'Last Name', |
| | | 'required' => true, |
| | | 'autocomplete'=> 'family-name', |
| | | 'section' => 'about_you', |
| | | ], |
| | | 'email' => [ |
| | | 'type' => 'email', |
| | | 'label' => 'Email', |
| | | 'autocomplete' => 'email', |
| | | 'required' => true, |
| | | 'section' => 'about_you', |
| | | ], |
| | | 'phone' => [ |
| | | 'type' => 'tel', |
| | | 'label' => 'Phone', |
| | | 'required' => true, |
| | | 'autocomplete' => 'tel', |
| | | 'section' => 'about_you', |
| | | ], |
| | | 'contact' => [ |
| | | 'type' => 'checkbox', |
| | | 'label' => 'Preferred Contact', |
| | | 'options' => [ |
| | | 'text' => 'Text', |
| | | 'email' => 'Email', |
| | | 'call' => 'Call', |
| | | ], |
| | | 'section' => 'about_you', |
| | | ], |
| | | 'type' => [ |
| | | 'type' => 'radio', |
| | | 'label' => 'Nature of your Inquiry', |
| | | 'options' => [ |
| | | 'residential' => 'Residential', |
| | | 'business' => 'Business', |
| | | ] |
| | | ], |
| | | 'subtype' => [ |
| | | 'type' => 'radio', |
| | | 'label' => 'Type of Inquiry', |
| | | 'options' => [ |
| | | 'sales' => 'Sales', |
| | | 'repairs' => 'Repairs', |
| | | 'protection' => 'Protection Plan', |
| | | ] |
| | | ], |
| | | 'message' => [ |
| | | 'type' => 'textarea', |
| | | 'label' => 'How can I help?', |
| | | 'hint' => 'Include general information about your idea, as well as details such as timeline, budget, location - the more the better!' |
| | | ] |
| | | ] |
| | | ]; |
| | | } |
| New file |
| | |
| | | <?php |
| | | // /login/setup.php |
| | | add_filter('jvb_login', 'ami_setup_login'); |
| | | function ami_setup_login():array |
| | | { |
| | | return [ |
| | | 'login_header' => 'Log in', |
| | | 'join_header' => 'Join in', |
| | | ]; |
| | | } |
| New file |
| | |
| | | <?php |
| | | add_filter('ami_OrganizationSchemaDefault', 'ami_organization_schema'); |
| | | |
| | | function ami_organization_schema(array $schema):array |
| | | { |
| | | return array_merge($schema, [ |
| | | 'id' => '#martian-infotech', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\LocalBusiness', |
| | | 'name' => 'Martian Infotech', |
| | | 'url' => get_home_url(), |
| | | 'description' => 'Onsite and virtual tech support for residential and small business in Kamloops and throughout BC and Alberta.', |
| | | 'slogan' => 'Out of This World Technology. Down to Earth Support.', |
| | | 'logo' => get_theme_mod('custom_logo'), |
| | | 'foundingDate' => '2020-11-10', |
| | | |
| | | 'founder' => [ |
| | | [ |
| | | 'id' => '#myron-lewitski', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Person\Person', |
| | | 'name' => 'Myron Lewitski', |
| | | 'url' => 'https://martianit.ca'], |
| | | ], |
| | | |
| | | 'sameAs' => [ |
| | | 'https://www.instagram.com/martianinfotech/', |
| | | 'https://www.facebook.com/MartianIT/', |
| | | 'https://www.twitter.com/martianinfotech', |
| | | 'https://ca.linkedin.com/in/mlewitski' |
| | | ], |
| | | |
| | | // Contact |
| | | 'telephone' => '+1-780-800-8354', |
| | | 'email' => 'myron@martianit.ca', |
| | | |
| | | // Address - note the key names |
| | | 'address' => [ |
| | | // 'street' => '6551 111 St NW', // was 'street_address' |
| | | 'addressLocality' => 'Kamloops', // was 'locality' |
| | | 'addressRegion' => 'BC', // was 'region' |
| | | // 'postal_code' => 'T6H 4R5', |
| | | 'addressCountry' => 'CA', |
| | | ], |
| | | |
| | | // Geo - note the key names |
| | | 'geo' => [ |
| | | 'latitude' => '50.6890639', |
| | | 'longitude' => '-120.3528468', |
| | | ], |
| | | |
| | | // Business details |
| | | 'priceRange' => '$$', |
| | | 'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'], |
| | | 'currenciesAccepted' => ['CAD'], |
| | | 'areaServed' => [ |
| | | [ |
| | | 'id' => '#kelowna', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Kelowna', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Kelowna' |
| | | ], |
| | | [ |
| | | 'id' => '#barriere', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Barriere', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Barriere,_British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#chase', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Chase', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Chase,_British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#savona', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Savona', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Savona,_British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#cache-creek', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Savona', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Cache_Creek,_British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#ashcroft', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Ashcroft', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Ashcroft,_British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#merritt', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Merritt', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Merritt,_British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#logan-lake', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Logan Lake', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Logan_Lake' |
| | | ], |
| | | [ |
| | | 'id' => '#cherry-creek', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Cherry Creek', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Cherry_Creek_(British_Columbia)' |
| | | ], |
| | | [ |
| | | 'id' => '#pinantan', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Pinantan', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Pinantan_Lake' |
| | | ], |
| | | [ |
| | | 'id' => '#monte-creek', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Monte Creek', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Monte_Creek' |
| | | ], |
| | | [ |
| | | 'id' => '#rayleigh', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Rayleigh', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Rayleigh,_Kamloops' |
| | | ], |
| | | [ |
| | | 'id' => '#clearwater', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Clearwater', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Clearwater,_British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#sicamous', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Sicamous', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Sicamous' |
| | | ], |
| | | [ |
| | | 'id' => '#salmon-arm', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\City', |
| | | 'name' => 'Salmon Arm', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Salmon_Arm' |
| | | ], |
| | | [ |
| | | 'id' => '#british-columbia', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\State', |
| | | 'name' => 'British Columbia', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/British_Columbia' |
| | | ], |
| | | [ |
| | | 'id' => '#alberta', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\State', |
| | | 'name' => 'Alberta', |
| | | 'sameAs' => 'https://en.wikipedia.org/wiki/Alberta' |
| | | ], |
| | | |
| | | ], |
| | | |
| | | // Hours - note the key names |
| | | 'openingHoursSpecification' => [ |
| | | [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\StructuredValue\OpeningHoursSpecification', |
| | | 'dayOfWeek' => ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday','Sunday'], |
| | | 'opens' => '9:00', |
| | | 'closes' => '15:00' |
| | | ] |
| | | ], |
| | | |
| | | // Services as offer catalog |
| | | 'hasOfferCatalog' => [ |
| | | 'name' => 'Our Products & Services', |
| | | 'items' => [ |
| | | [ |
| | | 'id' => '#remote-tech-support', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-remote-tech-support', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Remote Tech Support', |
| | | 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#onsite-tech-support', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-onsite-tech-support', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Onsite Tech Support', |
| | | 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#windows-10-upgrades', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-windows-10-upgrades', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Windows 10 Upgrades', |
| | | // 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#windows-11-upgrades', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-windows-11-upgrades', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Windows 11 Upgrades', |
| | | // 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#mac-os-upgrades', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-mac-os-upgrades', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Mac OS Upgrades', |
| | | // 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#virus-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-virus-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Virus Removal', |
| | | // 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#malware-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-malware-removal', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Malware Removal', |
| | | // 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#data-recovery', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-data-recovery', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Data Recovery', |
| | | 'description' => 'Recover data from your failed hard drive, USB, or memory cards.', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#internet-network-support', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#service-internet-network-support', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service', |
| | | 'name' => 'Internet & Network Support', |
| | | 'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#new-refurbished-desktop-pc', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#product-new-refurbished-desktop-pc', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Product\Product', |
| | | 'name' => 'New & Off Lease or Refurbished PC Desktop Computers', |
| | | // 'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#new-refurbished-pc-laptops', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#product-new-refurbished-pc-laptops', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Product\Product', |
| | | 'name' => 'New & Off Lease or Refurbished PC Laptops', |
| | | // 'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#new-refurbished-mac-desktop', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#product-new-refurbished-mac-desktop', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Product\Product', |
| | | 'name' => 'New & Off Lease or Refurbished Mac Desktop Computers', |
| | | // 'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#new-refurbished-mac-laptops', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#product-new-refurbished-mac-laptops', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Product\Product', |
| | | 'name' => 'New & Off Lease or Refurbished Mac Laptops', |
| | | // 'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.', |
| | | ], |
| | | ], |
| | | [ |
| | | 'id' => '#network-wifi-equipment', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Offer', |
| | | // 'price' => '200', |
| | | 'priceCurrency' => 'CAD', |
| | | // 'priceSpecification' => [ |
| | | // 'type' => 'JVBase\inc\managers\SEO\render\Thing\Intangible\StructuredValue\UnitPriceSpecification', |
| | | // 'price' => '200', |
| | | // 'priceCurrency' => 'CAD', |
| | | // 'unitText' => 'treatment' |
| | | // ], |
| | | 'itemOffered' => [ |
| | | 'id' => '#product-network-wifi-equipment', |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\Product\Product', |
| | | 'name' => 'Network & WiFi Equipment', |
| | | // 'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.', |
| | | ], |
| | | ], |
| | | |
| | | ] |
| | | ], |
| | | |
| | | // 'aggregateRating' => [ |
| | | // 'ratingValue' => 5, |
| | | // 'reviewCount' => 109, |
| | | // 'bestRating' => 5, |
| | | // 'worstRating' => 1, |
| | | // ], |
| | | ]); |
| | | } |
| | | |
| | | add_filter('ami_WebsiteSchemaDefault', 'ami_website_schema'); |
| | | function ami_website_schema(array $schema):array |
| | | { |
| | | return array_merge( |
| | | $schema, |
| | | [ |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\CreativeWork\WebSite', |
| | | 'name' => 'Martian Infotech', |
| | | 'description' => 'Out of This World Technology. Down to Earth Support.', |
| | | 'inLanguage' => 'en-CA', |
| | | 'potentialAction' => [ |
| | | [ |
| | | 'id' => '#contact', |
| | | 'type' => 'JVBase\inc\managers\SEO\render\Thing\Action\CommunicateAction', |
| | | 'name' => 'Contact Us', |
| | | 'target' => '/contact/', |
| | | 'description' => 'Get in touch with our team', |
| | | ], |
| | | ], |
| | | ], |
| | | ); |
| | | } |
| | | // |
| | | //add_filter('jvb_schema', function($schema) { |
| | | // return array_merge($schema, [ |
| | | // 'organization' => [ |
| | | // 'type' => 'LocalBusiness', |
| | | // 'name' => 'Martian Infotech', |
| | | // 'url' => get_home_url(), |
| | | // 'description' => 'Onsite and virtual tech support for residential and small business in Kamloops and throughout BC and Alberta.', |
| | | // 'slogan' => 'Out of This World Technology. Down to Earth Support.', |
| | | // 'logo' => get_theme_mod('custom_logo'), |
| | | // 'foundingDate' => '2020-11-10', |
| | | // |
| | | // 'founders' => [ |
| | | // ['name' => 'Myron Lewitski', 'url' => 'https://martianit.ca'], |
| | | // ], |
| | | // |
| | | // 'sameAs' => [ |
| | | // [ 'url' => 'https://www.facebook.com/MartianIT/'], |
| | | // [ 'url' => 'https://twitter.com/martianinfotech'], |
| | | // [ 'url' => 'https://www.linkedin.com/in/mlewitski/'], |
| | | // [ 'url' => 'https://www.instagram.com/martianinfotech/'], |
| | | // ], |
| | | // |
| | | // // Contact |
| | | // 'telephone' => '+1-780-800-8354', |
| | | // 'email' => 'myron@martianit.ca', |
| | | // |
| | | // // Address - note the key names |
| | | // 'address' => [ |
| | | //// 'street' => '6551 111 St NW', // was 'street_address' |
| | | // 'city' => 'Kamloops', // was 'locality' |
| | | // 'province' => 'BC', // was 'region' |
| | | //// 'postal_code' => 'T6H 4R5', |
| | | // 'country' => 'CA', |
| | | // ], |
| | | // |
| | | // // Geo - note the key names |
| | | // 'geo' => [ |
| | | // 'lat' => '50.6890639', // was 'latitude' |
| | | // 'lng' => '-120.3528468', // was 'longitude' |
| | | // ], |
| | | // |
| | | // // Business details |
| | | // 'priceRange' => '$$', |
| | | // 'paymentAccepted' => ['Cash', 'Credit Card', 'Debit Card', 'E-Transfer'], |
| | | // 'currenciesAccepted' => ['CAD'], |
| | | // 'areaServed' => [ |
| | | // ['name' => 'Kelowna'], |
| | | // ['name' => 'Barriere'], |
| | | // ['name' => 'Chase'], |
| | | // ['name' => 'Savona'], |
| | | // ['name' => 'Cache Creek'], |
| | | // ['name' => 'Ashcroft'], |
| | | // ['name' => 'Merritt'], |
| | | // ['name' => 'Logan Lake'], |
| | | // ['name' => 'Cherry Creek'], |
| | | // ['name' => 'Paul Lake'], |
| | | // ['name' => 'Pinantan'], |
| | | // ['name' => 'Monte Creek'], |
| | | // ['name' => 'Rayleigh'], |
| | | // ['name' => 'Clearwater'], |
| | | // ['name' => 'Sicamous'], |
| | | // ['name' => 'Salmon Arm'], |
| | | // ['name' => 'British Columbia'], |
| | | // ['name' => 'Alberta'], |
| | | // ], |
| | | // |
| | | // // Hours - note the key names |
| | | // 'openingHours' => [ |
| | | // 'monday' => ['opens' => '9:00', 'closes' => '17:00'], |
| | | // 'tuesday' => ['opens' => '9:00', 'closes' => '17:00'], |
| | | // 'wednesday' => ['opens' => '9:00', 'closes' => '17:00'], |
| | | // 'thursday' => ['opens' => '9:00', 'closes' => '17:00'], |
| | | // 'friday' => ['opens' => '9:00', 'closes' => '17:00'], |
| | | // 'saturday' => ['opens' => '9:00', 'closes' => '17:00'], |
| | | // 'sunday' => ['opens' => '9:00', 'closes' => '17:00'], |
| | | // ], |
| | | // |
| | | // // Services as offer catalog |
| | | // 'hasOfferCatalog' => [ |
| | | // 'source' => 'manual', |
| | | // 'manual_items' => [ |
| | | // [ |
| | | // 'type' => 'Product', |
| | | // 'name' => 'New & Off Lease or Refurbished PC Desktop Computers', |
| | | //// 'description' => '', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Product', |
| | | // 'name' => 'New & Off Lease or Refurbished Mac Desktop Computers', |
| | | //// 'description' => '', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Product', |
| | | // 'name' => 'New & Off Lease or Refurbished Mac Laptops', |
| | | //// 'description' => '', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Product', |
| | | // 'name' => 'New & Off Lease or Refurbished PC Laptops', |
| | | //// 'description' => '', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Product', |
| | | // 'name' => 'Network & WiFi Equipment', |
| | | //// 'description' => '', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Remote Tech Support', |
| | | // 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Onsite Tech Support', |
| | | // 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Windows 10 Upgrades', |
| | | //// 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Windows 11 Upgrades', |
| | | //// 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Mac OS Upgrades', |
| | | //// 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Virus Removal', |
| | | //// 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Malware Removal', |
| | | //// 'description' => 'Hardware or Software Diagnostics & Repairs', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Internet & Network Support', |
| | | // 'description' => 'Repair issues with your internet, network, or WiFi connections of all service providers.', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'Service', |
| | | // 'name' => 'Data Recovery', |
| | | // 'description' => 'Recover data from your failed hard drive, USB, or memory cards.', |
| | | // ], |
| | | // ] |
| | | // ], |
| | | // |
| | | // // Rating - note the structure |
| | | //// 'aggregateRating' => [ |
| | | //// 'value' => 5, |
| | | //// 'count' => 103, |
| | | //// 'best' => 5, |
| | | //// 'worst' => 1, |
| | | //// ], |
| | | // ], |
| | | // |
| | | // // Website settings (optional overrides) |
| | | // 'website' => [ |
| | | // 'name' => 'JakeVan', |
| | | // 'description' => 'Out of this world technology. Down to earth support.', |
| | | // 'inLanguage' => 'en-CA', |
| | | // 'potentialAction' => [ |
| | | // [ |
| | | // 'name' => 'Search', |
| | | // 'type' => 'searchAction', |
| | | // 'target' => '/?s={query}', |
| | | // ], |
| | | // [ |
| | | // 'type' => 'communicateAction', |
| | | // 'name' => 'Contact Us', |
| | | // 'target' => '/contact/', |
| | | // 'description' => 'Get in touch with our team', |
| | | // ], |
| | | // ], |
| | | // ], |
| | | // ]); |
| | | //}); |
| File was renamed from taxonomies/setup.php |
| | |
| | | * -> add use_in_stats (bool) to use the field in user statistics |
| | | */ |
| | | |
| | | require(AJV_DIR . '/taxonomies/city.php'); |
| | | require(AJV_DIR . '/taxonomies/form.php'); |
| | | require(AJV_DIR . '/taxonomies/media.php'); |
| | | require(AJV_DIR . '/taxonomies/progress.php'); |
| | | require(AJV_DIR . '/taxonomies/style.php'); |
| | | require(AJV_DIR . '/taxonomies/target.php'); |
| | | require(AJV_DIR . '/taxonomies/theme.php'); |
| | | |
| | | //add_filter('jvb_taxonomy', 'ajv_taxonomy'); |
| | | function ajv_taxonomy():array |
| | | { |
| | | return [ |
| | | 'city' => ajv_city(), |
| | | 'style' => ajv_style(), |
| | | 'theme' => ajv_theme(), |
| | | 'form' => ajv_form(), |
| | | 'medium' => ajv_media(), |
| | | 'target' => ajv_target(), |
| | | 'progress' => ajv_progress(), |
| | | ]; |
| | | } |
| | | require(AMI_DIR . '/taxonomies/product_cat.php'); |
| | | require(AMI_DIR . '/taxonomies/city.php'); |
| | | require(AMI_DIR . '/taxonomies/tags.php'); |
| | | // |
| | | //add_filter('jvb_taxonomy', 'ami_taxonomy'); |
| | | //function ami_taxonomy():array |
| | | //{ |
| | | // return [ |
| | | // 'product_cat' => ami_category(), |
| | | // ]; |
| | | //} |
| | |
| | | <?php |
| | | // /taxonomies/city.php |
| | | function ajv_city():array |
| | | |
| | | |
| | | use JVBase\registrar\Registrar; |
| | | |
| | | add_action('jvbDefineRegistrar', 'ami_city'); |
| | | add_action('jvbDefineRegistrarFields', 'ami_city_fields'); |
| | | |
| | | add_action('plugins_loaded', 'ami_city',1); |
| | | //Add fields later so we can verify taxonomies/post types exist |
| | | add_action('plugins_loaded', 'ami_city_fields', 2); |
| | | |
| | | add_filter('ami_CitySchemaDefault', 'ami_city_schema'); |
| | | add_filter('ami_CityMetaDefault', 'ami_city_meta'); |
| | | add_filter('ami_CityArchiveDefault', 'ami_city_archive'); |
| | | |
| | | function ami_city(){ |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $city = Registrar::forTerm('city', 'City', 'Cities') |
| | | ->setIcon('city') |
| | | ->make([ |
| | | 'rewrite' => [ |
| | | 'slug' => 'in/city', |
| | | 'with_front' => false, |
| | | 'hierarchical' => true, |
| | | ], |
| | | 'for' => [ |
| | | 'product', |
| | | 'service', |
| | | ], |
| | | ]) |
| | | ->setAll([ |
| | | 'show_directory', |
| | | 'show_feed', |
| | | ]); |
| | | |
| | | //$directory = $city->getConfig('directory'); |
| | | |
| | | } |
| | | |
| | | function ami_city_fields():void |
| | | { |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $city = Registrar::getInstance('city'); |
| | | // $breadcrumbs = $city->config('breadcrumbs'); |
| | | |
| | | |
| | | $fields = $city->fields(); |
| | | $fields->addCommon('wiki'); |
| | | } |
| | | |
| | | function ami_city_schema():array |
| | | { |
| | | return [ |
| | | 'singular' => 'City', |
| | | 'plural' => 'Cities', |
| | | 'icon' => 'city', |
| | | 'description' => [ |
| | | 'From Edmonton, yes - but also throughout Alberta.' |
| | | ], |
| | | 'show_feed' => true, |
| | | 'show_directory' => true, |
| | | 'approve_new' => false, |
| | | 'rewrite' => [ |
| | | 'slug' => 'in', |
| | | 'with_front' => false, |
| | | 'hierarchical' => true, |
| | | ], |
| | | 'hierarchical' => true, |
| | | 'for_content' => [ |
| | | 'art', |
| | | 'design', |
| | | 'development', |
| | | 'strategy', |
| | | 'writing', |
| | | ], |
| | | 'fields' => [ |
| | | 'term_name' => [ |
| | | 'label' => 'Name', |
| | | 'type' => 'text', |
| | | 'quickEdit' => true, |
| | | ], |
| | | 'common' => [ 'wiki' ] |
| | | ] |
| | | 'type' => 'JVBase\managers\SEO\render\Thing\City\City', |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_city_meta():array |
| | | { |
| | | return[ |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_city_archive(array $defaults):array |
| | | { |
| | | return array_merge($defaults, [ |
| | | ]); |
| | | } |
| | | |
| | | function ami_city_reference_schema(array $defaults):array |
| | | { |
| | | return $defaults; |
| | | } |
| | | |
| | | // |
| | | //function ami_city():array |
| | | //{ |
| | | // return [ |
| | | // 'singular' => 'City', |
| | | // 'plural' => 'Cities', |
| | | // 'icon' => 'city', |
| | | // 'description' => [ |
| | | // 'From Kamloops, yes - but also throughout Alberta and BC.' |
| | | // ], |
| | | // 'show_feed' => true, |
| | | // 'show_directory' => true, |
| | | // 'rewrite' => [ |
| | | // 'slug' => 'in', |
| | | // 'with_front' => false, |
| | | // 'hierarchical' => true, |
| | | // ], |
| | | // 'hierarchical' => true, |
| | | // 'for_content' => [ |
| | | // 'art', |
| | | // 'design', |
| | | // 'development', |
| | | // 'strategy', |
| | | // 'writing', |
| | | // ], |
| | | // 'fields' => [ |
| | | // 'term_name' => [ |
| | | // 'label' => 'Name', |
| | | // 'type' => 'text', |
| | | // 'quickEdit' => true, |
| | | // ], |
| | | // 'common' => [ 'wiki' ] |
| | | // ] |
| | | // ]; |
| | | //} |
| New file |
| | |
| | | <?php |
| | | // /taxonomies/product_cat.php |
| | | |
| | | |
| | | use JVBase\registrar\Registrar; |
| | | |
| | | add_action('jvbDefineRegistrar', 'ami_product_cat'); |
| | | add_action('jvbDefineRegistrarFields', 'ami_product_cat_fields'); |
| | | |
| | | add_action('plugins_loaded', 'ami_product_cat',1); |
| | | //Add fields later so we can verify taxonomies/post types exist |
| | | add_action('plugins_loaded', 'ami_product_cat_fields', 2); |
| | | |
| | | add_filter('ami_Product_catSchemaDefault', 'ami_product_cat_schema'); |
| | | add_filter('ami_Product_catMetaDefault', 'ami_product_cat_meta'); |
| | | add_filter('ami_Product_catArchiveDefault', 'ami_product_cat_archive'); |
| | | |
| | | function ami_product_cat(){ |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $product_cat = Registrar::forTerm('product_cat', 'Category', 'Categories') |
| | | ->setIcon('folder') |
| | | ->make([ |
| | | 'rewrite' => [ |
| | | 'slug' => 'in/category', |
| | | 'with_front' => false, |
| | | 'hierarchical' => true, |
| | | ], |
| | | 'for' => [ |
| | | 'product', |
| | | 'service', |
| | | ], |
| | | ]) |
| | | ->setAll([ |
| | | 'show_directory', |
| | | 'show_feed', |
| | | ]); |
| | | |
| | | //$directory = $product_cat->getConfig('directory'); |
| | | |
| | | } |
| | | |
| | | function ami_product_cat_fields():void |
| | | { |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $product_cat = Registrar::getInstance('product_cat'); |
| | | // $breadcrumbs = $product_cat->config('breadcrumbs'); |
| | | |
| | | |
| | | $fields = $product_cat->fields(); |
| | | $fields->addCommon('wiki'); |
| | | } |
| | | |
| | | function ami_product_cat_schema():array |
| | | { |
| | | return [ |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_product_cat_meta():array |
| | | { |
| | | return[ |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_product_cat_archive(array $defaults):array |
| | | { |
| | | return array_merge($defaults, [ |
| | | ]); |
| | | } |
| | | |
| | | function ami_product_cat_reference_schema(array $defaults):array |
| | | { |
| | | return $defaults; |
| | | } |
| | | // |
| | | //function ami_category():array |
| | | //{ |
| | | // return [ |
| | | // 'singular' => 'Category', |
| | | // 'plural' => 'Categories', |
| | | // 'icon' => 'folder', |
| | | // 'show_feed' => true, |
| | | // 'show_directory' => true, |
| | | // 'rewrite' => [ |
| | | // 'slug' => 'in', |
| | | // 'with_front' => false, |
| | | // 'hierarchical' => true, |
| | | // ], |
| | | // 'hierarchical' => true, |
| | | // 'for_content' => [ |
| | | // 'product', |
| | | // 'service', |
| | | // ], |
| | | // 'fields' => [ |
| | | // 'term_name' => [ |
| | | // 'label' => 'Name', |
| | | // 'type' => 'text', |
| | | // 'quickEdit' => true, |
| | | // ], |
| | | // 'common' => [ 'wiki' ] |
| | | // ] |
| | | // ]; |
| | | //} |
| New file |
| | |
| | | <?php |
| | | // /taxonomies/tags.php |
| | | |
| | | use JVBase\registrar\Registrar; |
| | | |
| | | add_action('jvbDefineRegistrar', 'ami_tags'); |
| | | add_action('jvbDefineRegistrarFields', 'ami_tags_fields'); |
| | | |
| | | add_action('plugins_loaded', 'ami_tags',1); |
| | | //Add fields later so we can verify taxonomies/post types exist |
| | | add_action('plugins_loaded', 'ami_tags_fields', 2); |
| | | |
| | | add_filter('ami_TagsSchemaDefault', 'ami_tags_schema'); |
| | | add_filter('ami_TagsMetaDefault', 'ami_tags_meta'); |
| | | add_filter('ami_TagsArchiveDefault', 'ami_tags_archive'); |
| | | |
| | | function ami_tags(){ |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $tags = Registrar::forTerm('tags', 'Tag', 'Tags') |
| | | ->setIcon('hash') |
| | | ->make([ |
| | | 'rewrite' => [ |
| | | 'slug' => 'in/tag', |
| | | 'with_front' => false, |
| | | 'hierarchical' => true, |
| | | ], |
| | | 'for' => [ |
| | | 'product', |
| | | 'service', |
| | | ], |
| | | ]) |
| | | ->setAll([ |
| | | 'show_directory', |
| | | 'show_feed', |
| | | ]); |
| | | |
| | | //$directory = $tags->getConfig('directory'); |
| | | |
| | | } |
| | | |
| | | function ami_tags_fields():void |
| | | { |
| | | if (!class_exists('JVBase\registrar\Registrar')) { |
| | | return; |
| | | } |
| | | $tags = Registrar::getInstance('tags'); |
| | | // $breadcrumbs = $tags->config('breadcrumbs'); |
| | | |
| | | |
| | | $fields = $tags->fields(); |
| | | $fields->addCommon('wiki'); |
| | | } |
| | | |
| | | function ami_tags_schema():array |
| | | { |
| | | return [ |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_tags_meta():array |
| | | { |
| | | return[ |
| | | 'name' => '{{post_title}}', |
| | | ]; |
| | | } |
| | | |
| | | function ami_tags_archive(array $defaults):array |
| | | { |
| | | return array_merge($defaults, [ |
| | | ]); |
| | | } |
| | | |
| | | function ami_tags_reference_schema(array $defaults):array |
| | | { |
| | | return $defaults; |
| | | } |
| | | |
| | | //function ami_tags():array |
| | | //{ |
| | | // return [ |
| | | // 'singular' => 'Tag', |
| | | // 'plural' => 'Tags', |
| | | // 'icon' => 'tag', |
| | | // 'description' => [ |
| | | // 'Further descriptors of your products and services. Example: "new", "refurbished",etc' |
| | | // ], |
| | | // 'show_feed' => true, |
| | | // 'show_directory' => true, |
| | | // 'rewrite' => [ |
| | | // 'slug' => 'is', |
| | | // 'with_front' => false, |
| | | // 'hierarchical' => true, |
| | | // ], |
| | | // 'hierarchical' => true, |
| | | // 'for_content' => [ |
| | | // 'product', |
| | | // 'service', |
| | | // ], |
| | | // 'fields' => [ |
| | | // 'term_name' => [ |
| | | // 'label' => 'Name', |
| | | // 'type' => 'text', |
| | | // 'quickEdit' => true, |
| | | // ], |
| | | // 'common' => [ 'wiki' ] |
| | | // ] |
| | | // ]; |
| | | //} |
| | |
| | | <?php |
| | | // /users/client.php |
| | | function ajv_user_client():array |
| | | function ami_user_client():array |
| | | { |
| | | return [ |
| | | 'label' => 'Client', |
| | |
| | | * -> description of the user role. Used in the registration page |
| | | */ |
| | | |
| | | //require(AJV_DIR . '/users/client.php'); |
| | | //require(AJV_DIR . '/users/enthusiast.php'); |
| | | //require(AMI_DIR . '/users/client.php'); |
| | | //require(AMI_DIR . '/users/enthusiast.php'); |
| | | |
| | | //add_filter('jvb_user', 'ajv_user'); |
| | | //add_filter('jvb_user', 'ami_user'); |
| | | // |
| | | //function ajv_user():array |
| | | //function ami_user():array |
| | | //{ |
| | | // return [ |
| | | //// 'enthusiast' => ajv_user_enthusiast(), |
| | | // 'client' => ajv_user_client(), |
| | | //// 'enthusiast' => ami_user_enthusiast(), |
| | | // 'client' => ami_user_client(), |
| | | // ]; |
| | | //} |