This commit is contained in:
2025-05-20 14:15:03 -07:00
parent c074a5ef18
commit edcad561a5
179 changed files with 52733 additions and 4704 deletions

2
.gitignore vendored
View File

@@ -1,3 +1 @@
node_modules/
vendor/
dist/

View File

@@ -0,0 +1,328 @@
{
"key": "group_681154755e23d",
"title": "Site Settings",
"fields": [
{
"key": "field_681154d818817",
"label": "General",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_68115475f02b7",
"label": "Tagline",
"name": "tagline",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_681154e618818",
"label": "Footer Address",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_68115485f02b8",
"label": "Address",
"name": "address",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_68115496f02b9",
"label": "City",
"name": "city",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6811549cf02ba",
"label": "State",
"name": "state",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_681154ef18819",
"label": "Contact",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_681154a3f02bb",
"label": "Contact Email",
"name": "contact_email",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_681154adf02bc",
"label": "Contact Phone",
"name": "contact_phone",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_681154f41881a",
"label": "Social Media",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_682519ed2e995",
"label": "Facebook URL",
"name": "facebook_url",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_682519f52e996",
"label": "Twitter URL",
"name": "twitter_url",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_682519ff2e997",
"label": "LinkedIn URL",
"name": "linkedin_url",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_68251a0e2e998",
"label": "YouTube URL",
"name": "youtube_url",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_68251a212e999",
"label": "Instagram URL",
"name": "instagram_url",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
}
],
"location": [
[
{
"param": "options_page",
"operator": "==",
"value": "site_options"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": "",
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1747261994
}

View File

@@ -0,0 +1,581 @@
{
"key": "group_6824d74596f5f",
"title": "Flex Content Items",
"fields": [
{
"key": "field_6824d745f276f",
"label": "Content",
"name": "content",
"aria-label": "",
"type": "flexible_content",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"layouts": {
"layout_6824d7542753b": {
"key": "layout_6824d7542753b",
"name": "background_image_cta",
"label": "Background Image CTA",
"display": "block",
"sub_fields": [
{
"key": "field_6824d79bf2775",
"label": "Content",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_6824d76af2770",
"label": "Headline",
"name": "headline",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6824d775f2771",
"label": "Description",
"name": "description",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6824d780f2772",
"label": "Button Text",
"name": "button_text",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6824d786f2773",
"label": "Button Target",
"name": "button_target",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6824d78df2774",
"label": "Background Image",
"name": "background_image",
"aria-label": "",
"type": "image",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"return_format": "url",
"library": "all",
"min_width": "",
"min_height": "",
"min_size": "",
"max_width": "",
"max_height": "",
"max_size": "",
"mime_types": "",
"allow_in_bindings": 0,
"preview_size": "medium"
},
{
"key": "field_6824d7a6f2776",
"label": "Configuration",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_6824d7b2f2777",
"label": "Tag Type",
"name": "tag_type",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 1,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"choices": {
"h1": "H1",
"h2": "H2",
"h3": "H3"
},
"default_value": "h1",
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 0,
"ui": 0,
"ajax": 0,
"placeholder": "",
"create_options": 0,
"save_options": 0
},
{
"key": "field_6824d874f2778",
"label": "Overlay Color",
"name": "overlay_color",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"choices": {
"White": "White",
"Black": "Black"
},
"default_value": false,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 0,
"ui": 0,
"ajax": 0,
"placeholder": "",
"create_options": 0,
"save_options": 0
}
],
"min": "",
"max": ""
},
"layout_6824ded287362": {
"key": "layout_6824ded287362",
"name": "plain_text",
"label": "Plain Text",
"display": "block",
"sub_fields": [
{
"key": "field_6824ded287363",
"label": "Content",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_6824ded287364",
"label": "Headline",
"name": "headline",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6824ded287365",
"label": "Description",
"name": "description",
"aria-label": "",
"type": "wysiwyg",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"allow_in_bindings": 1,
"tabs": "all",
"toolbar": "full",
"media_upload": 1,
"delay": 0
},
{
"key": "field_6824ded287369",
"label": "Configuration",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0,
"selected": 0
},
{
"key": "field_6824ded28736a",
"label": "Tag Type",
"name": "tag_type",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 1,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"choices": {
"h1": "H1",
"h2": "H2",
"h3": "H3"
},
"default_value": "h1",
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 0,
"ui": 0,
"ajax": 0,
"placeholder": "",
"create_options": 0,
"save_options": 0
}
],
"min": "",
"max": ""
},
"layout_6824e05313d93": {
"key": "layout_6824e05313d93",
"name": "block_links",
"label": "Block Links",
"display": "block",
"sub_fields": [
{
"key": "field_6824e06c13d95",
"label": "Block",
"name": "block",
"aria-label": "",
"type": "repeater",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"layout": "table",
"min": 0,
"max": 0,
"collapsed": "",
"button_label": "Add Row",
"rows_per_page": 20,
"sub_fields": [
{
"key": "field_6824e07913d96",
"label": "Target",
"name": "target",
"aria-label": "",
"type": "post_object",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"post_type": "",
"post_status": "",
"taxonomy": "",
"return_format": "object",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 0,
"bidirectional": 0,
"ui": 1,
"bidirectional_target": [],
"parent_repeater": "field_6824e06c13d95"
}
]
}
],
"min": "",
"max": ""
},
"layout_6824f3d3eb907": {
"key": "layout_6824f3d3eb907",
"name": "logo_slider",
"label": "Logo Slider",
"display": "block",
"sub_fields": [
{
"key": "field_6824f3dceb90d",
"label": "Logos",
"name": "logos",
"aria-label": "",
"type": "repeater",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"layout": "table",
"min": 0,
"max": 0,
"collapsed": "",
"button_label": "Add Logo",
"rows_per_page": 20,
"sub_fields": [
{
"key": "field_6824f3e7eb90e",
"label": "Logo",
"name": "logo",
"aria-label": "",
"type": "image",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"return_format": "array",
"library": "all",
"min_width": "",
"min_height": "",
"min_size": "",
"max_width": "",
"max_height": "",
"max_size": "",
"mime_types": "",
"allow_in_bindings": 0,
"preview_size": "medium",
"parent_repeater": "field_6824f3dceb90d"
}
]
}
],
"min": "",
"max": ""
},
"layout_68277c371ca0c": {
"key": "layout_68277c371ca0c",
"name": "testimonials",
"label": "Testimonials",
"display": "block",
"sub_fields": [
{
"key": "field_68277c3e1ca0e",
"label": "Headline",
"name": "headline",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_68277c511ca0f",
"label": "Testimonials",
"name": "testimonials",
"aria-label": "",
"type": "repeater",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"layout": "table",
"min": 0,
"max": 0,
"collapsed": "",
"button_label": "Add Row",
"rows_per_page": 20,
"sub_fields": [
{
"key": "field_68277c681ca10",
"label": "Testimonial",
"name": "testimonial",
"aria-label": "",
"type": "post_object",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"post_type": [
"testimonial"
],
"post_status": "",
"taxonomy": "",
"return_format": "object",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 0,
"bidirectional": 0,
"ui": 1,
"bidirectional_target": [],
"parent_repeater": "field_68277c511ca0f"
}
]
}
],
"min": "",
"max": ""
}
},
"min": "",
"max": "",
"button_label": "Add Row"
}
],
"location": [
[
{
"param": "page_template",
"operator": "==",
"value": "tpl-flex.php"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": [
"the_content"
],
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1747418238
}

View File

@@ -0,0 +1,101 @@
{
"key": "group_682777331a711",
"title": "Testimonial Fields",
"fields": [
{
"key": "field_6827773326bd6",
"label": "Position",
"name": "position",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827779b26bd7",
"label": "Quote",
"name": "quote",
"aria-label": "",
"type": "textarea",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"rows": "",
"placeholder": "",
"new_lines": ""
},
{
"key": "field_682777b526bd8",
"label": "Rating",
"name": "rating",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"choices": {
"5": "5",
"4": "4",
"3": "3",
"2": "2",
"1": "1"
},
"default_value": 5,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 0,
"ui": 0,
"ajax": 0,
"placeholder": "",
"create_options": 0,
"save_options": 0
}
],
"location": [
[
{
"param": "post_type",
"operator": "==",
"value": "testimonial"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": [
"the_content"
],
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1747417078
}

View File

@@ -0,0 +1,93 @@
{
"key": "group_68279f15907f1",
"title": "Locations Settings",
"fields": [
{
"key": "field_68279f150b6ea",
"label": "Top Image",
"name": "locations_top_image",
"aria-label": "",
"type": "image",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"return_format": "url",
"library": "all",
"min_width": "",
"min_height": "",
"min_size": "",
"max_width": "",
"max_height": "",
"max_size": "",
"mime_types": "",
"allow_in_bindings": 0,
"preview_size": "medium"
},
{
"key": "field_68279f3a0b6eb",
"label": "Headline",
"name": "locations_headline",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_68279f440b6ec",
"label": "Intro Text",
"name": "locations_intro_text",
"aria-label": "",
"type": "textarea",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"rows": "",
"placeholder": "",
"new_lines": "br"
}
],
"location": [
[
{
"param": "options_page",
"operator": "==",
"value": "locations_landing_page"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": "",
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1747427158
}

View File

@@ -0,0 +1,237 @@
{
"key": "group_6827a1d4cc554",
"title": "Location Fields",
"fields": [
{
"key": "field_6827a1d5e73bb",
"label": "Intro",
"name": "intro",
"aria-label": "",
"type": "textarea",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"rows": "",
"placeholder": "",
"new_lines": "br"
},
{
"key": "field_6827a221e73bc",
"label": "Address 1",
"name": "address_1",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827a228e73bd",
"label": "Address 2",
"name": "address_2",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827a4199d542",
"label": "City",
"name": "city",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827a233e73bf",
"label": "State",
"name": "state",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827a23fe73c0",
"label": "Zip",
"name": "zip",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827a244e73c1",
"label": "Phone",
"name": "phone",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827a24ce73c2",
"label": "Hours",
"name": "hours",
"aria-label": "",
"type": "textarea",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"rows": "",
"placeholder": "",
"new_lines": "br"
},
{
"key": "field_6827a25ae73c3",
"label": "Latitude",
"name": "latitude",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_6827a261e73c4",
"label": "Longitude",
"name": "longitude",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
}
],
"location": [
[
{
"param": "post_type",
"operator": "==",
"value": "location"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": [
"the_content"
],
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1747434256
}

View File

@@ -0,0 +1,95 @@
{
"key": "group_682b909552599",
"title": "Shop Landing Page Fields",
"fields": [
{
"key": "field_682b9095f94b9",
"label": "Headline",
"name": "headline",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_682b922499813",
"label": "Intro Text",
"name": "intro_text",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 0,
"placeholder": "",
"prepend": "",
"append": ""
},
{
"key": "field_682b923599814",
"label": "Background Image",
"name": "background_image",
"aria-label": "",
"type": "image",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"return_format": "url",
"library": "all",
"min_width": "",
"min_height": "",
"min_size": "",
"max_width": "",
"max_height": "",
"max_size": "",
"mime_types": "",
"allow_in_bindings": 0,
"preview_size": "medium"
}
],
"location": [
[
{
"param": "page",
"operator": "==",
"value": "70"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": [
"the_content"
],
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1747688097
}

22
archive-location.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
get_header();
echo site()->render("locations", [
"top_image" => get_field("locations_top_image", "options"),
"headline" => get_field("locations_headline", "options"),
"intro" => get_field("locations_intro_text", "options"),
"locations" => site()->getDefaultPosts([
"title",
"latitude",
"longitude",
"address_1",
"city",
"state",
"zip",
"phone",
"url",
])
]);
get_footer();

3
archive-testimonial.php Normal file
View File

@@ -0,0 +1,3 @@
<?php
header("Location: /");

4
assets/cart-plus.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-cart-plus" viewBox="0 0 16 16">
<path d="M9 5.5a.5.5 0 0 0-1 0V7H6.5a.5.5 0 0 0 0 1H8v1.5a.5.5 0 0 0 1 0V8h1.5a.5.5 0 0 0 0-1H9z"/>
<path d="M.5 1a.5.5 0 0 0 0 1h1.11l.401 1.607 1.498 7.985A.5.5 0 0 0 4 12h1a2 2 0 1 0 0 4 2 2 0 0 0 0-4h7a2 2 0 1 0 0 4 2 2 0 0 0 0-4h1a.5.5 0 0 0 .491-.408l1.5-8A.5.5 0 0 0 14.5 3H2.89l-.405-1.621A.5.5 0 0 0 2 1zm3.915 10L3.102 4h10.796l-1.313 7zM6 14a1 1 0 1 1-2 0 1 1 0 0 1 2 0m7 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0"/>
</svg>

After

Width:  |  Height:  |  Size: 554 B

3
assets/chevron-down.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-down" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708"/>
</svg>

After

Width:  |  Height:  |  Size: 289 B

3
assets/chevron-left.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0"/>
</svg>

After

Width:  |  Height:  |  Size: 288 B

3
assets/chevron-right.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708"/>
</svg>

After

Width:  |  Height:  |  Size: 290 B

3
assets/facebook.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-facebook" viewBox="0 0 16 16">
<path d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951"/>
</svg>

After

Width:  |  Height:  |  Size: 435 B

3
assets/instagram.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-instagram" viewBox="0 0 16 16">
<path d="M8 0C5.829 0 5.556.01 4.703.048 3.85.088 3.269.222 2.76.42a3.9 3.9 0 0 0-1.417.923A3.9 3.9 0 0 0 .42 2.76C.222 3.268.087 3.85.048 4.7.01 5.555 0 5.827 0 8.001c0 2.172.01 2.444.048 3.297.04.852.174 1.433.372 1.942.205.526.478.972.923 1.417.444.445.89.719 1.416.923.51.198 1.09.333 1.942.372C5.555 15.99 5.827 16 8 16s2.444-.01 3.298-.048c.851-.04 1.434-.174 1.943-.372a3.9 3.9 0 0 0 1.416-.923c.445-.445.718-.891.923-1.417.197-.509.332-1.09.372-1.942C15.99 10.445 16 10.173 16 8s-.01-2.445-.048-3.299c-.04-.851-.175-1.433-.372-1.941a3.9 3.9 0 0 0-.923-1.417A3.9 3.9 0 0 0 13.24.42c-.51-.198-1.092-.333-1.943-.372C10.443.01 10.172 0 7.998 0zm-.717 1.442h.718c2.136 0 2.389.007 3.232.046.78.035 1.204.166 1.486.275.373.145.64.319.92.599s.453.546.598.92c.11.281.24.705.275 1.485.039.843.047 1.096.047 3.231s-.008 2.389-.047 3.232c-.035.78-.166 1.203-.275 1.485a2.5 2.5 0 0 1-.599.919c-.28.28-.546.453-.92.598-.28.11-.704.24-1.485.276-.843.038-1.096.047-3.232.047s-2.39-.009-3.233-.047c-.78-.036-1.203-.166-1.485-.276a2.5 2.5 0 0 1-.92-.598 2.5 2.5 0 0 1-.6-.92c-.109-.281-.24-.705-.275-1.485-.038-.843-.046-1.096-.046-3.233s.008-2.388.046-3.231c.036-.78.166-1.204.276-1.486.145-.373.319-.64.599-.92s.546-.453.92-.598c.282-.11.705-.24 1.485-.276.738-.034 1.024-.044 2.515-.045zm4.988 1.328a.96.96 0 1 0 0 1.92.96.96 0 0 0 0-1.92m-4.27 1.122a4.109 4.109 0 1 0 0 8.217 4.109 4.109 0 0 0 0-8.217m0 1.441a2.667 2.667 0 1 1 0 5.334 2.667 2.667 0 0 1 0-5.334"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
assets/lady-face.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

3
assets/linkedin.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-linkedin" viewBox="0 0 16 16">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854zm4.943 12.248V6.169H2.542v7.225zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248S2.4 3.226 2.4 3.934c0 .694.521 1.248 1.327 1.248zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016l.016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225z"/>
</svg>

After

Width:  |  Height:  |  Size: 666 B

3
assets/list.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5"/>
</svg>

After

Width:  |  Height:  |  Size: 341 B

BIN
assets/main-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
assets/map-marker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

4
assets/person-circle.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-circle" viewBox="0 0 16 16">
<path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0"/>
<path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8m8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1"/>
</svg>

After

Width:  |  Height:  |  Size: 345 B

3
assets/search.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-search" viewBox="0 0 16 16">
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0"/>
</svg>

After

Width:  |  Height:  |  Size: 315 B

3
assets/star.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg width="34" height="30" viewBox="0 0 34 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.0833 23.8048L27.3833 29.5217L24.65 18.7469L33.75 11.4973L21.7666 10.5624L17.0833 0.400635L12.4 10.5624L0.416626 11.4973L9.51663 18.7469L6.78329 29.5217L17.0833 23.8048Z" fill="#FFB109"/>
</svg>

After

Width:  |  Height:  |  Size: 303 B

7
assets/stars.svg Normal file
View File

@@ -0,0 +1,7 @@
<svg width="217" height="38" viewBox="0 0 217 38" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.0833 27.8048L30.3833 33.5217L27.65 22.7469L36.75 15.4973L24.7666 14.5624L20.0833 4.40063L15.4 14.5624L3.41663 15.4973L12.5166 22.7469L9.78329 33.5217L20.0833 27.8048Z" fill="#FFB109"/>
<path d="M64.0833 27.8048L74.3833 33.5217L71.65 22.7469L80.75 15.4973L68.7666 14.5624L64.0833 4.40063L59.4 14.5624L47.4166 15.4973L56.5166 22.7469L53.7833 33.5217L64.0833 27.8048Z" fill="#FFB109"/>
<path d="M108.083 27.8048L118.383 33.5217L115.65 22.7469L124.75 15.4973L112.767 14.5624L108.083 4.40063L103.4 14.5624L91.4166 15.4973L100.517 22.7469L97.7833 33.5217L108.083 27.8048Z" fill="#FFB109"/>
<path d="M152.083 27.8048L162.383 33.5217L159.65 22.7469L168.75 15.4973L156.767 14.5624L152.083 4.40063L147.4 14.5624L135.417 15.4973L144.517 22.7469L141.783 33.5217L152.083 27.8048Z" fill="#FFB109"/>
<path d="M196.083 27.8048L206.383 33.5217L203.65 22.7469L212.75 15.4973L200.767 14.5624L196.083 4.40063L191.4 14.5624L179.417 15.4973L188.517 22.7469L185.783 33.5217L196.083 27.8048Z" fill="#FFB109"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

3
assets/telephone.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-telephone" viewBox="0 0 16 16">
<path d="M3.654 1.328a.678.678 0 0 0-1.015-.063L1.605 2.3c-.483.484-.661 1.169-.45 1.77a17.6 17.6 0 0 0 4.168 6.608 17.6 17.6 0 0 0 6.608 4.168c.601.211 1.286.033 1.77-.45l1.034-1.034a.678.678 0 0 0-.063-1.015l-2.307-1.794a.68.68 0 0 0-.58-.122l-2.19.547a1.75 1.75 0 0 1-1.657-.459L5.482 8.062a1.75 1.75 0 0 1-.46-1.657l.548-2.19a.68.68 0 0 0-.122-.58zM1.884.511a1.745 1.745 0 0 1 2.612.163L6.29 2.98c.329.423.445.974.315 1.494l-.547 2.19a.68.68 0 0 0 .178.643l2.457 2.457a.68.68 0 0 0 .644.178l2.189-.547a1.75 1.75 0 0 1 1.494.315l2.306 1.794c.829.645.905 1.87.163 2.611l-1.034 1.034c-.74.74-1.846 1.065-2.877.702a18.6 18.6 0 0 1-7.01-4.42 18.6 18.6 0 0 1-4.42-7.009c-.362-1.03-.037-2.137.703-2.877z"/>
</svg>

After

Width:  |  Height:  |  Size: 840 B

3
assets/twitter.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-twitter" viewBox="0 0 16 16">
<path d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334q.002-.211-.006-.422A6.7 6.7 0 0 0 16 3.542a6.7 6.7 0 0 1-1.889.518 3.3 3.3 0 0 0 1.447-1.817 6.5 6.5 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.32 9.32 0 0 1-6.767-3.429 3.29 3.29 0 0 0 1.018 4.382A3.3 3.3 0 0 1 .64 6.575v.045a3.29 3.29 0 0 0 2.632 3.218 3.2 3.2 0 0 1-.865.115 3 3 0 0 1-.614-.057 3.28 3.28 0 0 0 3.067 2.277A6.6 6.6 0 0 1 .78 13.58a6 6 0 0 1-.78-.045A9.34 9.34 0 0 0 5.026 15"/>
</svg>

After

Width:  |  Height:  |  Size: 586 B

3
assets/x-lg.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg" viewBox="0 0 16 16">
<path d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8z"/>
</svg>

After

Width:  |  Height:  |  Size: 308 B

3
assets/youtube.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-youtube" viewBox="0 0 16 16">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.01 2.01 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.01 2.01 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31 31 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.01 2.01 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A100 100 0 0 1 7.858 2zM6.4 5.209v4.818l4.157-2.408z"/>
</svg>

After

Width:  |  Height:  |  Size: 893 B

15
composer.lock generated
View File

@@ -57,16 +57,16 @@
},
{
"name": "open-function-computers-llc/rad-theme-engine",
"version": "v1.0.25",
"version": "v1.0.34",
"source": {
"type": "git",
"url": "https://github.com/open-function-computers-llc/rad-theme-engine.git",
"reference": "59e337a405555e2eff7aca8de1da9714077aab96"
"reference": "c0b814bdd0ee1f093a051ed2e78efdf8c1f4f94e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/open-function-computers-llc/rad-theme-engine/zipball/59e337a405555e2eff7aca8de1da9714077aab96",
"reference": "59e337a405555e2eff7aca8de1da9714077aab96",
"url": "https://api.github.com/repos/open-function-computers-llc/rad-theme-engine/zipball/c0b814bdd0ee1f093a051ed2e78efdf8c1f4f94e",
"reference": "c0b814bdd0ee1f093a051ed2e78efdf8c1f4f94e",
"shasum": ""
},
"require": {
@@ -77,6 +77,9 @@
"require-dev": {
"phpunit/phpunit": "^9.5"
},
"bin": [
"bin/getIcon"
],
"type": "library",
"autoload": {
"psr-4": {
@@ -95,9 +98,9 @@
],
"support": {
"issues": "https://github.com/open-function-computers-llc/rad-theme-engine/issues",
"source": "https://github.com/open-function-computers-llc/rad-theme-engine/tree/v1.0.25"
"source": "https://github.com/open-function-computers-llc/rad-theme-engine/tree/v1.0.34"
},
"time": "2024-01-25T19:02:08+00:00"
"time": "2025-05-20T21:03:45+00:00"
},
{
"name": "salesforce/handlebars-php",

View File

@@ -1,6 +1,13 @@
<?php
return [
"debug" => true,
"flex-file-prefix" => "flex",
"options-pages" => [
"Site Options",
],
/**
* excerpt-length
*
@@ -26,6 +33,7 @@ return [
*/
"menu-locations" => [
"main-nav" => "Main Navigation",
"footer-nav" => "Footer Customer Support Navigation",
],
@@ -34,7 +42,22 @@ return [
*
* here is where you can define your custom post types easily
*/
"custom-post-types" => [],
"custom-post-types" => [
[
"slug" => "location",
"archive" => true,
"options-pages" => "Locations Landing Page",
"options" => [
"supports" => ["title", "thumbnail"],
]
],
[
"slug" => "testimonial",
"options" => [
"supports" => ["title", "thumbnail"],
]
],
],
/**
@@ -47,7 +70,9 @@ return [
*/
"handlebars" => [
"additional-helpers" => [
"formatDate" => \Helpers\DateFormatter::monthDayYear(),
"testimonial" => \Helpers\McCansHelpers::testimonial(),
"locationTile" => \Helpers\McCansHelpers::locationTile(),
"productTile" => \Helpers\McCansHelpers::productTile(),
],
],
@@ -60,6 +85,7 @@ return [
"enable" => [
"post-thumbnails",
"menus",
"woocommerce",
],
@@ -70,5 +96,61 @@ return [
*/
"disable" => [
"editor",
"customizer",
"gutenberg",
"patterns",
"emojis",
"meta-generator",
"woocommerce.breadcrumb",
"woocommerce.sidebar",
"woocommerce.result_count",
"woocommerce.page_title",
],
"hooks" => [
"woocommerce_before_main_content" => function () {
// shop page
if (is_shop()) {
echo site()->render("shop-top", site()->getPost(wc_get_page_id('shop'), ["headline", "intro_text", 'thumbnail']));
echo site()->render('woocommerce-before-content');
return;
}
echo site()->render('woocommerce-before-content');
},
"woocommerce_after_main_content" => function () {
echo site()->render('woocommerce-after-content');
},
"init" => function() {
remove_all_actions( 'woocommerce_before_shop_loop_item' );
remove_all_actions( 'woocommerce_before_shop_loop_item_title' );
remove_all_actions( 'woocommerce_shop_loop_item_title' );
remove_all_actions( 'woocommerce_after_shop_loop_item_title' );
remove_all_actions( 'woocommerce_after_shop_loop_item' );
add_action( 'woocommerce_shop_loop_item_title', function() {
global $product;
$data = site()->getPost($product->id, [
"url",
"id",
"title",
"thumbnail",
"woocommerce.price",
"woocommerce.attribute.msrp",
"woocommerce.cartUrl",
"woocommerce.sku",
]);
if ($data["price"] && $data["msrp"]) {
$difference = $data["msrp"] - $data["price"];
if ($difference > 0) {
$data["savings"] = round(($difference / $data["msrp"]) * 100);
}
}
echo site()->render("product-tile", $data);
});
}
],
];

12894
dist/app.css vendored Normal file

File diff suppressed because it is too large Load Diff

14026
dist/app.js vendored Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by Fontastic.me</metadata>
<defs>
<font id="slick" horiz-adv-x="512">
<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
<missing-glyph horiz-adv-x="512" />
<glyph unicode="&#8594;" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#8592;" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#8226;" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
<glyph unicode="&#97;" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
</font></defs></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

4
dist/mix-manifest.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"/app.js": "/app.js?id=dba67887fc4ea12d32fe1c2757aaa5c1",
"/app.css": "/app.css?id=4a8b4a07b6234e03881bacb9bf94454f"
}

View File

@@ -5,7 +5,18 @@
// php file.
echo site()->render("footer", [
"powered-by" => "ofco-rad-theme-engine",
"powered-by-url" => "https://github.com/open-function-computers-llc/rad-theme-engine",
"menu" => site()->renderMenu("footer-nav"),
"locations" => site()->getPosts(["type" => "location", "posts_per_page" => 99], ["title", "url"]),
"tagline" => get_field("tagline", "options"),
"address" => get_field("address", "options"),
"city" => get_field("city", "options"),
"state" => get_field("state", "options"),
"contact_email" => get_field("contact_email", "options"),
"contact_phone" => get_field("contact_phone", "options"),
"year" => date("Y"),
"facebook_url" => get_field("facebook_url", "options"),
"twitter_url" => get_field("twitter_url", "options"),
"linkedin_url" => get_field("linkedin_url", "options"),
"youtube_url" => get_field("youtube_url", "options"),
"instagram_url" => get_field("instagram_url", "options"),
]);

View File

@@ -5,12 +5,9 @@ require __DIR__ . '/vendor/autoload.php';
use ofc\Site;
# Declare a new Site object
$site = new Site();
# Allow the Site object to be accessed in other files
function site()
function site(): Site
{
global $site;
return $site;
return Site::getInstance();
}
add_action("after_setup_theme", "site");

View File

@@ -5,4 +5,10 @@
// RAD. Check out the docs here:
// https://rad-theme-engine.ofco.cloud/docs/guides/helpers/
echo site()->render("header");
echo site()->render("header", [
"logo" => site()->getAssetURL("main-logo.jpg"),
"accountHref" => get_permalink(73),
"person-icon" => site()->getAssetContents("person-circle.svg"),
"phone-icon" => site()->getAssetContents("telephone.svg"),
"menu" => site()->renderMenu("main-nav"),
]);

View File

@@ -1,15 +0,0 @@
<?php
namespace Helpers;
class DateFormatter
{
public static function monthDayYear()
{
return function ($template, $context, $args, $source) {
$dateString = strtotime($context->get($args));
return date("M d, Y", $dateString);
};
}
}

52
helpers/McCansHelpers.php Normal file
View File

@@ -0,0 +1,52 @@
<?php
namespace Helpers;
class McCansHelpers
{
public static function testimonial()
{
return function ($template, $context, $args, $source) {
$post = $context->get($args);
return site()->render('testimonial-block', site()->getPost($post, [
'title',
'thumbnail',
'position',
'quote',
'rating',
]));
};
}
public static function locationTile()
{
return function ($template, $context, $args, $source) {
return site()->render("location-tile", $context->get($args));
};
}
public static function productTile()
{
return function ($template, $context, $args, $source) {
$data = site()->getPost($context->get($args), [
"title",
"thumbnail",
"url",
"woocommerce.price",
"woocommerce.cartUrl",
"woocommerce.attribute.msrp",
]);
if ((float) $data["msrp"] && (float) $data["price"]) {
if ($data["price"] != 0) {
$difference = $data["msrp"] - $data["price"];
if ($difference > 0) {
$savingsPercent = round(($difference / $data["msrp"])*100);
}
$data["savings"] = $savingsPercent;
}
}
return site()->render("product-tile", $data);
};
}
}

View File

@@ -1,15 +1,7 @@
<?php
// First, render the page header. You'll likely do this on every custom theme
// php file.
get_header();
// Next, gather any data that you want, and pass it to the render method to bind
// your data to a template file. In the example below, the ./tpl/index.tpl file
// will be given the current page content, and today's timestamp.
echo site()->render("index", [
"post" => site()->getCurrentPost(["content", "title", "published_at"]),
"now" => date("Y-m-d H:i:s"),
]);
echo site()->render("index");
// ...and finally, make sure you close out your page render the WordPress way!
get_footer();

11635
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -6,17 +6,12 @@
"bootstrap": "^5.0.1",
"jquery": "^3.6.0",
"laravel-mix": "^6.0.19",
"postcss": "^8.2.15",
"postcss": "^8.4",
"resolve-url-loader": "^3.1.3",
"sass": "^1.32.13",
"sass-loader": "^11.1.1",
"slick-carousel": "^1.8.1",
"vue": "^2.6.12",
"vue-loader": "^15.9.7",
"vue-template-compiler": "^2.6.12",
"vue2-google-maps": "^0.10.7"
"slick-carousel": "^1.8.1"
},
"devDependencies": {},
"author": "",
"license": "MIT"
}

6
page.php Normal file
View File

@@ -0,0 +1,6 @@
<?php
get_header(is_woocommerce() ? "shop" : "");
echo site()->render("page", site()->getCurrentPost(["content"]));
get_footer(is_woocommerce() ? "shop" : "");

22
single-location.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
get_header();
echo site()->render("location", [
...site()->getCurrentPost([
"title",
"thumbnail",
"intro",
"latitude",
"longitude",
"address_1",
"city",
"state",
"zip",
"phone",
"hours",
]),
"form" => do_shortcode('[contact-form-7 id="05c2e50" title="Contact form"]'),
]);
get_footer();

13
single-product.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
get_header('shop');
do_action('woocommerce_before_main_content');
while (have_posts()):
the_post();
wc_get_template_part('content', 'single-product');
endwhile;
do_action('woocommerce_after_main_content');
do_action('woocommerce_sidebar');
get_footer('shop');

3
single-testimonial.php Normal file
View File

@@ -0,0 +1,3 @@
<?php
header("Location: /");

View File

@@ -0,0 +1,93 @@
import $ from 'jquery';
import 'slick-carousel';
// slick sliders
$('.logo-slider .logos').slick({
infinite: true,
slidesToShow: 5,
pauseOnHover: false,
arrows: false,
autoplay: true,
responsive: [
{
breakpoint: 1200,
settings: {
slidesToShow: 4,
}
},
{
breakpoint: 992,
settings: {
slidesToShow: 3,
}
},
{
breakpoint: 768,
settings: {
slidesToShow: 2,
}
},
{
breakpoint: 576,
settings: {
slidesToShow: 1,
}
},
]
});
$('.testimonials').slick({
infinite: true,
slidesToShow: 1,
arrows: true,
autoplay: true,
autoplaySpeed: 7000,
adaptiveHeight: true,
dots: true,
prevArrow: '<button type="button" class="slick-prev"><img src="/wp-content/themes/mccans-theme/assets/chevron-left.svg" alt="" /></button>',
nextArrow: '<button type="button" class="slick-next"><img src="/wp-content/themes/mccans-theme/assets/chevron-right.svg" alt="" /></button>',
});
// dynamic maps
const customIcon = L.icon({
iconUrl: '/wp-content/themes/mccans-theme/assets/map-marker.png',
iconSize: [33, 50], // width and height of the icon
iconAnchor: [16, 50], // point of the icon which will correspond to marker's location
popupAnchor: [0, -50] // point from which the popup should open relative to the iconAnchor
});
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll(".leaflet-map").forEach((el) => {
const lat = parseFloat(el.dataset.lat);
const lng = parseFloat(el.dataset.lng);
const title = el.dataset.title;
if (isNaN(lat) || isNaN(lng)) return;
const map = L.map(el).setView([lat, lng], 13);
L.tileLayer('https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png', {
attribution: '&copy; <a href="https://carto.com/">CARTO</a> | © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>',
subdomains: 'abcd',
maxZoom: 19,
}).addTo(map);
L.marker([lat, lng], {icon: customIcon})
.addTo(map)
.bindPopup(`${title} Location`);
});
});
// top nav expand items
$(".menu-item-has-children").append("<button class='toggle-sub-nav'></button>");
$("body").on("click", ".toggle-sub-nav", (e) => {
$(e.target).parent("li").toggleClass("children-showing");
});
// mobile nav toggle
document.getElementById("mobile-nav-toggle").addEventListener("click", (e) => {
e.preventDefault();
document.getElementsByTagName("body")[0].classList.toggle("mobile-nav-open");
});

View File

@@ -1,2 +1,22 @@
// dependancies - bootstrap
@import "variables";
// dependancies
@import "../../node_modules/bootstrap/scss/bootstrap";
@import "../../node_modules/slick-carousel/slick/slick";
@import "../../node_modules/slick-carousel/slick/slick-theme";
@import "global";
@import "header";
@import "footer";
@import "flex-background-image-cta";
@import "flex-plain-text";
@import "flex-logo-slider";
@import "flex-testimonials";
@import "top-image";
@import "intro-slide";
@import "shop";
@import "locations";
@import "location";

View File

@@ -0,0 +1,32 @@
.background-image-cta {
padding: 5rem 0;
background-size: cover;
background-position: center;
position: relative;
&:before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(to right, rgba(255, 255, 255, 0.8), transparent);
z-index: 1;
}
.container {
position: relative;
z-index: 2;
}
h1, h2, h3 {
@extend .headline-xl;
text-transform: uppercase;
}
p {
font-size: 27px;
margin-bottom: 2rem;
}
}

View File

@@ -0,0 +1,9 @@
.logo-slider {
.logo {
filter: grayscale(100%);
&:hover {
filter: grayscale(0%);
}
}
}

View File

@@ -0,0 +1,16 @@
.plain-text {
padding: 6rem 0;
h1, h2, h3 {
@extend .headline-lg;
text-transform: uppercase;
text-align: center;
margin-bottom: 2rem;
}
p {
text-align: center;
max-width: 950px;
margin: 0 auto;
}
}

View File

@@ -0,0 +1,133 @@
.testimonials-section {
overflow: hidden;
h1, h2, h3 {
@extend .headline-lg;
text-transform: uppercase;
text-align: center;
margin-bottom: 2rem;
}
.testimonials {
padding: 0 2rem;
position: relative;
.slick-arrow {
width: 60px;
height: 55px;
z-index: 99;
img {
@extend .change-black-to-red;
width: 60px;
height: 55px;
}
&.slick-next {
right: 4rem;
&:before {
content: ""
}
}
&.slick-prev {
left: 4rem;
&:before {
content: ""
}
}
}
.slick-dots {
bottom: 3rem;
li {
button {
&:before {
font-size: 20px;
}
}
&.slick-active {
button {
&:before {
color: $c-red;
}
}
}
}
}
.testimonial {
background: $c-white;
border-radius: 15px;
box-shadow: 0 0 30px rgba($c-black, 0.1);
margin: 1rem 3rem;
width: calc(100% - 3rem) !important;
transform: translateX(-1.5rem);
.stars {
background-image: url(/wp-content/themes/mccans-theme/assets/stars.svg);
display: block;
height: 40px;
width: 0;
margin: 2rem auto;
&.stars-5 {
width: 213px;
}
&.stars-4 {
width: 170px;
}
&.stars-3 {
width: 130px;
}
&.stars-2 {
width: 90px;
}
&.stars-1 {
width: 50px;
}
}
.quote {
text-align: center;
font-size: 25px;
line-height: 45px;
padding: 0 4rem;
margin-bottom: 3rem;
}
.person-details {
display: flex;
gap: 1rem;
justify-content: center;
align-items: center;
padding-bottom: 8rem;
font-size: 26px;
line-height: 35px;
.image-wrapper {
width: 105px;
height: 105px;
border-radius: 50%;
overflow: hidden;
img {
width: 100%;
}
}
p {
margin-bottom: 0;
&.name {
font-weight: bold;
}
}
}
}
}
}

82
src/scss/footer.scss Normal file
View File

@@ -0,0 +1,82 @@
footer.site-footer {
background-color: $c-offWhite;
padding: 2rem 0;
h2 {
@extend .montserrat;
font-weight: 600;
font-size: 25px;
text-transform: uppercase;
margin-bottom: 1rem;
}
ul {
padding: 0;
margin: 0;
list-style-type: none;
li {
a {
font-size: 20px;
color: $c-black;
text-decoration: none;
}
}
}
nav#social-nav {
ul {
list-style-type: none;
padding: 0;
margin: 0;
display: flex;
gap: 1rem;
a {
display: flex;
color: $c-black;
background-color: $c-lightGrey;
width: 36px;
height: 36px;
border-radius: 18px;
justify-content: center;
align-items: center;
transition: all $transition-time ease;
&:hover {
background-color: $c-white;
color: $c-red;
}
}
}
}
.logo-col {
max-width: 336px;
text-align: center;
@extend .montserrat;
text-transform: uppercase;
font-size: 20px;
line-height: 27px;
letter-spacing: -2%;
font-weight: 600;
img {
display: block;
margin-bottom: 1rem;
max-width: 336px;
margin: 0 auto;
}
@include media-breakpoint-down(lg) {
max-width: 100%;
}
}
}
footer.sub-footer {
@extend .montserrat;
background-color: $c-offWhite;
border-top: 1px solid $c-grey;
padding: 1.5rem 0;
}

80
src/scss/global.scss Normal file
View File

@@ -0,0 +1,80 @@
img {
max-width: 100%;
}
.montserrat {
font-family: 'Montserrat', sans-serif;
}
.change-black-to-red {
filter: invert(10%) sepia(79%) saturate(7388%) hue-rotate(2deg) brightness(86%) contrast(111%);
}
.headline-lg {
@extend .montserrat;
font-weight: 600;
font-size: 60px;
line-height: 60px;
letter-spacing: -3%;
@include media-breakpoint-down(md) {
font-size: 45px;
line-height: 45px;
}
}
.headline-xl {
@extend .montserrat;
font-weight: 600;
font-size: 91px;
line-height: 89px;
letter-spacing: -3%;
@include media-breakpoint-down(md) {
font-size: 65px;
line-height: 65px;
}
}
.cta-button {
margin: 0;
a, input {
@extend .montserrat;
text-transform: uppercase;
background-color: $c-red;
color: $c-white !important;
text-decoration: none;
display: inline-block;
min-height: 47px;
line-height: 47px;
border: 1px solid $c-red;
border-radius: 25px;
padding: 0 60px;
transition: all $transition-time ease;
font-size: 20px;
&:hover {
background-color: $c-offWhite;
color: $c-red !important;
}
}
&.small {
a {
padding: 0 25px;
min-height: 32px;
line-height: 32px;
font-size: 1rem;
}
}
}
.leaflet-map {
height: 360px;
margin-bottom: 1rem;
}
input, label, textarea {
max-width: 100%;
}

195
src/scss/header.scss Normal file
View File

@@ -0,0 +1,195 @@
.top-bar {
background-color: $c-offWhite;
padding: 25px 0 25px;
input[type=text] {
border: 0;
border-radius: 25px;
height: 38px;
line-height: 30px;
padding-left: 30px;
background: url("/wp-content/themes/mccans-theme/assets/search.svg") 10px center no-repeat;
background-color: $c-white;
}
a.account-button {
border: 0;
text-transform: uppercase;
color: $c-red;
font-weight: bold;
background: transparent;
text-decoration: none;
display: flex;
align-items: center;
gap: 1rem;
}
}
.main-nav {
padding: 2rem 0;
.logo-wrapper {
max-width: 400px;
width: 20%;
@include media-breakpoint-down(md) {
width: 100%;
display: flex;
justify-content: space-between;
max-width: 100%;
gap: 3rem;
align-items: center;
img {
max-width: 250px;
}
a {
color: $c-black;
}
svg {
width: 50px;
height: 50px;
}
}
@include media-breakpoint-down(sm) {
gap: 1rem !important;
}
#mobile-nav-toggle {
@include media-breakpoint-up(md) {
display: none;
}
svg:first-of-type {
display: block;
}
svg:last-of-type {
display: none;
}
.mobile-nav-open & {
svg:first-of-type {
display: none;
}
svg:last-of-type {
display: block;
}
}
}
img {
width: 100%;
}
}
nav.main-nav {
display: none;
width: 100%;
.mobile-nav-open & {
display: flex;
flex-direction: column;
}
@include media-breakpoint-up(md) {
display: flex;
width: auto;
}
}
.menu-main-menu-container {
display: flex;
align-items: center;
@include media-breakpoint-down(md) {
width: 100%;
& > ul {
width: 100%;
}
}
}
#menu-main-menu {
display: flex;
margin: 0;
padding: 0;
list-style-type: none;
gap: 1rem;
@include media-breakpoint-down(md) {
flex-direction: column;
}
a {
text-transform: uppercase;
color: $c-black;
text-decoration: none;
}
& > li {
position: relative;
@include media-breakpoint-up(lg) {
&:hover {
& > ul {
display: block;
position: absolute;
top: 100%;
left: 0;
list-style-type: none;
padding: 0;
}
}
}
@include media-breakpoint-down(md) {
&.children-showing {
ul {
display: flex;
flex-direction: column;
list-style-type: none;
li {
position: relative;
}
a {
width: 100%;
}
}
.toggle-sub-nav {
transform: rotate(180deg);
}
}
}
}
ul {
display: none;
}
}
.toggle-sub-nav {
width: 16px;
height: 16px;
background-image: url("/wp-content/themes/mccans-theme/assets/chevron-down.svg");
background-position: center;
background-size: contain;
background-repeat: no-repeat;
border: 0;
background-color: transparent;
@include media-breakpoint-down(md) {
width: 30px;
height: 30px;
position: absolute;
right: 0;
top: 0;
}
}
}

34
src/scss/intro-slide.scss Normal file
View File

@@ -0,0 +1,34 @@
section.intro-slide {
position: relative;
background-position: center;
background-size: cover;
background-repeat: no-repeat;
padding: 12rem 0;
&:before {
content: "";
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 1;
background-color: rgba($c-black, 0.3);
}
.container {
position: relative;
z-index: 2;
color: $c-white;
text-align: center;
}
h1 {
@extend .headline-xl;
text-transform: uppercase;
}
p {
font-size: 34px;
}
}

52
src/scss/location.scss Normal file
View File

@@ -0,0 +1,52 @@
.single-location {
.top-image {
margin-bottom: 6rem;
}
h1 {
@extend .headline-lg;
margin-bottom: 2rem;
}
.form-wrapper {
margin-bottom: 8rem;
label {
font-weight: bold;
}
.wpcf7-checkbox {
.wpcf7-list-item {
display: block;
margin: 0 0 0.5rem 0;
&:last-of-type {
margin: 0;
}
label {
font-weight: normal;
}
}
}
p:has(input[type=submit]) {
@extend .cta-button;
}
}
p {
color: $c-textAlt;
strong {
text-transform: uppercase;
}
}
.address {
a {
color: $c-textAlt;
text-decoration: none;
}
}
}

41
src/scss/locations.scss Normal file
View File

@@ -0,0 +1,41 @@
.post-type-archive-location {
.intro {
text-align: center;
padding-top: 6rem;
padding-bottom: 6rem;
h1 {
@extend .headline-lg;
margin-bottom: 2rem;
}
& > * {
max-width: 850px;
margin: 0 auto;
}
}
.location-tile {
width: calc(50% - 2.5rem);
margin-bottom: 3rem;
color: $c-textAlt;
&:first-of-type {
width: 100%;
.leaflet-map {
height: 500px;
}
}
h2 {
color: $c-red;
text-transform: uppercase;
margin-bottom: 0;
}
a {
color: $c-textAlt;
text-decoration: none;
}
}
}

122
src/scss/shop.scss Normal file
View File

@@ -0,0 +1,122 @@
section.woocommerce-wrapper {
margin-top: 4rem;
ul.products {
display: flex;
flex-wrap: wrap;
}
}
div.product-tile {
border-radius: 15px;
box-shadow: 0 0 20px rgba($c-black, 0.1);
padding: 1rem;
position: relative;
height: 100%;
a.add_to_cart_button {
position: absolute;
top: 1rem;
right: 1rem;
width: 35px;
height: 35px;
padding: 0 !important;
display: flex !important;
justify-content: center;
align-items: center;
margin: 0 !important;
// opacity: 0;
transition: all $transition-time ease;
border-radius: 50%;
img {
margin: 0 !important;
width: 20px !important;
}
&::after {
position: absolute;
left: 80%;
margin: 0 !important;
top: -20%;
}
}
a.added_to_cart {
@extend .montserrat;
padding-top: 0;
position: absolute;
display: block;
color: $c-brightRed;
font-size: 0.8rem;
text-transform: uppercase;
font-weight: bold;
&::after {
@extend .change-black-to-red;
content:"";
width: 13px;
height: 14px;
display: block;
background-image: url("/wp-content/themes/mccans-theme/assets/chevron-right.svg");
position: absolute;
left: 103%;
top: 3px;
background-size: contain;
}
&:hover {
&::after {
left: 105%;
}
}
}
&:hover {
.add_to_cart_button {
opacity: 1;
}
}
h2 {
font-weight: bold;
font-size: 20px;
line-height: 26px;
text-align: center;
a {
color: $c-black;
text-decoration: none;
&:hover {
color: $c-brightRed;
}
}
}
p.price {
color: $c-brightRed !important;
font-size: 25px !important;
line-height: 26px;
text-align: center;
margin: 2rem 0 0 !important;
font-weight: bold !important;
}
p.msrp {
color: $c-midGrey !important;
font-size: 15px !important;
line-height: 21px;
text-align: center;
margin: 0;
}
p.savings {
color: $c-brightRed !important;
font-size: 16px !important;
line-height: 16px;
text-align: center;
margin: 0;
}
}

17
src/scss/top-image.scss Normal file
View File

@@ -0,0 +1,17 @@
.top-image {
position: relative;
background-size: cover;
background-position: center;
height: 500px;
&::before {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: $c-black;
opacity: 0.3;
}
}

20
src/scss/variables.scss Normal file
View File

@@ -0,0 +1,20 @@
$c-black: #000;
$c-white: #fff;
$c-offWhite: #f5f5f5;
$c-lightGrey: #d9d9d9;
$c-grey: #cbcbcb;
$c-midGrey: #acacac;
$c-textAlt: #505050;
$c-brightRed: #c80000;
$c-red: #ae1716;
$transition-time: 0.3s;
// bootstrap overrides
$font-family-sans-serif: 'Inter', sans-serif;
$body-color: $c-black;
// slick overrides
$slick-font-path: "/wp-content/themes/mccans-theme/dist/fonts/vendor/slick-carousel/slick/";
$slick-loader-path: "/wp-content/themes/mccans-theme/dist/images/vendor/slick-carousel/slick/";

View File

@@ -0,0 +1,3 @@
<?php
echo "here?";

7
tpl-flex.php Normal file
View File

@@ -0,0 +1,7 @@
<?php
/** Template Name: Flexible Content */
get_header();
echo site()->render("flex", site()->getCurrentPost(["acf.content"]));
get_footer();

1
tpl/flex.tpl Normal file
View File

@@ -0,0 +1 @@
{{#flex content}}

View File

@@ -0,0 +1,17 @@
<section class="background-image-cta" style="background-image: url({{ background_image }})">
<div class="container">
<div class="row">
<div class="col">
<{{tag_type}}>{{ headline }}</{{tag_type}}>
<p>{{ description }}</p>
{{#if button_target}}
<p class="cta-button">
<a href="{{ button_target }}">{{ button_text }}</a>
</p>
{{/if}}
</div>
<div class="col"></div>
</div>
</div>
</section>

15
tpl/flex_logo_slider.tpl Normal file
View File

@@ -0,0 +1,15 @@
<section class="logo-slider">
<div class="container">
<div class="row">
<div class="col">
<div class="logos">
{{#each logos}}
<div class="logo">
<img src="{{ logo.url }}" alt="{{ logo.alt }}" />
</div>
{{/each}}
</div>
</div>
</div>
</div>
</section>

10
tpl/flex_plain_text.tpl Normal file
View File

@@ -0,0 +1,10 @@
<section class="plain-text">
<div class="container">
<div class="row">
<div class="col">
<{{tag_type}}>{{ headline }}</{{tag_type}}>
{{{ description }}}
</div>
</div>
</div>
</section>

15
tpl/flex_testimonials.tpl Normal file
View File

@@ -0,0 +1,15 @@
<section class="testimonials-section">
<div class="container">
<div class="row">
<div class="col">
<h2>{{headline}}</h2>
<div class="testimonials">
{{#each testimonials}}
{{#testimonial this.testimonial }}
{{/each}}
</div>
</div>
</div>
</div>
</section>

View File

@@ -1,10 +1,71 @@
{{#wp-footer}}
<footer class="site-footer mt-5">
<div class="container">
<p class="text-center">&copy; {{ year }}. Powered by <a id="bottom-link" href="{{ powered-by-url }}" target="_blank">{{ powered-by }}</a></p>
<footer class="site-footer">
<div class="container-fluid">
<div class="row">
<div class="col">
<div class="d-flex justify-content-around flex-column flex-lg-row gap-3">
<div class="logo-col">
<a href="/"><img src="{{#assetUrl main-logo.png }}" alt="{{#wp-title}}" /></a>
{{ tagline }}
</div>
<div class="locations-col">
<h2>Contact your store</h2>
<ul>
{{#each locations}}
<li><a href="{{ url }}">{{ title }}</a></li>
{{/each}}
</ul>
</div>
<div class="service-col">
<h2>Customer Service</h2>
{{{ menu }}}
</div>
<div class="social-col">
<h2>Follow Us</h2>
<nav id="social-nav">
<ul>
{{#if facebook_url}}
<li><a href="{{ facebook_url }}" target="_blank">{{#assetContents facebook.svg}}</a></li>
{{/if}}
{{#if twitter_url}}
<li><a href="{{ twitter_url }}" target="_blank">{{#assetContents twitter.svg}}</a></li>
{{/if}}
{{#if instagram_url}}
<li><a href="{{ instagram_url }}" target="_blank">{{#assetContents instagram.svg}}</a></li>
{{/if}}
{{#if youtube_url}}
<li><a href="{{ youtube_url }}" target="_blank">{{#assetContents youtube.svg}}</a></li>
{{/if}}
{{#if linkedin_url}}
<li><a href="{{ linkedin_url }}" target="_blank">{{#assetContents linkedin.svg}}</a></li>
{{/if}}
</ul>
</nav>
</div>
</div>
</div>
</div>
</div>
</footer>
<footer class="sub-footer">
<div class="container">
<div class="row">
<div class="col">
<div class="text-center">
&copy; {{ year }} {{#wp-title}}
</div>
</div>
</div>
</div>
</footer>
{{#wp-footer}}
</body>
</html>

View File

@@ -6,56 +6,56 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{#wp-title}}</title>
<!-- the following CSS is included for a fancy pants intro page. Feel free
to delete it! -->
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=montserrat:400,400i,700,700i" rel="stylesheet" />
<style>
* {
font-family: 'Montserrat', sans-serif;
}
body, html {
background-color: #212529;
color: #dee2e6;
font-size: 1.1rem;
line-height: 1.5;
}
.container {
max-width: 900px;
padding: 0 1rem;
display: block;
margin: 0 auto;
}
a {
color: #f472b6;
text-decoration: none;
}
.text-center {
text-align: center;
}
.m-0 {
margin: 0;
}
.mb-4 {
margin-bottom: 1.25rem;
}
code {
font-family: monospace;
color: white;
background-color: black;
display: inline-block;
line-height: 1.1;
font-size: 1rem;
padding: 2px 4px;
}
.outro h2 {
font-size: 1.2rem;
}
footer {
font-size: .8rem;
}
</style>
<link href="https://fonts.bunny.net/css?family=inter:400,400i,700,700i|montserrat:400,400i,600,600i,700,700i,800,800i" rel="stylesheet" />
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
{{#wp-header}}
</head>
<body {{#body-classes}}>
<section class="top-bar">
<div class="container">
<div class="row">
<div class="col">
<div class="d-flex gap-5 justify-content-end">
<input type="text" placeholder="What are you searching for?" />
<div>
<a href="{{ accountHref }}" class="account-button">
{{{ person-icon }}}
My Account
</a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="main-nav">
<div class="container">
<div class="row">
<div class="col">
<div class="d-flex justify-content-between flex-wrap align-items-center">
<div class="logo-wrapper">
<a href="/"><img src="{{#assetUrl main-logo.png }}" alt="McCann's Medical" /></a>
<a href="#" id="mobile-nav-toggle">
{{#assetContents list.svg}}
{{#assetContents x-lg.svg}}
</a>
</div>
<nav class="align-items-center gap-3 main-nav">
{{{ menu }}}
<p class="cta-button small">
<a href="tel:855-622-2661">{{{ phone-icon }}} 855-622-2661</a>
</p>
</nav>
</div>
</div>
</div>
</div>
</section>

View File

@@ -1,39 +1,11 @@
<div class="container">
<div class="row">
<div class="col">
<hr />
<h1 class="text-center my-5">This fell back to the index file, not good, catch it upstream!</h1>
<hr class="mb-5" />
<section class="intro">
<div class="container">
<h1 class="text-center">
<a href = "https://rad-theme-engine.ofco.cloud/" target = "_blank">Welcome to Rad Theme Engine!</a>
</h1>
<div class="col-lg-12 text-center mb-4">
<a href = "https://rad-theme-engine.ofco.cloud/" target = "_blank">
<h1>
<img class="title-logo" src="https://rad-theme-engine.ofco.cloud/images/rebrand/Rad%20Logo%201%20OF-TOP.png" alt="Check out the RAD Theme Engine Docs">
</h1>
</a>
</div>
<p id="get-started">Get started by editing these template files to build out your site layouts and content.</p>
<p id="description">All template files need to be valid <a href="https://rad-theme-engine.ofco.cloud/docs/guides/handlebars/" target="_blank">handlebars</a> files, with tags that look like this: <code>{{#raw}}{{#formatDate now}}{{/raw}}</code>. Note: the <code>now</code> variable got its value passed by the PHP file to this template, and the <code>#formatDate</code> prefix is a <a href="https://rad-theme-engine.ofco.cloud/docs/guides/helpers/" target="_blank">handlebars helper</a>. You can write your own helpers very easily, and RAD comes preloaded with a bunch of really useful ones!</p>
<p>That tag is rendered into this: <code>{{#formatDate now }}</code></p>
<hr/>
</div>
</section>
<section>
<div class="container">
<p>We also passed the WordPress saved content to this template, asking specifically for the content, title, and published_at date. Here is a quick example of how to use that data:</p>
<p class="m-0">Title: {{ post.title }}</p>
<p class="m-0">Published: {{ post.published_at }}</p>
<p class="m-0">Content:</p>
{{{ post.content }}}
<hr/>
</div>
</section>
<section class="outro">
<h2 class="text-center">
For more help getting started on your new <em>RAD</em> project, visit the <br />
<a class="bottom-link" href="https://rad-theme-engine.ofco.cloud" target="_blank">RAD Theme Engine Docs</a>
</h2>
</section>
</div>

21
tpl/location-tile.tpl Normal file
View File

@@ -0,0 +1,21 @@
<div class="location-tile">
<div class="leaflet-map" data-lat="{{ latitude }}" data-lng="{{ longitude }}" data-title="{{ title }}"></div>
<div class="d-flex justify-content-between">
<div class="left">
<h2>{{ title }}</h2>
<p class="address">{{ address_1 }}<br />
{{#if city}}
{{ city }},
{{else}}
{{ title }},
{{/if}}
{{ state }} {{ zip }}<br />
<a href="tel:{{ phone }}">{{ phone }}</a>
</div>
<div class="right">
<p class="cta-button"><a href="{{ url }}">Contact Us</a></p>
</div>
</div>
</div>

44
tpl/location.tpl Normal file
View File

@@ -0,0 +1,44 @@
<section class="top-image" style="background-image: url({{ thumbnail }})">
&nbsp;
</section>
<section class="location">
<div class="container">
<div class="row">
<div class="col">
<h1>{{ title }} Location</h1>
<p>{{{ intro }}}</p>
<div class="form-wrapper">
{{{ form }}}
</div>
</div>
<div class="col">
<div class="leaflet-map" data-lat="{{ latitude }}" data-lng="{{ longitude }}" data-title="{{ title }}"></div>
<div class="d-flex justify-content-between">
<div class="address">
<p><strong>{{ title }} Store:</strong><br />
{{ address_1 }}<br />
{{#if city}}
{{ city }},
{{else}}
{{ title }},
{{/if}}
{{ state }} {{ zip }}<br />
<a href="tel:{{ phone }}">{{ phone }}</a>
</p>
</div>
<div class="hours">
<p><strong>Hours:</strong><br />
{{#nl2br hours }}
</p>
</div>
</div>
</div>
</div>
</div>
</section>

22
tpl/locations.tpl Normal file
View File

@@ -0,0 +1,22 @@
<section class="top-image" style="background-image: url({{ top_image}})">
&nbsp;
</section>
<section class="locations">
<div class="container">
<div class="row">
<div class="col intro">
<h1>{{ headline }}</h1>
<p>{{{ intro }}}</p>
</div>
</div>
<div class="row">
<div class="col d-flex flex-wrap justify-content-between">
{{#each locations}}
{{#locationTile .}}
{{/each}}
</div>
</div>
</div>
</section>

9
tpl/page.tpl Normal file
View File

@@ -0,0 +1,9 @@
<section class="page-content">
<div class="container">
<div class="row">
<div class="col">
{{{ content }}}
</div>
</div>
</div>
</section>

26
tpl/product-tile.tpl Normal file
View File

@@ -0,0 +1,26 @@
<div class="product-tile">
<a href="{{ cartUrl }}"
class="button product_type_simple add_to_cart_button ajax_add_to_cart"
data-product_id="{{ id }}"
data-product_sku="{{ sku }}"
data-quantity="1"
aria-label="Add to cart: {{ title }}"
data-success_message="“{{ title }}” has been added to your cart"
rel="nofollow"
>
<img src="{{#assetUrl cart-plus.svg }}" alt="Add To Cart" />
</a>
<a href="{{ url }}">
<img src="{{ thumbnail }}" alt="{{ title }}" />
</a>
<h2>
<a href="{{ url }}">{{ title }}</a>
</h2>
<p class="price">${{ price }}</p>
{{#if msrp}}
<p class="msrp">MSRP: ${{ msrp }}</p>
{{/if}}
{{#if savings}}
<p class="savings">(You save {{ savings }}%)</p>
{{/if}}
</div>

10
tpl/shop-top.tpl Normal file
View File

@@ -0,0 +1,10 @@
<section class="intro-slide" style="background-image: url({{ thumbnail }})">
<div class="container">
<div class="row">
<div class="col">
<h1>{{ headline }}</h1>
<p>{{ intro_text }}</p>
</div>
</div>
</div>
</section>

18
tpl/testimonial-block.tpl Normal file
View File

@@ -0,0 +1,18 @@
<div class="testimonial">
<div class="stars stars-{{rating}}">&nbsp;</div>
<p class="quote">&ldquo;{{ quote }}&rdquo;</p>
<div class="person-details">
<div class="image-wrapper">
{{#if thumbnail}}
<img src="{{ thumbnail }}" alt="{{ title }}" />
{{else}}
<img src="{{#assetUrl lady-face.jpg }}" alt="{{ title }}" />
{{/if}}
</div>
<div class="details">
<p class="name">{{ title }}</p>
<p class="position">{{ position }}</p>
</div>
</div>
</div>

View File

@@ -0,0 +1,5 @@
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,4 @@
<section class="woocommerce-wrapper">
<div class="container">
<div class="row">
<div class="col">

6
vendor/.htaccess vendored Normal file
View File

@@ -0,0 +1,6 @@
# Apache 2.2
Order Allow,Deny
Deny from all
# Apache 2.4+
Require all denied

25
vendor/autoload.php vendored Normal file
View File

@@ -0,0 +1,25 @@
<?php
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
trigger_error(
$err,
E_USER_ERROR
);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit3607194100d6f07e79a6cf21cb37ba8f::getLoader();

119
vendor/bin/getIcon vendored Executable file
View File

@@ -0,0 +1,119 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../open-function-computers-llc/rad-theme-engine/bin/getIcon)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = $this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (
(function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
|| (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
) {
return include("phpvfscomposer://" . __DIR__ . '/..'.'/open-function-computers-llc/rad-theme-engine/bin/getIcon');
}
}
return include __DIR__ . '/..'.'/open-function-computers-llc/rad-theme-engine/bin/getIcon';

579
vendor/composer/ClassLoader.php vendored Normal file
View File

@@ -0,0 +1,579 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
/** @var \Closure(string):void */
private static $includeFile;
/** @var string|null */
private $vendorDir;
// PSR-4
/**
* @var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array<string, list<string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* List of PSR-0 prefixes
*
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
*
* @var array<string, array<string, list<string>>>
*/
private $prefixesPsr0 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var array<string, bool>
*/
private $missingClasses = array();
/** @var string|null */
private $apcuPrefix;
/**
* @var array<string, self>
*/
private static $registeredLoaders = array();
/**
* @param string|null $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
self::initializeIncludeClosure();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return list<string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return list<string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return array<string, string> Array of classname => path
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array<string, string> $classMap Class to filename map
*
* @return void
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
$paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
$paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
$paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
$paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders keyed by their corresponding vendor directories.
*
* @return array<string, self>
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}

359
vendor/composer/InstalledVersions.php vendored Normal file
View File

@@ -0,0 +1,359 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints((string) $constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require $vendorDir.'/composer/installed.php';
$installed[] = self::$installedByVendor[$vendorDir] = $required;
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require __DIR__ . '/installed.php';
self::$installed = $required;
} else {
self::$installed = array();
}
}
if (self::$installed !== array()) {
$installed[] = self::$installed;
}
return $installed;
}
}

21
vendor/composer/LICENSE vendored Normal file
View File

@@ -0,0 +1,21 @@
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

10
vendor/composer/autoload_classmap.php vendored Normal file
View File

@@ -0,0 +1,10 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
);

10
vendor/composer/autoload_namespaces.php vendored Normal file
View File

@@ -0,0 +1,10 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Handlebars' => array($vendorDir . '/salesforce/handlebars-php/src'),
);

12
vendor/composer/autoload_psr4.php vendored Normal file
View File

@@ -0,0 +1,12 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'ofc\\' => array($vendorDir . '/open-function-computers-llc/rad-theme-engine/src'),
'PostTypes\\' => array($vendorDir . '/jjgrainger/posttypes/src'),
'Helpers\\' => array($baseDir . '/helpers'),
);

38
vendor/composer/autoload_real.php vendored Normal file
View File

@@ -0,0 +1,38 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit3607194100d6f07e79a6cf21cb37ba8f
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInit3607194100d6f07e79a6cf21cb37ba8f', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit3607194100d6f07e79a6cf21cb37ba8f', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit3607194100d6f07e79a6cf21cb37ba8f::getInitializer($loader));
$loader->register(true);
return $loader;
}
}

63
vendor/composer/autoload_static.php vendored Normal file
View File

@@ -0,0 +1,63 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInit3607194100d6f07e79a6cf21cb37ba8f
{
public static $prefixLengthsPsr4 = array (
'o' =>
array (
'ofc\\' => 4,
),
'P' =>
array (
'PostTypes\\' => 10,
),
'H' =>
array (
'Helpers\\' => 8,
),
);
public static $prefixDirsPsr4 = array (
'ofc\\' =>
array (
0 => __DIR__ . '/..' . '/open-function-computers-llc/rad-theme-engine/src',
),
'PostTypes\\' =>
array (
0 => __DIR__ . '/..' . '/jjgrainger/posttypes/src',
),
'Helpers\\' =>
array (
0 => __DIR__ . '/../..' . '/helpers',
),
);
public static $prefixesPsr0 = array (
'H' =>
array (
'Handlebars' =>
array (
0 => __DIR__ . '/..' . '/salesforce/handlebars-php/src',
),
),
);
public static $classMap = array (
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit3607194100d6f07e79a6cf21cb37ba8f::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit3607194100d6f07e79a6cf21cb37ba8f::$prefixDirsPsr4;
$loader->prefixesPsr0 = ComposerStaticInit3607194100d6f07e79a6cf21cb37ba8f::$prefixesPsr0;
$loader->classMap = ComposerStaticInit3607194100d6f07e79a6cf21cb37ba8f::$classMap;
}, null, ClassLoader::class);
}
}

168
vendor/composer/installed.json vendored Normal file
View File

@@ -0,0 +1,168 @@
{
"packages": [
{
"name": "jjgrainger/posttypes",
"version": "v2.2.1",
"version_normalized": "2.2.1.0",
"source": {
"type": "git",
"url": "https://github.com/jjgrainger/PostTypes.git",
"reference": "2f20f628ec44404960df4b1ae5d623397a66aec1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jjgrainger/PostTypes/zipball/2f20f628ec44404960df4b1ae5d623397a66aec1",
"reference": "2f20f628ec44404960df4b1ae5d623397a66aec1",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"require-dev": {
"phpunit/phpunit": "^9.6",
"squizlabs/php_codesniffer": "3.*"
},
"time": "2024-10-13T17:23:48+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"PostTypes\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Joe Grainger",
"homepage": "https://jjgrainger.co.uk"
}
],
"description": "Simple WordPress custom post types.",
"homepage": "https://posttypes.jjgrainger.co.uk",
"keywords": [
"post-types",
"wordpress"
],
"support": {
"issues": "https://github.com/jjgrainger/posttypes/issues",
"source": "https://github.com/jjgrainger/posttypes"
},
"install-path": "../jjgrainger/posttypes"
},
{
"name": "open-function-computers-llc/rad-theme-engine",
"version": "v1.0.34",
"version_normalized": "1.0.34.0",
"source": {
"type": "git",
"url": "https://github.com/open-function-computers-llc/rad-theme-engine.git",
"reference": "c0b814bdd0ee1f093a051ed2e78efdf8c1f4f94e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/open-function-computers-llc/rad-theme-engine/zipball/c0b814bdd0ee1f093a051ed2e78efdf8c1f4f94e",
"reference": "c0b814bdd0ee1f093a051ed2e78efdf8c1f4f94e",
"shasum": ""
},
"require": {
"jjgrainger/posttypes": "^2.1",
"php": ">=7.4",
"salesforce/handlebars-php": "^2.3"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
},
"time": "2025-05-20T21:03:45+00:00",
"bin": [
"bin/getIcon"
],
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"ofc\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A suite of classes to make WordPress theme development cleaner",
"keywords": [
"handlebars",
"theme",
"wordpress"
],
"support": {
"issues": "https://github.com/open-function-computers-llc/rad-theme-engine/issues",
"source": "https://github.com/open-function-computers-llc/rad-theme-engine/tree/v1.0.34"
},
"install-path": "../open-function-computers-llc/rad-theme-engine"
},
{
"name": "salesforce/handlebars-php",
"version": "2.3.0",
"version_normalized": "2.3.0.0",
"source": {
"type": "git",
"url": "https://github.com/salesforce/handlebars-php.git",
"reference": "59fc47c7b2701659cb483d0f3461c4f712693b2b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/salesforce/handlebars-php/zipball/59fc47c7b2701659cb483d0f3461c4f712693b2b",
"reference": "59fc47c7b2701659cb483d0f3461c4f712693b2b",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^4"
},
"time": "2020-06-08T17:23:52+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-0": {
"Handlebars": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "fzerorubigd",
"email": "fzerorubigd@gmail.com"
},
{
"name": "Behrooz Shabani (everplays)",
"email": "everplays@gmail.com"
},
{
"name": "Mardix",
"homepage": "https://github.com/mardix"
}
],
"description": "Handlebars processor for php",
"homepage": "http://www.github.com/salesforce/handlebars-php",
"keywords": [
"handlebars",
"mustache",
"templating"
],
"support": {
"issues": "https://github.com/salesforce/handlebars-php/issues",
"source": "https://github.com/salesforce/handlebars-php/tree/2.3.0"
},
"install-path": "../salesforce/handlebars-php"
}
],
"dev": true,
"dev-package-names": []
}

50
vendor/composer/installed.php vendored Normal file
View File

@@ -0,0 +1,50 @@
<?php return array(
'root' => array(
'name' => 'open-function-computers-llc/wp-theme',
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => 'c074a5ef18d6702ae4abe09fa1289fc93726117d',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev' => true,
),
'versions' => array(
'jjgrainger/posttypes' => array(
'pretty_version' => 'v2.2.1',
'version' => '2.2.1.0',
'reference' => '2f20f628ec44404960df4b1ae5d623397a66aec1',
'type' => 'library',
'install_path' => __DIR__ . '/../jjgrainger/posttypes',
'aliases' => array(),
'dev_requirement' => false,
),
'open-function-computers-llc/rad-theme-engine' => array(
'pretty_version' => 'v1.0.34',
'version' => '1.0.34.0',
'reference' => 'c0b814bdd0ee1f093a051ed2e78efdf8c1f4f94e',
'type' => 'library',
'install_path' => __DIR__ . '/../open-function-computers-llc/rad-theme-engine',
'aliases' => array(),
'dev_requirement' => false,
),
'open-function-computers-llc/wp-theme' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => 'c074a5ef18d6702ae4abe09fa1289fc93726117d',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
'salesforce/handlebars-php' => array(
'pretty_version' => '2.3.0',
'version' => '2.3.0.0',
'reference' => '59fc47c7b2701659cb483d0f3461c4f712693b2b',
'type' => 'library',
'install_path' => __DIR__ . '/../salesforce/handlebars-php',
'aliases' => array(),
'dev_requirement' => false,
),
),
);

26
vendor/composer/platform_check.php vendored Normal file
View File

@@ -0,0 +1,26 @@
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 70400)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}

View File

@@ -0,0 +1 @@
/examples export-ignore

View File

@@ -0,0 +1,3 @@
root: ./docs/
structure:
readme: ../README.md

Some files were not shown because too many files have changed in this diff Show More