SLICE into independant modules
This commit is contained in:
parent
2f07ae6bf8
commit
2d03770420
|
@ -1,39 +1 @@
|
|||
<?php
|
||||
|
||||
use SilverStripe\Forms\HTMLEditor\HtmlEditorConfig;
|
||||
use SilverStripe\Core\Manifest\ModuleResourceLoader;
|
||||
use SilverStripe\ORM\Search\FulltextSearchable;
|
||||
use SilverStripe\View\Parsers\ShortcodeParser;
|
||||
use Site\Extensions\EmbedShortcodeProvider;
|
||||
|
||||
// setup TinyMCE editor
|
||||
$config = HtmlEditorConfig::get('cms');
|
||||
$config->enablePlugins([
|
||||
'template',
|
||||
'fullscreen',
|
||||
'hr',
|
||||
'contextmenu',
|
||||
'charmap',
|
||||
'visualblocks',
|
||||
'lists',
|
||||
'charcount' => ModuleResourceLoader::resourceURL(
|
||||
'drmartingonzo/ss-tinymce-charcount:client/dist/js/bundle.js'
|
||||
),
|
||||
]);
|
||||
$config->addButtonsToLine(2, 'hr');
|
||||
$config->setOption('block_formats', 'Paragraph=p;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Address=address;Pre=pre');
|
||||
$config->setOption('invalid_elements', 'h1');
|
||||
$config->setOption(
|
||||
'table_class_list',
|
||||
[
|
||||
['title' => 'Transparent Table', 'value' => 'table-none'],
|
||||
['title' => 'Shaded rows', 'value' => 'table table-striped table-bordered'],
|
||||
]
|
||||
);
|
||||
|
||||
FulltextSearchable::enable();
|
||||
|
||||
// replace embed parser
|
||||
/*$parser = ShortcodeParser::get('default');
|
||||
$parser->unregister('embed');
|
||||
$parser->register('embed', [EmbedShortcodeProvider::class, 'handle_shortcode']);*/
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
---
|
||||
Name: webapp-base-config
|
||||
---
|
||||
SilverStripe\Core\Manifest\ModuleManifest:
|
||||
project: app
|
||||
|
||||
Page:
|
||||
default_container_class: 'container'
|
||||
|
||||
#SilverStripe\Admin\LeftAndMain:
|
||||
# extra_requirements_javascript:
|
||||
# - 'colymba/gridfield-bulk-editing-tools:client/dist/js/main.js'
|
||||
# - 'colymba/gridfield-bulk-editing-tools:client/lang/en.js'
|
||||
# extra_requirements_css:
|
||||
# - 'colymba/gridfield-bulk-editing-tools:client/dist/styles/main.css'
|
||||
|
||||
SilverStripe\Admin\LeftAndMain:
|
||||
extra_requirements_javascript:
|
||||
- 'app/client/dist/js/app_cms.js'
|
||||
extra_requirements_css:
|
||||
- 'app/client/dist/css/app_cms.css'
|
||||
|
||||
SilverStripe\Forms\HTMLEditor\TinyMCEConfig:
|
||||
editor_css:
|
||||
- 'app/client/dist/css/app_editor.css'
|
||||
|
||||
SilverStripe\Control\Email\Email:
|
||||
send_all_emails_from: noreply@twma.pro
|
|
@ -1,47 +0,0 @@
|
|||
---
|
||||
Name: webapp-base-extensions
|
||||
---
|
||||
# Basic extensions
|
||||
SilverStripe\Admin\LeftAndMain:
|
||||
extensions:
|
||||
- App\Extensions\LeftAndMainExtension
|
||||
|
||||
SilverStripe\SiteConfig\SiteConfig:
|
||||
extensions:
|
||||
- App\Extensions\SocialExtension
|
||||
- App\Extensions\SiteConfigExtension
|
||||
- App\Extensions\NotificationsExtension
|
||||
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
extensions:
|
||||
- App\Extensions\SiteTreeExtension
|
||||
|
||||
Sheadawson\Linkable\Models\EmbeddedObject:
|
||||
extensions:
|
||||
- App\Extensions\EmbeddedObjectExtension
|
||||
|
||||
SilverStripe\Assets:
|
||||
extensions:
|
||||
- App\Extensions\ImageExtension
|
||||
|
||||
Dynamic\FlexSlider\Model\SlideImage:
|
||||
extensions:
|
||||
- App\Extensions\SlideImageExtension
|
||||
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
#SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
# class: App\Extensions\UserDefinedForm_HiddenClass
|
||||
Sheadawson\Linkable\Forms\EmbeddedObjectField:
|
||||
class: App\Extensions\EmbedObjectField
|
||||
SilverStripe\Forms\CompositeField:
|
||||
class: App\Extensions\CompositeFieldExtension
|
||||
|
||||
SilverStripe\UserForms\Form\UserForm:
|
||||
extensions:
|
||||
- App\Extensions\PlaceholderFormExtension
|
||||
|
||||
Page:
|
||||
searchable_objects:
|
||||
- App\Models\TeamMember
|
||||
extensions:
|
||||
- DNADesign\Elemental\Extensions\ElementalPageExtension
|
|
@ -1,81 +0,0 @@
|
|||
---
|
||||
Name: webapp-base-files
|
||||
---
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
featured_images_directory: 'blog-posts'
|
||||
|
||||
SilverStripe\Assets\Upload_Validator:
|
||||
allowedExtensions:
|
||||
- 'stl'
|
||||
|
||||
SilverStripe\Assets\File:
|
||||
allowed_extensions:
|
||||
- 'ace'
|
||||
- 'arc'
|
||||
- 'arj'
|
||||
- 'asf'
|
||||
- 'au'
|
||||
- 'avi'
|
||||
- 'bmp'
|
||||
- 'bz2'
|
||||
- 'cab'
|
||||
- 'cda'
|
||||
- 'csv'
|
||||
- 'dmg'
|
||||
- 'doc'
|
||||
- 'docx'
|
||||
- 'dotx'
|
||||
- 'flv'
|
||||
- 'gif'
|
||||
- 'gpx'
|
||||
- 'gz'
|
||||
- 'hqx'
|
||||
- 'ico'
|
||||
- 'jpeg'
|
||||
- 'jpg'
|
||||
- 'kml'
|
||||
- 'm4a'
|
||||
- 'm4v'
|
||||
- 'mid'
|
||||
- 'midi'
|
||||
- 'mkv'
|
||||
- 'mov'
|
||||
- 'mp3'
|
||||
- 'mp4'
|
||||
- 'mpa'
|
||||
- 'mpeg'
|
||||
- 'mpg'
|
||||
- 'ogg'
|
||||
- 'ogv'
|
||||
- 'pages'
|
||||
- 'pcx'
|
||||
- 'pdf'
|
||||
- 'png'
|
||||
- 'pps'
|
||||
- 'ppt'
|
||||
- 'pptx'
|
||||
- 'potx'
|
||||
- 'ra'
|
||||
- 'ram'
|
||||
- 'rm'
|
||||
- 'rtf'
|
||||
- 'sit'
|
||||
- 'sitx'
|
||||
- 'tar'
|
||||
- 'tgz'
|
||||
- 'tif'
|
||||
- 'tiff'
|
||||
- 'txt'
|
||||
- 'wav'
|
||||
- 'webm'
|
||||
- 'wma'
|
||||
- 'wmv'
|
||||
- 'xls'
|
||||
- 'xlsx'
|
||||
- 'xltx'
|
||||
- 'zip'
|
||||
- 'zipx'
|
||||
- 'stl'
|
||||
app_categories:
|
||||
document:
|
||||
- 'stl'
|
|
@ -1,38 +0,0 @@
|
|||
---
|
||||
Name: webapp-base-graphql
|
||||
After: graphqlconfig
|
||||
---
|
||||
SilverStripe\Control\Director:
|
||||
rules:
|
||||
'graphql': '%$SilverStripe\GraphQL\Controller.default'
|
||||
|
||||
SilverStripe\GraphQL\Controller:
|
||||
cors:
|
||||
Enabled: true
|
||||
Allow-Origin: '*'
|
||||
Allow-Headers: 'Authorization, Content-Type, Content-Language, apikey'
|
||||
Allow-Methods: 'GET, PUT, DELETE, OPTIONS, POST'
|
||||
#Allow-Credentials: 'true'
|
||||
Max-Age: 600 # 600 seconds = 10 minutes.
|
||||
|
||||
SilverStripe\GraphQL\Auth\Handler:
|
||||
authenticators:
|
||||
- class: App\GraphQL\APIKeyAuthenticator
|
||||
priority: 30
|
||||
|
||||
SilverStripe\GraphQL\Manager.default:
|
||||
properties:
|
||||
Middlewares:
|
||||
APIKeyMiddleware: App\GraphQL\APIKeyMiddleware
|
||||
|
||||
SilverStripe\GraphQL\Manager:
|
||||
schemas:
|
||||
default:
|
||||
types:
|
||||
member: 'App\GraphQL\MemberTypeCreator'
|
||||
page: 'App\GraphQL\PageTypeCreator'
|
||||
element: 'App\GraphQL\ElementTypeCreator'
|
||||
queries:
|
||||
readPages: 'App\GraphQL\PaginatedReadPagesQueryCreator'
|
||||
readMembers: 'App\GraphQL\ReadMembersQueryCreator'
|
||||
paginatedReadMembers: 'App\GraphQL\PaginatedReadMembersQueryCreator'
|
|
@ -1,5 +1,7 @@
|
|||
---
|
||||
Name: webapp-base-logs-dev
|
||||
After:
|
||||
- a2nt-cms-niceties-base-logs-dev
|
||||
Only:
|
||||
environment: dev
|
||||
---
|
||||
|
@ -16,6 +18,8 @@ SilverStripe\Core\Injector\Injector:
|
|||
CLIFormatter: '%$SilverStripe\Logging\DetailedErrorFormatter'
|
||||
---
|
||||
Name: webapp-base-logs-live
|
||||
After:
|
||||
- a2nt-cms-niceties-base-logs-live
|
||||
Except:
|
||||
environment: dev
|
||||
---
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
Name: webapp-base-mimeuploadvalidator
|
||||
After: '#mimeuploadvalidator'
|
||||
Only:
|
||||
moduleexists: 'silverstripe/mimevalidator'
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SilverStripe\Assets\Upload_Validator:
|
||||
class: SilverStripe\MimeValidator\MimeUploadValidator
|
|
@ -1,105 +0,0 @@
|
|||
---
|
||||
Name: 'webapp-base-security'
|
||||
After: 'framework/*, cms/*, security_baseline'
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SilverStripe\Security\MemberAuthenticator\LostPasswordHandler:
|
||||
class: App\Extensions\LostPasswordHandlerExtension
|
||||
SilverStripe\Security\MemberAuthenticator\MemberLoginForm:
|
||||
class: App\Extensions\SiteMemberLoginForm
|
||||
---
|
||||
Except:
|
||||
environment: dev
|
||||
---
|
||||
# Secure cookies
|
||||
SilverStripe\Control\Session:
|
||||
cookie_secure: true
|
||||
strict_user_agent_check: false
|
||||
timeout: 604800
|
||||
|
||||
SilverStripe\Forms\PasswordField:
|
||||
autocompleate: false
|
||||
|
||||
SilverStripe\Security\Member:
|
||||
lock_out_after_incorrect_logins: 5
|
||||
lock_out_delay_mins: 5
|
||||
# Password expiry should only happen when the password is leaked (optionally expire automatically if PCI/NIST compliance is required)
|
||||
# password_expiry_days: 90
|
||||
# instead of password change, we send out a notice on change of password OR Email (notify_account_security_change)
|
||||
notify_password_change: false
|
||||
#######################
|
||||
# Security Headers
|
||||
#######################
|
||||
#Controller:
|
||||
# security_headers:
|
||||
# # # Values may contain :security_reporting_base_url: placeholders, will be replaced with the URL to SecurityBaselineController endpoint
|
||||
# # Header-Directive: "value; another value;"
|
||||
# # X-Version-Alias-Of-Same-Header: "x:Header-Directive" # 'x-alias' headers may be aliased to the standard by a value starting with "x:Standard"
|
||||
# # X-Another-Alias-Version-Of-Same: "different; value syntax as well;"
|
||||
|
||||
#
|
||||
# A useful base from guttmann/silverstripe-security-headers - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#Security:
|
||||
#
|
||||
|
||||
# # Content-Security-Policy - https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
|
||||
# # Specifies approved sources of content that the browser may load from your website
|
||||
# # Useful: upgrade-insecure-requests; (Instructs browser to treat a site's insecure URLs as if they are HTTPS (eg for legacy sites)
|
||||
# # Example: Allow everything but only from the same origin:
|
||||
# Content-Security-Policy: "default-src 'self';"
|
||||
# # Example: Allow Google Analytics, Google AJAX CDN and Same Origin
|
||||
# Content-Security-Policy: "script-src 'self' www.google-analytics.com ajax.googleapis.com;"
|
||||
# # Example: Starter Policy - allows images, scripts, AJAX, form actions, and CSS from the same origin, and does not allow any
|
||||
# # other resources to load (eg object, frame, media, etc). It is a good starting point for many sites.
|
||||
# Content-Security-Policy: "default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';base-uri 'self';form-action 'self'"
|
||||
|
||||
# # Content-Security-Policy-Report-Only - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
|
||||
# # Allows web developers to experiment with policies by monitoring (but not enforcing) their effects
|
||||
# # Browsers capable of enforcing CSP will send a violation report as a POST request to report-uri
|
||||
# Content-Security-Policy-Report-Only: default-src https:; report-uri /security-reporting-endpoint/csp/
|
||||
# Content-Security-Policy-Report-Only: "default-src https:; script-src 'self' https: 'unsafe-inline' 'unsafe-eval'; connect-src 'self'; img-src 'self' https: data:; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'self'; report-uri /security-reporting-endpoint/csp/;"
|
||||
|
||||
# # Strict-Transport-Security - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
|
||||
# # Tells the browser to ONLY interact with the site using HTTPS and never HTTP
|
||||
# Strict-Transport-Security: "max-age=31536000" # time in seconds (one year=31536000) to remember that the site is only accessible over HTTPS
|
||||
|
||||
# # Frame-Options - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
|
||||
# # Disallowes pages to render within a frame - protects against clickjacking attacks
|
||||
# Frame-Options: "deny"
|
||||
|
||||
# # XSS-Protection - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
|
||||
# # protect against Cross-site Scripting attacks (value 1=sanitize (default in most browsers), set to "1; mode=block" to prevent rendering if attack is detected)
|
||||
# # Deprecated: if you do not need to support legacy browsers, it is recommended that you use Content-Security-Policy without allowing unsafe-inline scripts instead
|
||||
# X-XSS-Protection: "1; mode=block"
|
||||
|
||||
# # X-Content-Type-Options - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
|
||||
# # Indicate that the MIME types advertised in the Content-Type headers should not be changed and be followed
|
||||
# # NOTE: Opting out of MIME sniffing can cause HTML web pages to be downloaded instead of rendered when they are
|
||||
# # served with a MIME type other than text/html. Make sure to set both headers correctly.
|
||||
# # Site security testers usually expect this header to be set.
|
||||
# X-Content-Type-Options: "nosniff"
|
||||
|
||||
#
|
||||
# Some more from https://help.dreamhost.com/hc/en-us/articles/360036486952-Security-headers
|
||||
#
|
||||
|
||||
# # Referrer-Policy - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy
|
||||
# # controls how much referrer information should be sent to another server
|
||||
# Referrer-Policy: no-referrer
|
||||
|
||||
# # Feature-Policy - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
|
||||
# # (Experimental 2020) controls which browser features are allowed on your website, eg for sites allowing third-party content
|
||||
|
||||
# # CORS - Allow resource sharing with another domain (eg webfonts & ajax requests)
|
||||
# # Access-Control-Allow-Origin - developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
|
||||
|
||||
#
|
||||
# A further selection from https://github.com/bepsvpt/secure-headers/blob/master/config/secure-headers.php
|
||||
#
|
||||
|
||||
# Clear-Site-Data - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Clear-Site-Data
|
||||
# Clears browsing data (cookies, storage, cache) associated with the requesting website
|
||||
|
||||
# Expect-CT - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT
|
||||
# Lets sites opt in to reporting and/or enforcement of Certificate Transparency requirements,
|
||||
# to prevent the use of misissued certificates for that site from going unnoticed.
|
||||
# (will likely become obsolete in June 2021)
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
Name: 'webapp-base-version-truncator'
|
||||
---
|
||||
Axllent\VersionTruncator\VersionTruncator:
|
||||
keep_versions: 4 # how many (published) versions of each page to keep
|
||||
keep_drafts: 2 # how many drafts of each page to keep
|
||||
keep_redirects: true # keep page versions that have a different URLSegment (for redirects)
|
||||
keep_old_page_types: false # keep page versions where page type (ClassName) has changed
|
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
Name: 'webapp-debugbar'
|
||||
After:
|
||||
- 'framework'
|
||||
- 'debugbar'
|
||||
Only:
|
||||
environment: 'dev'
|
||||
---
|
||||
LeKoala\DebugBar\DebugBar:
|
||||
enabled_in_admin: false
|
||||
query_limit: 500
|
||||
max_header_length: 2048
|
|
@ -1,28 +0,0 @@
|
|||
---
|
||||
Name: webapp-env-check
|
||||
---
|
||||
|
||||
SilverStripe\EnvironmentCheck\EnvironmentCheckSuite:
|
||||
registered_checks:
|
||||
curl:
|
||||
definition: 'HasFunctionCheck("curl_init")'
|
||||
title: 'is curl available?'
|
||||
gd:
|
||||
definition: 'HasFunctionCheck("imagecreatetruecolor")'
|
||||
title: 'Does PHP have GD2 support?'
|
||||
db:
|
||||
definition: 'DatabaseCheck("Page")'
|
||||
title: 'Is the database accessible?'
|
||||
url:
|
||||
definition: 'URLCheck()'
|
||||
title: 'Is the homepage accessible?'
|
||||
registered_suites:
|
||||
check:
|
||||
- curl
|
||||
- gd
|
||||
- db
|
||||
- url
|
||||
health:
|
||||
- db
|
||||
- url
|
||||
|
|
@ -4,6 +4,7 @@ After:
|
|||
- webapp-extensions
|
||||
- webapp-elemental
|
||||
- webapp-locale
|
||||
- a2nt-cms-niceties-locale-fluent
|
||||
---
|
||||
# Define Fluent locales
|
||||
TractorCow\Fluent\Model\Locale:
|
||||
|
@ -29,14 +30,14 @@ Page:
|
|||
extensions:
|
||||
- DNADesign\Elemental\TopPage\SiteTreeExtension
|
||||
- DNADesign\Elemental\Extensions\ElementalPageExtension
|
||||
- App\Extensions\PageFluentExtension
|
||||
- A2nt\CMSNiceties\Extensions\PageFluentExtension
|
||||
|
||||
DNADesign\Elemental\Models\ElementalArea:
|
||||
extensions:
|
||||
- DNADesign\Elemental\TopPage\FluentExtension
|
||||
- App\Extensions\ElementalArea
|
||||
- A2nt\CMSNiceties\Extensions\ElementalArea
|
||||
|
||||
DNADesign\Elemental\Models\BaseElement:
|
||||
extensions:
|
||||
- DNADesign\Elemental\TopPage\FluentExtension
|
||||
- App\Extensions\ElementRows
|
||||
- A2nt\CMSNiceties\Extensions\ElementRows
|
||||
|
|
|
@ -1,59 +1,9 @@
|
|||
---
|
||||
Name: webapp-locale
|
||||
After:
|
||||
- a2nt-cms-niceties-locale
|
||||
---
|
||||
|
||||
Symbiote\Addressable\Addressable:
|
||||
allowed_countries:
|
||||
'us': 'United States'
|
||||
allowed_states:
|
||||
'AL': 'Alabama'
|
||||
'AK': 'Alaska'
|
||||
'AZ': 'Arizona'
|
||||
'AR': 'Arkansas'
|
||||
'CA': 'California'
|
||||
'CO': 'Colorado'
|
||||
'CT': 'Connecticut'
|
||||
'DE': 'Delaware'
|
||||
'DC': 'District Of Columbia'
|
||||
'FL': 'Florida'
|
||||
'GA': 'Georgia'
|
||||
'HI': 'Hawaii'
|
||||
'ID': 'Idaho'
|
||||
'IL': 'Illinois'
|
||||
'IN': 'Indiana'
|
||||
'IA': 'Iowa'
|
||||
'KS': 'Kansas'
|
||||
'KY': 'Kentucky'
|
||||
'LA': 'Louisiana'
|
||||
'ME': 'Maine'
|
||||
'MD': 'Maryland'
|
||||
'MA': 'Massachusetts'
|
||||
'MI': 'Michigan'
|
||||
'MN': 'Minnesota'
|
||||
'MS': 'Mississippi'
|
||||
'MO': 'Missouri'
|
||||
'MT': 'Montana'
|
||||
'NE': 'Nebraska'
|
||||
'NV': 'Nevada'
|
||||
'NH': 'New Hampshire'
|
||||
'NJ': 'New Jersey'
|
||||
'NM': 'New Mexico'
|
||||
'NY': 'New York'
|
||||
'NC': 'North Carolina'
|
||||
'ND': 'North Dakota'
|
||||
'OH': 'Ohio'
|
||||
'OK': 'Oklahoma'
|
||||
'OR': 'Oregon'
|
||||
'PA': 'Pennsylvania'
|
||||
'RI': 'Rhode Island'
|
||||
'SC': 'South Carolina'
|
||||
'SD': 'South Dakota'
|
||||
'TN': 'Tennessee'
|
||||
'TX': 'Texas'
|
||||
'UT': 'Utah'
|
||||
'VT': 'Vermont'
|
||||
'VA': 'Virginia'
|
||||
'WA': 'Washington'
|
||||
'WV': 'West Virginia'
|
||||
'WI': 'Wisconsin'
|
||||
'WY': 'Wyoming'
|
||||
'us': 'United States'
|
|
@ -4,46 +4,16 @@ After:
|
|||
- elemental
|
||||
- elemental-list
|
||||
- elementalvirtual
|
||||
- elemental-basics
|
||||
- a2nt-cms-niceties-options-elements
|
||||
- webapp-base-extensions
|
||||
---
|
||||
|
||||
# User Forms module
|
||||
DNADesign\ElementalUserForms\Model\ElementForm:
|
||||
extensions:
|
||||
- App\Elements\Extensions\UserDefinedFormExtension
|
||||
|
||||
SilverStripe\UserForms\Model\UserDefinedForm:
|
||||
show_in_sitetree: false
|
||||
can_be_root: false
|
||||
extensions:
|
||||
- App\Elements\Extensions\UserDefinedFormExtension
|
||||
##################
|
||||
|
||||
Page:
|
||||
searchable_elements:
|
||||
- DNADesign\Elemental\Models\ElementContent
|
||||
extensions:
|
||||
- DNADesign\Elemental\Extensions\ElementalPageExtension
|
||||
|
||||
SilverStripe\CMS\Controllers\ContentController:
|
||||
extensions:
|
||||
- DNADesign\Elemental\Extensions\ElementalContentControllerExtension
|
||||
- App\Elements\ElementalContentControllerExtension
|
||||
url_handlers:
|
||||
'element/$ID!': 'handleElement'
|
||||
|
||||
DNADesign\Elemental\Models\ElementalArea:
|
||||
extensions:
|
||||
#- DNADesign\Elemental\TopPage\DataExtension
|
||||
- App\Elements\Extensions\ElementalArea
|
||||
|
||||
DNADesign\Elemental\Models\BaseElement:
|
||||
default_global_elements: true
|
||||
extensions:
|
||||
#- DNADesign\Elemental\TopPage\DataExtension
|
||||
- App\Elements\Extensions\BaseElementEx
|
||||
- App\Elements\Extensions\ElementRows
|
||||
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
allowed_elements:
|
||||
- DNADesign\ElementalList\Model\ElementList
|
||||
|
@ -53,21 +23,18 @@ SilverStripe\CMS\Model\SiteTree:
|
|||
- Dynamic\Elements\Blog\Elements\ElementBlogPosts
|
||||
- Dynamic\Elements\Oembed\Elements\ElementOembed
|
||||
- Dynamic\Elements\Elements\ElementTestimonials
|
||||
#- App\Elements\TeamMembersElement
|
||||
- App\Elements\SliderElement
|
||||
- App\Elements\BlockElement
|
||||
- App\Elements\MapElement
|
||||
#- App\Elements\AccordionElement
|
||||
#- A2nt\ElementalBasics\Elements\TeamMembersElement
|
||||
- A2nt\ElementalBasics\Elements\SliderElement
|
||||
- A2nt\ElementalBasics\Elements\MapElement
|
||||
#- A2nt\ElementalBasics\Elements\AccordionElement
|
||||
- DNADesign\ElementalVirtual\Model\ElementVirtual
|
||||
- App\Elements\AccordionElement
|
||||
- App\Elements\CustomSnippetElement
|
||||
- App\Elements\InstagramElement
|
||||
- A2nt\ElementalBasics\Elements\AccordionElement
|
||||
- A2nt\ElementalBasics\Elements\CustomSnippetElement
|
||||
- A2nt\ElementalBasics\Elements\InstagramElement
|
||||
|
||||
DNADesign\ElementalList\Model\ElementList:
|
||||
inline_editable: false
|
||||
default_global_elements: false
|
||||
extensions:
|
||||
- App\Elements\ElementListExtension
|
||||
allowed_elements:
|
||||
- DNADesign\ElementalList\Model\ElementList
|
||||
- DNADesign\Elemental\Models\ElementContent
|
||||
|
@ -76,31 +43,12 @@ DNADesign\ElementalList\Model\ElementList:
|
|||
- Dynamic\Elements\Blog\Elements\ElementBlogPosts
|
||||
- Dynamic\Elements\Oembed\Elements\ElementOembed
|
||||
- Dynamic\Elements\Elements\ElementTestimonials
|
||||
#- App\Elements\TeamMembersElement
|
||||
- App\Elements\SliderElement
|
||||
- App\Elements\BlockElement
|
||||
- App\Elements\MapElement
|
||||
- App\Elements\AccordionElement
|
||||
- App\Elements\CustomSnippetElement
|
||||
- App\Elements\InstagramElement
|
||||
#- A2nt\ElementalBasics\Elements\TeamMembersElement
|
||||
- A2nt\ElementalBasics\Elements\SliderElement
|
||||
- A2nt\ElementalBasics\Elements\MapElement
|
||||
- A2nt\ElementalBasics\Elements\AccordionElement
|
||||
- A2nt\ElementalBasics\Elements\CustomSnippetElement
|
||||
- A2nt\ElementalBasics\Elements\InstagramElement
|
||||
styles:
|
||||
whiteframe: 'White Frame'
|
||||
noframe: 'No Frame'
|
||||
|
||||
App\Elements\AccordionElement:
|
||||
allowed_elements:
|
||||
- DNADesign\Elemental\Models\ElementContent
|
||||
|
||||
DNADesign\Elemental\Models\ElementContent:
|
||||
default_global_elements: false
|
||||
inline_editable: false
|
||||
extensions:
|
||||
- App\Elements\Extensions\ElementContentWidget
|
||||
frontend_searchable_fields:
|
||||
- 'Title:PartialMatch'
|
||||
- 'HTML:PartialMatch'
|
||||
|
||||
Dynamic\Elements\Image\Elements\ElementImage:
|
||||
inline_editable: false
|
||||
extensions:
|
||||
- App\Elements\Extensions\ElementImageWidget
|
||||
|
|
|
@ -1,33 +1,5 @@
|
|||
---
|
||||
Name: webapp-options-widgets
|
||||
---
|
||||
# Blog + Widgets module extensions
|
||||
Page:
|
||||
extensions:
|
||||
- App\Widgets\WidgetPageExtension
|
||||
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
extensions:
|
||||
- App\Extensions\BlogExtension
|
||||
SilverStripe\Blog\Model\BlogPost:
|
||||
extensions:
|
||||
- App\Extensions\BlogPostExtension
|
||||
|
||||
SilverStripe\Widgets\Model\Widget:
|
||||
icon: '<i class="icon font-icon-p-document"></i>'
|
||||
extensions:
|
||||
- App\Widgets\WidgetExtension
|
||||
SilverStripe\Blog\Widgets\BlogArchiveWidget:
|
||||
icon: '<i class="icon font-icon-p-archive"></i>'
|
||||
SilverStripe\Blog\Widgets\BlogCategoriesWidget:
|
||||
icon: '<i class="icon font-icon-page-multiple"></i>'
|
||||
SilverStripe\Blog\Widgets\BlogFeaturedPostsWidget:
|
||||
icon: '<i class="icon font-icon-chart-line"></i>'
|
||||
SilverStripe\Blog\Widgets\BlogRecentPostsWidget:
|
||||
icon: '<i class="icon font-icon-back-in-time"></i>'
|
||||
SilverStripe\Blog\Widgets\BlogTagsCloudWidget:
|
||||
icon: '<i class="icon font-icon-tags"></i>'
|
||||
SilverStripe\Blog\Widgets\BlogTagsWidget:
|
||||
icon: '<i class="icon font-icon-tags"></i>'
|
||||
only_available_in:
|
||||
- CMSMain_HiddenClass
|
||||
After:
|
||||
- a2nt-cms-niceties-options-widgets
|
||||
---
|
|
@ -1,22 +1,24 @@
|
|||
---
|
||||
Name: webapp-shop
|
||||
After:
|
||||
- a2nt-cms-niceties-shop
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SilverShop\Checkout\SinglePageCheckoutComponentConfig:
|
||||
class: App\Models\CheckoutNoDeliveryConfig
|
||||
class: A2nt\CMSNiceties\Models\CheckoutNoDeliveryConfig
|
||||
|
||||
SilverShop\Extension\ShopConfigExtension:
|
||||
base_currency: USD
|
||||
|
||||
SilverShop\Model\Address:
|
||||
extensions:
|
||||
- App\Extensions\AddressExtension
|
||||
- A2nt\CMSNiceties\Extensions\AddressExtension
|
||||
|
||||
SilverShop\Cart\ShoppingCartController:
|
||||
extensions:
|
||||
- App\Extensions\ShoppingCartControllerExtension
|
||||
- A2nt\CMSNiceties\Extensions\ShoppingCartControllerExtension
|
||||
|
||||
App\Templates\DeferedRequirements:
|
||||
A2nt\CMSNiceties\Templates\DeferedRequirements:
|
||||
custom_requirements:
|
||||
SilverShop\Page\AccountPageController:
|
||||
- SilverShop.Page.CheckoutPageController.js
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
---
|
||||
Name: webapp-templates-requirements
|
||||
After:
|
||||
- a2nt-cms-niceties-templates-requirements
|
||||
---
|
||||
App\Templates\DeferredRequirements:
|
||||
A2nt\CMSNiceties\Templates\DeferredRequirements:
|
||||
nofontawesome: false
|
||||
version: false
|
||||
static_domain: false
|
||||
|
|
|
@ -2,18 +2,19 @@
|
|||
Name: webapp-templates-themes
|
||||
After:
|
||||
- webapp-options-elements
|
||||
- a2nt-cms-niceties-templates-themes
|
||||
---
|
||||
SilverStripe\View\SSViewer:
|
||||
source_file_comments: false
|
||||
source_file_comments: true
|
||||
themes:
|
||||
- '$public'
|
||||
- '$default'
|
||||
|
||||
App\Elements\SliderElement:
|
||||
A2nt\ElementalBasics\Elements\SliderElement:
|
||||
slide_width: 2140
|
||||
slide_height: 700
|
||||
|
||||
# 2x container width to automatically resize images for 2K display
|
||||
App\Elements\Extensions\ElementRows:
|
||||
A2nt\ElementalBasics\Extensions\ElementRows:
|
||||
container_max_width: 2280
|
||||
column_class: 'col-block col-md'
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# with all configuration variables presented
|
||||
# Cuz WebPack compiling script use it to set configuration
|
||||
|
||||
App\Templates\WebpackTemplateProvider:
|
||||
A2nt\CMSNiceties\Templates\WebpackTemplateProvider:
|
||||
APPDIR: './app'
|
||||
THEMESDIR: './themes'
|
||||
HOSTNAME: 127.0.0.1
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
|||
#Menu-Dynamic-Elements-Admin-TestimonialsAdmin,#Menu-Dynamic-Elements-Promos-Admin-PromosAdmin,#Menu-Dynamic-Elements-Sponsors-Admin-SponsorsAdmin,#Menu-SilverStripe-CampaignAdmin-CampaignAdmin{display:none}#Form_ItemEditForm_MajorActions_Holder{border:0;margin-bottom:0;min-width:30%;padding-bottom:0}#Form_EditForm_MajorActions_Holder{border:0;margin-bottom:0;min-width:70%;padding-bottom:0}#Form_ItemEditForm_RightGroup_Holder{border:0;margin-bottom:0;min-width:20%;padding-bottom:0}.grid-field__icon-action.edit-link{opacity:1}.toolbar--south .btn-primary{color:#fff}.toolbar--south .btn-outline-primary{color:#999}#ActionMenus_MoreOptions .btn-primary{color:#5589a7}body.cms{flex-direction:column;overflow-x:hidden}.fields-compact .form-group{margin-bottom:.25rem;padding-bottom:.5rem}.fields-compact .form-group .form__field-label{font-weight:700}.fields-compact .form-group:after{margin-bottom:.25rem}.fields-compact .form-group:after,.fields-compact .form__divider:after{display:none}.fields-row{margin:0!important;padding:0 0 2em!important;width:100%}.fields-row .form__fieldgroup{display:flex;flex:0 0 100%!important;flex-wrap:wrap;margin:0!important;max-width:100%!important;padding:0!important;width:100%!important}.fields-row .form__fieldgroup>.form-group{flex:1 1 50%;margin:0!important;max-width:50%;padding:0 1rem}.notifications-list .alert .btn-close{display:none}
|
|
@ -0,0 +1 @@
|
|||
.table,table{--bs-table-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0,0,0,0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0,0,0,0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0,0,0,0.075);border-color:#dee2e6;color:#212529;margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*,table>:not(caption)>*>*{background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg);padding:.5rem}.table>tbody,table>tbody{vertical-align:inherit}.table>thead,table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*,table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*,table>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*,table>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*,table.table-none>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd),table>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;border-color:#bacbe6;color:#000}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;border-color:#cbccce;color:#000}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;border-color:#bcd0c7;color:#000}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;border-color:#badce3;color:#000}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;border-color:#e6dbb9;color:#000}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;border-color:#dfc2c4;color:#000}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;border-color:#dfe0e1;color:#000}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;border-color:#373b3e;color:#fff}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1167.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}body,html{background:#fff;color:#212529}.captionImage,.image,.ss-htmleditorfield-file,img{display:block;margin-bottom:var(--body-gutter-reduced-y);margin-top:var(--body-gutter-reduced-y);max-width:100%}@media (min-width:576px){.captionImage,.image,.ss-htmleditorfield-file,img{margin-left:var(--body-gutter-reduced-x);margin-right:var(--body-gutter-reduced-x)}}.captionImage.center,.image.center,.ss-htmleditorfield-file.center,img.center{margin-left:auto;margin-right:auto;text-align:center}.captionImage.w-100,.image.w-100,.ss-htmleditorfield-file.w-100,img.w-100{margin-left:0;margin-right:0;text-align:center}.captionImage.left,.captionImage.leftAlone,.captionImage.start,.image.left,.image.leftAlone,.image.start,.ss-htmleditorfield-file.left,.ss-htmleditorfield-file.leftAlone,.ss-htmleditorfield-file.start,img.left,img.leftAlone,img.start{clear:left;float:left}@media (min-width:576px){.captionImage.left,.captionImage.leftAlone,.captionImage.start,.image.left,.image.leftAlone,.image.start,.ss-htmleditorfield-file.left,.ss-htmleditorfield-file.leftAlone,.ss-htmleditorfield-file.start,img.left,img.leftAlone,img.start{margin:0 var(--body-gutter-reduced-x) var(--body-gutter-reduced-y) 0}}.captionImage.end,.captionImage.right,.captionImage.rightAlone,.image.end,.image.right,.image.rightAlone,.ss-htmleditorfield-file.end,.ss-htmleditorfield-file.right,.ss-htmleditorfield-file.rightAlone,img.end,img.right,img.rightAlone{clear:right;float:right}@media (min-width:576px){.captionImage.end,.captionImage.right,.captionImage.rightAlone,.image.end,.image.right,.image.rightAlone,.ss-htmleditorfield-file.end,.ss-htmleditorfield-file.right,.ss-htmleditorfield-file.rightAlone,img.end,img.right,img.rightAlone{margin:var(--body-gutter-reduced-y) 0 0 var(--body-gutter-reduced-x)}}.captionImage iframe,.image iframe,.ss-htmleditorfield-file iframe,img iframe{height:100%!important;width:100%!important}.captionImage img{margin-bottom:var(--body-gutter-reduced-y)!important}.captionImage .caption{font-size:.8rem}.left,.text-left,.text-start{text-align:left}.center,.text-center{text-align:center}.right,.text-end,.text-right{text-align:right}.text-justify{text-align:justify}table{border-collapse:collapse;max-width:100%;width:100%}table.table-none{border:0}table.table-none td,table.table-none th,table.table-none tr{background:none!important;border:0;box-shadow:none!important}ol,ul{padding-left:1rem}ol li,ul li{margin:.5em 0;padding-left:.5em;position:relative}ul,ul li{list-style:none}ul li{padding-left:0}ul li:before{content:"\2022";display:inline-block;font-size:1em;left:-.75em;margin-right:.5em;opacity:.5;position:absolute;top:-.1em}iframe,img,p,table,td,th,tr{max-width:100%!important}@media (max-width:575px){iframe,img,p,table,td,th,tr{border:0!important;display:block;padding-left:0!important;padding-right:0!important;width:100%!important}img,p,table,td,th,tr{height:auto!important}.d-typography-breakpoint-none{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}thead{display:block;text-align:center}thead>tr{display:flex}tbody{display:block}td{display:flex;flex-direction:column}td:before{content:attr(data-label);display:block;font-weight:700;min-width:50%;padding:0 .5rem;width:50%}}img{border:1px dashed}a{color:#0d6efd}img{border:1px dashed #dedede}
|
|
@ -0,0 +1 @@
|
|||
h1.title{border-bottom:1px solid #dee2e6;display:block;line-height:1.5em;text-align:right;text-transform:uppercase}.warningMessage{background-color:#fff3cd;border:1px solid #ffeeba;border-radius:.25rem;color:#856404;margin-bottom:1rem;padding:1rem;position:relative}#Content{margin:auto;padding-left:20px;text-align:left}#Content .emailTitle{font-size:2.5rem;font-weight:400}#Content .emailTitle,#Content .PageTitle{font-family:Roboto,system-ui,-apple-system,Segoe UI,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}#Content .PageTitle{color:#212529;font-size:14px;padding:5px}#Content .footer td{padding:10px}#Content .footer td.right{text-align:right}#Content .typography{padding:0 10px}#Content .typography a{font-size:1em;text-decoration:underline}#Content .typography a:hover{text-decoration:none}#Content .typography ul{padding:2px 15px}#Content .typography ul li{padding:2px 5px}#Content .typography p{color:#212529;margin:.75em 0}table#SenderTable .meta,table#SenderTable .sender{width:50%}table#MetaTable{margin-left:auto}table#MetaTable .label{font-weight:700}#ShippingTable td,#ShippingTable th{width:50%}table.infotable{background:#fff;border:1px solid #dee2e6;border-collapse:collapse;margin-top:10px;width:100%}table.infotable td.product.title{color:#0d6efd;font-family:Roboto,system-ui,-apple-system,Segoe UI,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1.75rem;font-weight:400}table.infotable tr td,table.infotable tr th{border:1px solid #dee2e6;color:#212529;padding:5px}table.infotable td{vertical-align:middle}table.infotable tr.summary{font-weight:700}table.infotable td.ordersummary{border-bottom:1px solid #dee2e6;font-size:1em}table.infotable tr th{font-weight:700}table.infotable tr td a{color:#0d6efd;text-decoration:underline}table.infotable tr td a:hover{text-decoration:none}table.infotable .modifierRow,table.infotable .right,table.infotable .threeColHeader{text-align:right}table.infotable .center{text-align:center}table.infotable .left,table.infotable th{text-align:left}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -4,14 +4,20 @@
|
|||
"app": 143,
|
||||
"app_SilverShop.Page.CheckoutPageController": 193,
|
||||
"app_Site.Controllers.MapElementController": 133,
|
||||
"app_cms": 498,
|
||||
"app_dev": 206,
|
||||
"app_editor": 831,
|
||||
"app_order": 299,
|
||||
"sample": 148
|
||||
},
|
||||
"bySource": {
|
||||
"0 app": 143,
|
||||
"0 app_SilverShop.Page.CheckoutPageController": 193,
|
||||
"0 app_Site.Controllers.MapElementController": 133,
|
||||
"0 app_cms": 498,
|
||||
"0 app_dev": 206,
|
||||
"0 app_editor": 831,
|
||||
"0 app_order": 299,
|
||||
"0 sample": 148
|
||||
},
|
||||
"usedIds": [
|
||||
|
@ -19,10 +25,13 @@
|
|||
143,
|
||||
148,
|
||||
193,
|
||||
206
|
||||
206,
|
||||
299,
|
||||
498,
|
||||
831
|
||||
]
|
||||
},
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/repositories/silverstripe-webpack/node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@11.0.1_node-sass@5.0.0+webpack@5.36.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/app.scss": [
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/web/emmaus/node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/app.scss": [
|
||||
{
|
||||
"chunks": {
|
||||
"byName": {
|
||||
|
@ -37,17 +46,17 @@
|
|||
},
|
||||
"modules": {
|
||||
"byIdentifier": {
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/runtime/api.js": 741,
|
||||
"./node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@11.0.1_node-sass@5.0.0+webpack@5.36.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/app.scss": 517
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/runtime/api.js": 376,
|
||||
"./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/app.scss": 178
|
||||
},
|
||||
"usedIds": [
|
||||
517,
|
||||
741
|
||||
178,
|
||||
376
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/repositories/silverstripe-webpack/node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@11.0.1_node-sass@5.0.0+webpack@5.36.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/dev.scss": [
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/web/emmaus/node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/cms.scss": [
|
||||
{
|
||||
"chunks": {
|
||||
"byName": {
|
||||
|
@ -62,17 +71,17 @@
|
|||
},
|
||||
"modules": {
|
||||
"byIdentifier": {
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/runtime/api.js": 741,
|
||||
"./node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@11.0.1_node-sass@5.0.0+webpack@5.36.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/dev.scss": 236
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/runtime/api.js": 376,
|
||||
"./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/cms.scss": 999
|
||||
},
|
||||
"usedIds": [
|
||||
236,
|
||||
741
|
||||
376,
|
||||
999
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/repositories/silverstripe-webpack/node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@11.0.1_node-sass@5.0.0+webpack@5.36.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./themes/sample/client/src/scss/app.scss": [
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/web/emmaus/node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/dev.scss": [
|
||||
{
|
||||
"chunks": {
|
||||
"byName": {
|
||||
|
@ -87,12 +96,87 @@
|
|||
},
|
||||
"modules": {
|
||||
"byIdentifier": {
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/runtime/api.js": 741,
|
||||
"./node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@11.0.1_node-sass@5.0.0+webpack@5.36.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./themes/sample/client/src/scss/app.scss": 535
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/runtime/api.js": 376,
|
||||
"./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/dev.scss": 759
|
||||
},
|
||||
"usedIds": [
|
||||
535,
|
||||
741
|
||||
376,
|
||||
759
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/web/emmaus/node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/editor.scss": [
|
||||
{
|
||||
"chunks": {
|
||||
"byName": {
|
||||
"child": 396
|
||||
},
|
||||
"bySource": {
|
||||
"0 child": 396
|
||||
},
|
||||
"usedIds": [
|
||||
396
|
||||
]
|
||||
},
|
||||
"modules": {
|
||||
"byIdentifier": {
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/runtime/api.js": 376,
|
||||
"./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/editor.scss": 619
|
||||
},
|
||||
"usedIds": [
|
||||
376,
|
||||
619
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/web/emmaus/node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/order.scss": [
|
||||
{
|
||||
"chunks": {
|
||||
"byName": {
|
||||
"child": 396
|
||||
},
|
||||
"bySource": {
|
||||
"0 child": 396
|
||||
},
|
||||
"usedIds": [
|
||||
396
|
||||
]
|
||||
},
|
||||
"modules": {
|
||||
"byIdentifier": {
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/runtime/api.js": 376,
|
||||
"./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/order.scss": 264
|
||||
},
|
||||
"usedIds": [
|
||||
264,
|
||||
376
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mini-css-extract-plugin /mnt/data/srv/dist/web/emmaus/node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./themes/sample/client/src/scss/app.scss": [
|
||||
{
|
||||
"chunks": {
|
||||
"byName": {
|
||||
"child": 396
|
||||
},
|
||||
"bySource": {
|
||||
"0 child": 396
|
||||
},
|
||||
"usedIds": [
|
||||
396
|
||||
]
|
||||
},
|
||||
"modules": {
|
||||
"byIdentifier": {
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/runtime/api.js": 376,
|
||||
"./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./themes/sample/client/src/scss/app.scss": 726
|
||||
},
|
||||
"usedIds": [
|
||||
376,
|
||||
726
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -100,195 +184,157 @@
|
|||
"modules": {
|
||||
"byIdentifier": {
|
||||
"./app/client/src/img|sync|nonrecursive|../../../../../../\\.(png|jpe?g|svg)$/": 6999,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./app/client/src/js/app.js|a5917c09a0f6659a1f0bf38df57f514b": 2806,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./app/client/src/js/types/SilverShop.Page.CheckoutPageController.js": 9942,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./app/client/src/js/types/Site.Controllers.MapElementController.js": 8436,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@a2nt+ss-bootstrap-ui-webpack-boilerplate-react@3.2.1/node_modules/@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/js/_components/_main.funcs.js": 1882,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/cache/index.js|2e8c7cb0a9b4c4989c86d6def0daa7b9": 4662,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/cache/inmemory/types.js": 9178,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/core/ApolloClient.js|2f9da32edbed0a5a619faf681e7206ea": 639,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/core/ObservableQuery.js|332cb52eb8612d08f6eaf2790bb6d1fd": 6950,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/core/index.js": 361,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/core/networkStatus.js": 4304,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/core/types.js": 2631,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/errors/index.js": 3344,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/index.js": 4747,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/ApolloLink.js": 678,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/concat.js": 1648,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/empty.js": 3960,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/execute.js": 7128,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/from.js": 244,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/index.js": 159,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/split.js": 3954,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/types.js": 549,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/http/index.js|d5cf1fa735c7dc13e6a141d818199f93": 8845,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/utils/index.js|299345fd9c3d65fd9bdf1fae2498f686": 5766,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/react/context/index.js|e01051d8efd099e307c26098deba46d5": 5812,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/react/hooks/index.js|6ba8000a4ce641970b398174e3692801": 6550,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/react/index.js": 3165,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/react/parser/index.js": 8062,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/react/types/types.js": 1305,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.16_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/utilities/index.js|901864c80b6fcfe76164853ea9ac75d9": 3423,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@wry+equality@0.4.0/node_modules/@wry/equality/lib/equality.esm.js": 1429,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js": 9614,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/xhr.js": 7205,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/axios.js": 5392,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/Cancel.js": 476,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/CancelToken.js": 8418,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/isCancel.js": 8976,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/Axios.js": 9706,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/InterceptorManager.js": 3509,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/buildFullPath.js": 1124,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js": 9747,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/dispatchRequest.js": 9041,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/enhanceError.js": 9215,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/mergeConfig.js": 8200,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js": 7401,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/transformData.js": 249,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/defaults.js": 4095,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/bind.js": 1802,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/buildURL.js": 2197,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/combineURLs.js": 4578,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/cookies.js": 6303,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAbsoluteURL.js": 6597,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAxiosError.js": 8523,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isURLSameOrigin.js": 1970,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/normalizeHeaderName.js": 3988,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/parseHeaders.js": 8414,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/spread.js": 2048,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js": 3985,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/balanced-match@2.0.0/node_modules/balanced-match/index.js": 2913,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/brace-expansion@2.0.1/node_modules/brace-expansion/index.js": 3936,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js": 7301,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/github.com+jsanahuja+instagramfeed@a865251c54154106cc132f3617bea1e7bdfbce72/node_modules/@jsanahuja/instagramfeed/src/InstagramFeed.js": 6062,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/graphql-tag@2.12.4_graphql@15.5.0/node_modules/graphql-tag/lib/index.js|c305563add7b1eeacd8a89da9244ebc6": 9756,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/keyboardjs@2.6.4/node_modules/keyboardjs/dist/keyboard.js": 5035,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js": 9110,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/prop-types@15.7.2/node_modules/prop-types/factoryWithThrowingShims.js": 5901,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/prop-types@15.7.2/node_modules/prop-types/index.js": 5295,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/prop-types@15.7.2/node_modules/prop-types/lib/ReactPropTypesSecret.js": 9125,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/react-easy-swipe@0.0.21/node_modules/react-easy-swipe/lib/index.js": 2981,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/react-easy-swipe@0.0.21/node_modules/react-easy-swipe/lib/react-swipe.js": 4921,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/react-tiny-oembed@1.0.1_react-dom@17.0.2+react@17.0.2/node_modules/react-tiny-oembed/lib/index.js": 3427,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/symbol-observable@4.0.0/node_modules/symbol-observable/es/index.js|d685847f199ef80ce2965d080bc5ad49": 9743,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/ts-invariant@0.7.3/node_modules/ts-invariant/lib/invariant.esm.js": 394,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/tslib@2.2.0/node_modules/tslib/tslib.es6.js": 2965,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/zen-observable@0.8.15/node_modules/zen-observable/index.js": 6339,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/zen-observable@0.8.15/node_modules/zen-observable/lib/Observable.js": 8379,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_90f0e7531115e738439b96a1279188c2/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./themes/sample/client/src/js/app.js": 9097,
|
||||
"./node_modules/.pnpm/graphql@15.5.0/node_modules/graphql/jsutils/inspect.mjs": 6430,
|
||||
"./node_modules/.pnpm/graphql@15.5.0/node_modules/graphql/jsutils/nodejsCustomInspectSymbol.mjs": 5332,
|
||||
"./node_modules/.pnpm/graphql@15.5.0/node_modules/graphql/language/ast.mjs|bbc8eee65fe5c74a5bd5089105512412": 8265,
|
||||
"./node_modules/.pnpm/graphql@15.5.0/node_modules/graphql/language/blockString.mjs": 2464,
|
||||
"./node_modules/.pnpm/graphql@15.5.0/node_modules/graphql/language/visitor.mjs": 4893,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/bg.png": 3300,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/logo.png": 8864,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/logo.svg": 625,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/original.png": 6843,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/original2.png": 4730,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/photo1.png": 9272,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/photo2.jpg": 8616,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.36.2/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/photo3.svg": 5802,
|
||||
"./node_modules/.pnpm/mini-css-extract-plugin@1.6.0_webpack@5.36.2/node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/.pnpm/css-loader@5.2.4_webpack@5.36.2/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@11.0.1_node-sass@5.0.0+webpack@5.36.2/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/dev.scss": 8833,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./app/client/src/js/app.js|72705d77d619901052c22d90e4bd8674": 1095,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./app/client/src/js/types/SilverShop.Page.CheckoutPageController.js": 8433,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./app/client/src/js/types/Site.Controllers.MapElementController.js": 9116,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@a2nt+ss-bootstrap-ui-webpack-boilerplate-react@3.2.4/node_modules/@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/js/_components/_main.funcs.js": 2172,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/cache/inmemory/types.js": 4570,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/core/index.js": 1673,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/core/types.js": 9010,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/index.js": 9997,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/ApolloLink.js|6e734b001f5ab11803b6ecd00f909d9b": 3227,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/link/core/index.js|ce33e0f09de4616d680737696ef5ce5e": 2621,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/react/index.js": 2780,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/react/types/types.js": 8823,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/utilities/graphql/fragments.js": 3970,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/utilities/graphql/getFromAST.js": 2264,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/@apollo+client@3.3.20_graphql@15.5.0+react@17.0.2/node_modules/@apollo/client/utilities/graphql/storeUtils.js": 1379,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/index.js": 2967,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/adapters/xhr.js": 6306,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/axios.js": 7525,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/Cancel.js": 2403,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/CancelToken.js": 8732,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/cancel/isCancel.js": 9136,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/Axios.js": 6264,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/InterceptorManager.js": 1553,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/buildFullPath.js": 3398,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/createError.js": 8830,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/dispatchRequest.js": 6689,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/enhanceError.js": 8365,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/mergeConfig.js": 4000,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/settle.js": 7717,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/core/transformData.js": 4422,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/defaults.js": 7276,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/bind.js": 994,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/buildURL.js": 3093,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/combineURLs.js": 5197,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/cookies.js": 6204,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAbsoluteURL.js": 1576,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isAxiosError.js": 1585,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/isURLSameOrigin.js": 2330,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/normalizeHeaderName.js": 8968,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/parseHeaders.js": 2097,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/helpers/spread.js": 191,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/axios@0.21.1/node_modules/axios/lib/utils.js": 8257,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/balanced-match@2.0.0/node_modules/balanced-match/index.js": 2939,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/brace-expansion@2.0.1/node_modules/brace-expansion/index.js": 2937,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js": 878,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/github.com+jsanahuja+instagramfeed@a865251c54154106cc132f3617bea1e7bdfbce72/node_modules/@jsanahuja/instagramfeed/src/InstagramFeed.js": 4734,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/keyboardjs@2.6.4/node_modules/keyboardjs/dist/keyboard.js": 8996,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch/minimatch.js": 6429,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/prop-types@15.7.2/node_modules/prop-types/factoryWithThrowingShims.js": 2380,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/prop-types@15.7.2/node_modules/prop-types/index.js": 2450,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/prop-types@15.7.2/node_modules/prop-types/lib/ReactPropTypesSecret.js": 7292,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/react-easy-swipe@0.0.21/node_modules/react-easy-swipe/lib/index.js": 1428,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/react-easy-swipe@0.0.21/node_modules/react-easy-swipe/lib/react-swipe.js": 9878,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/react-tiny-oembed@1.0.1_react-dom@17.0.2+react@17.0.2/node_modules/react-tiny-oembed/lib/index.js": 5239,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/ts-invariant@0.7.5/node_modules/ts-invariant/lib/invariant.esm.js": 9073,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/tslib@2.3.0/node_modules/tslib/tslib.es6.js": 9099,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/zen-observable@0.8.15/node_modules/zen-observable/index.js": 1117,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./node_modules/.pnpm/zen-observable@0.8.15/node_modules/zen-observable/lib/Observable.js": 3182,
|
||||
"./node_modules/.pnpm/babel-loader@8.2.2_45ce778302d7701309b6da7f1a1707f7/node_modules/babel-loader/lib/index.js??ruleSet[1].rules[0].use!./themes/sample/client/src/js/app.js": 6867,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/bg.png": 4658,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/logo.png": 8374,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/logo.svg": 2326,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/original.png": 2966,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/original2.png": 4299,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/photo1.png": 9185,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/photo2.jpg": 2901,
|
||||
"./node_modules/.pnpm/img-optimize-loader@1.0.7_file-loader@6.2.0+webpack@5.39.1/node_modules/img-optimize-loader/dist/index.js??ruleSet[1].rules[4].use[0]!./app/client/src/img/photo3.svg": 5770,
|
||||
"./node_modules/.pnpm/mini-css-extract-plugin@1.6.0_webpack@5.39.1/node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/cms.scss": 8851,
|
||||
"./node_modules/.pnpm/mini-css-extract-plugin@1.6.0_webpack@5.39.1/node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/dev.scss": 5980,
|
||||
"./node_modules/.pnpm/mini-css-extract-plugin@1.6.0_webpack@5.39.1/node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/editor.scss": 8910,
|
||||
"./node_modules/.pnpm/mini-css-extract-plugin@1.6.0_webpack@5.39.1/node_modules/mini-css-extract-plugin/dist/loader.js!./node_modules/.pnpm/css-loader@5.2.6_webpack@5.39.1/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/.pnpm/resolve-url-loader@3.1.3/node_modules/resolve-url-loader/index.js!./node_modules/.pnpm/sass-loader@12.1.0_node-sass@6.0.0+webpack@5.39.1/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./app/client/src/scss/types/order.scss": 4805,
|
||||
"./node_modules/font-awesome|sync|nonrecursive|../../../../../../\\.(otf|eot|ttf|woff|woff2)$/": 3429,
|
||||
"external \"React\"": 3804,
|
||||
"ignored|./node_modules/.pnpm/minimatch@3.0.4/node_modules/minimatch|path": 2061
|
||||
},
|
||||
"usedIds": [
|
||||
159,
|
||||
244,
|
||||
249,
|
||||
361,
|
||||
394,
|
||||
476,
|
||||
549,
|
||||
625,
|
||||
639,
|
||||
678,
|
||||
1124,
|
||||
1305,
|
||||
1429,
|
||||
1648,
|
||||
1802,
|
||||
1882,
|
||||
1970,
|
||||
2048,
|
||||
191,
|
||||
878,
|
||||
994,
|
||||
1095,
|
||||
1117,
|
||||
1379,
|
||||
1428,
|
||||
1553,
|
||||
1576,
|
||||
1585,
|
||||
1673,
|
||||
2061,
|
||||
2197,
|
||||
2464,
|
||||
2631,
|
||||
2806,
|
||||
2913,
|
||||
2965,
|
||||
2981,
|
||||
3165,
|
||||
3300,
|
||||
3344,
|
||||
3423,
|
||||
3427,
|
||||
2097,
|
||||
2172,
|
||||
2264,
|
||||
2326,
|
||||
2330,
|
||||
2380,
|
||||
2403,
|
||||
2450,
|
||||
2621,
|
||||
2780,
|
||||
2901,
|
||||
2937,
|
||||
2939,
|
||||
2966,
|
||||
2967,
|
||||
3093,
|
||||
3182,
|
||||
3227,
|
||||
3398,
|
||||
3429,
|
||||
3509,
|
||||
3804,
|
||||
3936,
|
||||
3954,
|
||||
3960,
|
||||
3985,
|
||||
3988,
|
||||
4095,
|
||||
4304,
|
||||
4578,
|
||||
4662,
|
||||
4730,
|
||||
4747,
|
||||
4893,
|
||||
4921,
|
||||
5035,
|
||||
5295,
|
||||
5332,
|
||||
5392,
|
||||
5766,
|
||||
5802,
|
||||
5812,
|
||||
5901,
|
||||
6062,
|
||||
6303,
|
||||
6339,
|
||||
6430,
|
||||
6550,
|
||||
6597,
|
||||
6843,
|
||||
6950,
|
||||
3970,
|
||||
4000,
|
||||
4299,
|
||||
4422,
|
||||
4570,
|
||||
4658,
|
||||
4734,
|
||||
4805,
|
||||
5197,
|
||||
5239,
|
||||
5770,
|
||||
5980,
|
||||
6204,
|
||||
6264,
|
||||
6306,
|
||||
6429,
|
||||
6689,
|
||||
6867,
|
||||
6999,
|
||||
7128,
|
||||
7205,
|
||||
7301,
|
||||
7401,
|
||||
8062,
|
||||
8200,
|
||||
8265,
|
||||
8379,
|
||||
8414,
|
||||
8418,
|
||||
8436,
|
||||
8523,
|
||||
8616,
|
||||
8833,
|
||||
8845,
|
||||
8864,
|
||||
8976,
|
||||
9041,
|
||||
9097,
|
||||
9110,
|
||||
9125,
|
||||
9178,
|
||||
9215,
|
||||
9272,
|
||||
9614,
|
||||
9706,
|
||||
9743,
|
||||
9747,
|
||||
9756,
|
||||
9942
|
||||
7276,
|
||||
7292,
|
||||
7525,
|
||||
7717,
|
||||
8257,
|
||||
8365,
|
||||
8374,
|
||||
8433,
|
||||
8732,
|
||||
8823,
|
||||
8830,
|
||||
8851,
|
||||
8910,
|
||||
8968,
|
||||
8996,
|
||||
9010,
|
||||
9073,
|
||||
9099,
|
||||
9116,
|
||||
9136,
|
||||
9185,
|
||||
9878,
|
||||
9997
|
||||
]
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -1,220 +0,0 @@
|
|||
@import '~@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/scss/_components/_ui.elemental';
|
||||
|
||||
/* style elements here */
|
||||
/*.element {
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.element.page-header-element + .element {
|
||||
margin-top: -$grid-gutter-element-height;
|
||||
}
|
||||
|
||||
.element.page-header-element {
|
||||
padding-top: $grid-gutter-element-height;
|
||||
.page-header {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.site__elements__sliderelement {
|
||||
.element-container {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
max-width: none;
|
||||
}
|
||||
&:first-child {
|
||||
margin-top: -(2 * $grid-gutter-element-height);
|
||||
}
|
||||
}
|
||||
|
||||
.carousel-item-Image,
|
||||
.carousel-item-Video {
|
||||
.carousel-slide {
|
||||
flex-direction: column;
|
||||
max-height: 70vh;
|
||||
max-height: calc(100vh - 10.5rem);
|
||||
height: 70vh;
|
||||
height: calc(100vh - 10.5rem);
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.img {
|
||||
height: 100%;
|
||||
width: auto;
|
||||
min-width: 100%;
|
||||
img {
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
max-width: inherit;
|
||||
width: auto !important;
|
||||
|
||||
@media (min-height: 700px) {
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
@media (min-width: 2140px) {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.video {
|
||||
padding-bottom: 56.25%;
|
||||
position: relative;
|
||||
iframe {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: map-get($grid-breakpoints, 'sm') - 1) {
|
||||
padding-bottom: 54rem;
|
||||
}
|
||||
}
|
||||
|
||||
.carousel-title {
|
||||
font-size: 4.375rem;
|
||||
a {
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
.carousel-caption {
|
||||
width: 100%;
|
||||
right: 0;
|
||||
left: 0;
|
||||
bottom: 5vh;
|
||||
}
|
||||
.slide-link {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.carousel-caption-container {
|
||||
position: absolute;
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
left: auto;
|
||||
right: 0;
|
||||
background: transparentize($black, 0.5);
|
||||
max-width: 60%;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
@media (max-width: $full-body-min-width - 1) {
|
||||
.carousel-title,
|
||||
.carousel-caption,
|
||||
.slide-link {
|
||||
color: $black;
|
||||
}
|
||||
.carousel-title {
|
||||
font-size: 1.6rem;
|
||||
a {
|
||||
color: $body-color;
|
||||
}
|
||||
}
|
||||
.carousel-caption {
|
||||
position: static;
|
||||
padding: 0;
|
||||
.container {
|
||||
padding: 0;
|
||||
}
|
||||
.carousel-caption-container {
|
||||
position: relative;
|
||||
background: $bg-alt;
|
||||
color: $black;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.carousel-item-Video {
|
||||
.carousel-slide {
|
||||
height: auto !important;
|
||||
@media (max-width: map-get($grid-breakpoints, 'sm') - 1) {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.carousel-slide .video {
|
||||
height: 100%;
|
||||
background: $black;
|
||||
iframe {
|
||||
height: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.dynamic__elements__image__elements__elementimage {
|
||||
text-align: center;
|
||||
|
||||
img {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.image-element__image {
|
||||
background: $black;
|
||||
}
|
||||
|
||||
.image-element__caption {
|
||||
position: absolute;
|
||||
bottom: 1rem;
|
||||
left: 1rem;
|
||||
right: 1rem;
|
||||
background: $black;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.image-element__title {
|
||||
margin-bottom: 0;
|
||||
line-height: 2em;
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
img {
|
||||
filter: grayscale(1);
|
||||
}
|
||||
.image-element__caption {
|
||||
color: $primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.site__elements__accordion {
|
||||
.card {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
|
||||
.card-header {
|
||||
@extend .bg-dark;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-content-sidebar {
|
||||
}
|
||||
.Site_Widgets_SubmenuWidget {
|
||||
.nav-link {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.site__elements__instagramelement {
|
||||
.jsInstagramFeed-item {
|
||||
flex: 25%;
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,12 @@
|
|||
.carousel-caption {
|
||||
padding: 6rem 0;
|
||||
font-size: 3rem;
|
||||
|
||||
.carousel-title {
|
||||
font-size: 4rem;
|
||||
}
|
||||
|
||||
.carousel-content {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
@import '~@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/scss/_components/_ui.elemental';
|
||||
@import '_carousel';
|
|
@ -1,546 +0,0 @@
|
|||
/**
|
||||
* Your custom style
|
||||
*/
|
||||
|
||||
body {
|
||||
--header-bg: #{inspect($body-header-bg)};
|
||||
--header-color: #{inspect($body-header-color)};
|
||||
--header-link: #{inspect($body-header-link)};
|
||||
--main-nav-link-color:#{inspect($body-main-nav-link-color)};
|
||||
--main-nav-link-hover-color:#{inspect($body-main-nav-link-hover-color)};
|
||||
--main-nav-dropdown-hover-bg:#{inspect($body-main-nav-dropdown-hover-bg)};
|
||||
--footer-footer-bg:#{inspect($body-footer-footer-bg)};
|
||||
}
|
||||
|
||||
.carousel-caption {
|
||||
padding: 6rem 0;
|
||||
font-size: 3rem;
|
||||
|
||||
.carousel-title {
|
||||
font-size: 4rem;
|
||||
}
|
||||
|
||||
.carousel-content {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
#SiteWideMessage {
|
||||
text-align: center;
|
||||
|
||||
.alert {
|
||||
margin-bottom: 0;
|
||||
|
||||
.btn-close {
|
||||
margin-top: -0.5rem;
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Header {
|
||||
background-color: $header-bg;
|
||||
color: $header-color;
|
||||
|
||||
a {
|
||||
color: $header-link;
|
||||
}
|
||||
|
||||
.nav-container {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.logo {
|
||||
img {
|
||||
width: 6.5vw;
|
||||
|
||||
@media (orientation: portrait) {
|
||||
width: 20vw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tagline {
|
||||
display: inline-block;
|
||||
font-size: 1.2rem;
|
||||
margin-left: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
#Navigation {
|
||||
letter-spacing: .25em;
|
||||
text-transform: uppercase;
|
||||
width: 100%;
|
||||
background: $header-bg;
|
||||
|
||||
.navbar-nav {
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
color: $main-nav-link-color;
|
||||
font-size: $main-nav-toggler-size;
|
||||
}
|
||||
|
||||
.nav-item,
|
||||
.nav-link {
|
||||
flex-direction: column;
|
||||
/*@media (min-width: $full-body-min-width) {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}*/
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
color: $main-nav-link-color;
|
||||
background: $main-nav-link-bg;
|
||||
|
||||
&:focus,
|
||||
&:hover,
|
||||
&.active {
|
||||
background: $main-nav-link-hover-bg;
|
||||
color: $main-nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
>.nav-link {
|
||||
background: $main-nav-link-hover-bg;
|
||||
color: $main-nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-item .nav-dropdown {
|
||||
.fa-chevron-right //&:after
|
||||
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
border-color: $main-nav-dropdown-bg;
|
||||
background: $main-nav-dropdown-bg;
|
||||
margin-top: 0;
|
||||
border-top: 0;
|
||||
min-width: 100%;
|
||||
|
||||
.nav-item-link {
|
||||
color: $main-nav-dropdown-color;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
|
||||
&.active,
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
background: $main-nav-dropdown-hover-bg;
|
||||
|
||||
.nav-item-link {
|
||||
color: $main-nav-dropdown-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-item-link {
|
||||
width: 100%;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: $full-body-min-width) {
|
||||
.navbar-nav>.nav-item {
|
||||
padding-right: 2rem;
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
.dropdown-item .nav-item-link {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*#MainContent {
|
||||
padding-top: 2 * $element-reduced-spacer-y;
|
||||
padding-bottom: 2 * $element-reduced-spacer-y;
|
||||
}*/
|
||||
|
||||
#PageBreadcumbs {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#Footer {
|
||||
border-top: 1px solid #ebebeb;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: $footer-bg;
|
||||
color: $footer-color;
|
||||
|
||||
>.wrapper {
|
||||
padding-top: $element-reduced-spacer-y;
|
||||
padding-bottom: $element-reduced-spacer-y;
|
||||
}
|
||||
|
||||
a,
|
||||
.a {
|
||||
color: $footer-link;
|
||||
}
|
||||
|
||||
.footer {
|
||||
padding-top: $element-reduced-spacer-y;
|
||||
padding-bottom: $element-reduced-spacer-y;
|
||||
background-color: $footer-footer-bg;
|
||||
|
||||
.copyright {
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
|
||||
li {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Your custom style
|
||||
*/
|
||||
/*
|
||||
.a.active,
|
||||
.a:focus,
|
||||
.a:hover,
|
||||
.a[aria-expanded='true'],
|
||||
.btn.active,
|
||||
.btn:focus,
|
||||
.btn:hover,
|
||||
.btn[aria-expanded='true'],
|
||||
[data-toggle].active,
|
||||
[data-toggle]:focus,
|
||||
[data-toggle]:hover,
|
||||
[data-toggle][aria-expanded='true'],
|
||||
a.active,
|
||||
a:focus,
|
||||
a:hover,
|
||||
a[aria-expanded='true'],
|
||||
button.active,
|
||||
button:focus,
|
||||
button:hover,
|
||||
button[aria-expanded='true'] {
|
||||
opacity: 1;
|
||||
img,
|
||||
.img {
|
||||
filter: grayscale(1);
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
position: relative;
|
||||
}
|
||||
.field {
|
||||
margin: 2rem 0;
|
||||
&.required:after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.breadcrumb {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.form-control,
|
||||
.select2-container--default .select2-selection,
|
||||
.select2-dropdown .select2-search__field {
|
||||
border-width: 0 0 1px 0;
|
||||
}
|
||||
|
||||
.bg-alt {
|
||||
@extend .bg-dark;
|
||||
|
||||
background-color: $bg-alt !important;
|
||||
}
|
||||
|
||||
.bootstrap-select .dropdown-toggle .filter-option .option {
|
||||
background: #dedede;
|
||||
padding: 0.2rem 0.5rem;
|
||||
margin: 0.2rem;
|
||||
color: #212529;
|
||||
}
|
||||
|
||||
$full-body-min-width: map-get($grid-breakpoints, 'sm') !default;
|
||||
|
||||
@media (max-width: $full-body-min-width - 1) {
|
||||
.jsSidebarUI__inner {
|
||||
width: auto !important;
|
||||
transform: none !important;
|
||||
position: static !important;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
|
||||
.dropdown-list {
|
||||
@extend .list-unstyled;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
@include fix-bold();
|
||||
&:focus,
|
||||
&:hover,
|
||||
&.active {
|
||||
background: $nav-link-hover-bg;
|
||||
color: $nav-link-hover-color;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
.nav-link {
|
||||
background: $nav-link-hover-bg;
|
||||
color: $nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
// shrink elements on scroll
|
||||
body.shrink {
|
||||
@media (max-width: map-get($grid-breakpoints, 'lg') - 1) {
|
||||
padding-top: 100px;
|
||||
|
||||
#Header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: map-get($grid-breakpoints, 'lg')) and (max-width: map-get($grid-breakpoints, 'xl') - 1) {
|
||||
padding-top: 146px;
|
||||
|
||||
#Header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar__col {
|
||||
position: relative;
|
||||
margin-top: $grid-gutter-element-height;
|
||||
margin-bottom: $grid-gutter-element-height * 2;
|
||||
}
|
||||
.content-holder__sidebar {
|
||||
> .container {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#SiteWideMessage {
|
||||
text-align: center;
|
||||
.alert {
|
||||
margin-bottom: 0;
|
||||
.btn-close {
|
||||
margin-top: -0.5rem;
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Header {
|
||||
background-color: $header-bg;
|
||||
color: $header-color;
|
||||
|
||||
a {
|
||||
color: $header-link;
|
||||
}
|
||||
|
||||
.nav-container {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: flex-end;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.logo {
|
||||
filter: invert(100%);
|
||||
}
|
||||
|
||||
.tagline {
|
||||
display: inline-block;
|
||||
font-size: 1.2rem;
|
||||
margin-left: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
#Navigation {
|
||||
font-size: 1.5rem;
|
||||
padding: 0;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.25rem;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: 4;
|
||||
width: 100%;
|
||||
background: $header-bg;
|
||||
|
||||
@media (min-width: map-get($grid-breakpoints, 'md')) {
|
||||
position: static;
|
||||
width: auto;
|
||||
background: none;
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
color: $main-nav-link-color;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
font-size: $main-nav-toggler-size;
|
||||
}
|
||||
|
||||
.nav-item,
|
||||
.nav-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
color: $main-nav-link-color;
|
||||
background: $main-nav-link-bg;
|
||||
|
||||
&:focus,
|
||||
&:hover,
|
||||
&.active {
|
||||
background: $main-nav-link-hover-bg;
|
||||
color: $main-nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
.nav-link {
|
||||
background: $main-nav-link-hover-bg;
|
||||
color: $main-nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-item .nav-dropdown {
|
||||
.fa-chevron-right
|
||||
//&:after
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
border-color: $main-nav-dropdown-bg;
|
||||
background: $main-nav-dropdown-bg;
|
||||
margin-top: 0;
|
||||
border-top: 0;
|
||||
width: 100%;
|
||||
.nav-item-link {
|
||||
color: $main-nav-dropdown-color;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
padding: 0;
|
||||
&:focus,
|
||||
&:hover {
|
||||
background: $main-nav-dropdown-hover-bg;
|
||||
.nav-item-link {
|
||||
color: $main-nav-dropdown-hover-color;
|
||||
}
|
||||
}
|
||||
.nav-item-link {
|
||||
width: 100%;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: map-get($grid-breakpoints, 'md')) {
|
||||
.navbar-nav > .nav-item {
|
||||
padding-right: 2rem;
|
||||
padding-left: 2rem;
|
||||
}
|
||||
.dropdown-item .nav-item-link {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#MainContent {
|
||||
padding-top: 2 * $grid-gutter-element-height;
|
||||
padding-bottom: 2 * $grid-gutter-element-height;
|
||||
}
|
||||
|
||||
#PageBreadcumbs {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#Footer {
|
||||
background-color: $footer-bg;
|
||||
color: $footer-color;
|
||||
> .wrapper {
|
||||
padding-top: $grid-gutter-element-height;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $footer-link;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.field:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background-color: $footer-footer-bg;
|
||||
|
||||
.copyright {
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
|
||||
li {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: $full-body-min-width) {
|
||||
.wrapper {
|
||||
padding-bottom: $footer-bar-size;
|
||||
}
|
||||
|
||||
.footer {
|
||||
height: $footer-bar-size;
|
||||
margin-top: -$footer-bar-size;
|
||||
line-height: $footer-bar-size;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* Your custom style
|
||||
*/
|
||||
|
||||
body {
|
||||
--header-bg: #{inspect($body-header-bg)};
|
||||
--header-color: #{inspect($body-header-color)};
|
||||
--header-link: #{inspect($body-header-link)};
|
||||
--main-nav-link-color:#{inspect($body-main-nav-link-color)};
|
||||
--main-nav-link-hover-color:#{inspect($body-main-nav-link-hover-color)};
|
||||
--main-nav-dropdown-hover-bg:#{inspect($body-main-nav-dropdown-hover-bg)};
|
||||
--footer-footer-bg:#{inspect($body-footer-footer-bg)};
|
||||
}
|
||||
|
||||
/*#MainContent {
|
||||
padding-top: 2 * $element-reduced-spacer-y;
|
||||
padding-bottom: 2 * $element-reduced-spacer-y;
|
||||
}*/
|
|
@ -0,0 +1,31 @@
|
|||
#Footer {
|
||||
border-top: 1px solid #ebebeb;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: $footer-bg;
|
||||
color: $footer-color;
|
||||
|
||||
>.wrapper {
|
||||
padding-top: $element-reduced-spacer-y;
|
||||
padding-bottom: $element-reduced-spacer-y;
|
||||
}
|
||||
|
||||
a,
|
||||
.a {
|
||||
color: $footer-link;
|
||||
}
|
||||
|
||||
.footer {
|
||||
padding-top: $element-reduced-spacer-y;
|
||||
padding-bottom: $element-reduced-spacer-y;
|
||||
background-color: $footer-footer-bg;
|
||||
|
||||
.copyright {
|
||||
padding-right: 0.5rem;
|
||||
}
|
||||
|
||||
li {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
#SiteWideMessage {
|
||||
text-align: center;
|
||||
|
||||
.alert {
|
||||
margin-bottom: 0;
|
||||
|
||||
.btn-close {
|
||||
margin-top: -0.5rem;
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Header {
|
||||
background-color: $header-bg;
|
||||
color: $header-color;
|
||||
|
||||
a {
|
||||
color: $header-link;
|
||||
}
|
||||
|
||||
.nav-container {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.logo {
|
||||
img {
|
||||
width: 6.5vw;
|
||||
|
||||
@media (orientation: portrait) {
|
||||
width: 20vw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tagline {
|
||||
display: inline-block;
|
||||
font-size: 1.2rem;
|
||||
margin-left: 2em;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
@import '_base';
|
||||
@import '_header';
|
||||
@import '_navigation';
|
||||
@import '_footer';
|
|
@ -0,0 +1,102 @@
|
|||
#Navigation {
|
||||
letter-spacing: .25em;
|
||||
text-transform: uppercase;
|
||||
width: 100%;
|
||||
background: $header-bg;
|
||||
|
||||
.navbar-nav {
|
||||
width: 100%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
color: $main-nav-link-color;
|
||||
font-size: $main-nav-toggler-size;
|
||||
}
|
||||
|
||||
.nav-item,
|
||||
.nav-link {
|
||||
flex-direction: column;
|
||||
/*@media (min-width: $full-body-min-width) {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}*/
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
color: $main-nav-link-color;
|
||||
background: $main-nav-link-bg;
|
||||
|
||||
&:focus,
|
||||
&:hover,
|
||||
&.active {
|
||||
background: $main-nav-link-hover-bg;
|
||||
color: $main-nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
>.nav-link {
|
||||
background: $main-nav-link-hover-bg;
|
||||
color: $main-nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-item .nav-dropdown {
|
||||
.fa-chevron-right //&:after
|
||||
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
border-color: $main-nav-dropdown-bg;
|
||||
background: $main-nav-dropdown-bg;
|
||||
margin-top: 0;
|
||||
border-top: 0;
|
||||
min-width: 100%;
|
||||
|
||||
.nav-item-link {
|
||||
color: $main-nav-dropdown-color;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
|
||||
&.active,
|
||||
&:active,
|
||||
&:focus,
|
||||
&:hover {
|
||||
background: $main-nav-dropdown-hover-bg;
|
||||
|
||||
.nav-item-link {
|
||||
color: $main-nav-dropdown-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-item-link {
|
||||
width: 100%;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: $full-body-min-width) {
|
||||
.navbar-nav>.nav-item {
|
||||
padding-right: 2rem;
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
.dropdown-item .nav-item-link {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#PageBreadcumbs {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
|
@ -1,2 +1,2 @@
|
|||
@import '~@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/scss/types/cms';
|
||||
@import '../_variables';
|
||||
@import '~@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/scss/types/cms';
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
@import '~@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/scss/types/editor';
|
||||
@import '../_variables';
|
||||
@import '~@a2nt/ss-bootstrap-ui-webpack-boilerplate-react/src/scss/types/editor';
|
||||
|
||||
// Add content editor (only) typography styling
|
||||
a {
|
||||
color: $link-color;
|
||||
color: $link-color;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 1px dashed #dedede;
|
||||
border: 1px dashed #dedede;
|
||||
}
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
en:
|
||||
SilverStripe\Security\Member:
|
||||
SURNAME: 'Last Name'
|
||||
db_Surname: 'Last Name'
|
||||
SUBJECTPASSWORDRESET: 'Your password reset link'
|
||||
ENTEREMAIL: 'Please enter an email address to get a password reset link.'
|
||||
PASSWORDRESETSENTHEADER: 'Password reset link sent'
|
||||
PASSWORDRESETSENTTEXT: 'Thank you. A reset link has been sent, provided an account exists for this email address.'
|
||||
Page:
|
||||
LOADINGTEXT: 'LOADING ..'
|
||||
JAVASCRIPTREQUIRED: 'Please, enable javascript!'
|
||||
UPGRADEBROWSER: 'Upgrade your browser'
|
||||
OUTDATEDBROWSER: 'You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.'
|
||||
SilverShop\Model\Address:
|
||||
db_Surname: 'Last Name'
|
||||
SilverShop\Model\Order:
|
||||
db_Surname: 'Last Name'
|
||||
SilverShop\Page\CheckoutPage:
|
||||
ProceedToPayment: 'Send Order to Store'
|
||||
UndefinedOffset\NoCaptcha\Forms\NocaptchaField:
|
||||
EMPTY: 'Please prove you are human - check the Captcha box.'
|
||||
NOSCRIPT: 'You must enable JavaScript to submit this form'
|
||||
VALIDATE_ERROR: 'Captcha could not be validated'
|
||||
Dynamic\FlexSlider\Model\SlideImage:
|
||||
SINGULARNAME: 'Slide'
|
||||
PLURALNAME: 'Slides'
|
||||
Addressable:
|
||||
SUBURB: 'City'
|
||||
Symbiote\AddressableAddressable:
|
||||
SUBURB: 'City'
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
ru:
|
||||
Page:
|
||||
LOADINGTEXT: "ЗАГРУЗКА .."
|
||||
JAVASCRIPTREQUIRED: "Для корректной работы страницы требуется включить Javascript!"
|
||||
UPGRADEBROWSER: "Обновите браузер!"
|
||||
OUTDATEDBROWSER: "Вы используете устаревшую версию браузера. Обновите ваш браузер сейчас для повышения уровня безопасности вашей системы."
|
||||
PaginationLabel: "Переключение страниц"
|
||||
PaginationPrevious: "Назад"
|
||||
PaginationNext: "Вперед"
|
||||
SilverStripe\Blog\Model\Blog:
|
||||
PostedIn: "Категории"
|
||||
Tagged: "Отметки"
|
||||
Comments: "Коментарии"
|
||||
Posted: "Опубликовано"
|
||||
By: " - "
|
||||
AND: "и"
|
||||
LessThanAMinuteToRead: "Меньше минуты на чтение"
|
||||
MinutesToRead: "Минут на чтение"
|
||||
READMORE: "Подробнее"
|
|
@ -1,21 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use DNADesign\Elemental\Controllers\ElementController;
|
||||
use App\Templates\DeferredRequirements;
|
||||
|
||||
class MapElementController extends ElementController
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
DeferredRequirements::loadCSS('https://api.tiles.mapbox.com/mapbox-gl-js/v0.48.0/mapbox-gl.css');
|
||||
DeferredRequirements::loadJS('https://api.tiles.mapbox.com/mapbox-gl-js/v0.48.0/mapbox-gl.js');
|
||||
|
||||
DeferredRequirements::loadCSS('app_Site.Controllers.MapElementController.css');
|
||||
DeferredRequirements::loadJS('app_Site.Controllers.MapElementController.js');
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
use DNADesign\ElementalList\Model\ElementList;
|
||||
|
||||
class AccordionElement extends ElementList
|
||||
{
|
||||
private static $singular_name = 'Accordion Element';
|
||||
|
||||
private static $plural_name = 'Accordion Element';
|
||||
|
||||
private static $description = 'Displays Accordion of Elements';
|
||||
|
||||
private static $table_name = 'AccordionElement';
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return self::$singular_name;
|
||||
}
|
||||
|
||||
public function Accordion()
|
||||
{
|
||||
return $this->Elements()->renderWith(static::class.'_AccordionArea');
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\FontAwesome\FontAwesomeField;
|
||||
use DNADesign\Elemental\Models\ElementContent;
|
||||
|
||||
class BlockElement extends ElementContent
|
||||
{
|
||||
private static $singular_name = 'Block Element';
|
||||
|
||||
private static $plural_name = 'Block Element';
|
||||
|
||||
private static $description = 'Displays Block';
|
||||
|
||||
private static $table_name = 'BlockElement';
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return self::$singular_name;
|
||||
}
|
||||
|
||||
private static $db = [
|
||||
'BlockIcon' => 'Varchar(255)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'BlockLink' => Link::class,
|
||||
];
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
FontAwesomeField::create('BlockIcon'),
|
||||
LinkField::create('BlockLinkID', 'Link'),
|
||||
]);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
use DNADesign\Elemental\Models\ElementContent;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
|
||||
class CustomSnippetElement extends ElementContent
|
||||
{
|
||||
private static $singular_name = 'Custom Snippet';
|
||||
|
||||
private static $plural_name = 'Custom Snippets';
|
||||
|
||||
private static $description = 'Displays Custom Snippet';
|
||||
|
||||
private static $table_name = 'CustomSnippetElement';
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return self::$singular_name;
|
||||
}
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->replaceField(
|
||||
'HTML',
|
||||
TextareaField::create('HTML')
|
||||
);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class ElementListExtension extends DataExtension
|
||||
{
|
||||
public function getControllerName()
|
||||
{
|
||||
return EmptyPageController::class;
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
|
||||
class ElementalContentControllerExtension extends \DNADesign\Elemental\Extensions\ElementalContentControllerExtension
|
||||
{
|
||||
private static $allowed_actions = array(
|
||||
'handleElement'
|
||||
);
|
||||
|
||||
public function handleElement()
|
||||
{
|
||||
$id = $this->owner->getRequest()->param('ID');
|
||||
|
||||
if (!$id) {
|
||||
user_error('No element ID supplied', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
/** @var SiteTree $elementOwner */
|
||||
//$elementOwner = $this->owner->data();
|
||||
|
||||
/*$elementalAreaRelations = $this->owner->getElementalRelations();
|
||||
|
||||
if (!$elementalAreaRelations) {
|
||||
user_error(get_class($this->owner) . ' has no ElementalArea relationships', E_USER_ERROR);
|
||||
return false;
|
||||
}*/
|
||||
|
||||
$element = BaseElement::get()->byID($id);
|
||||
|
||||
if ($element) {
|
||||
return $element->getController();
|
||||
}
|
||||
|
||||
user_error('Element $id not found', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
|
||||
use SilverStripe\SiteConfig\SiteConfig;
|
||||
|
||||
class EmptyPageController extends \PageController
|
||||
{
|
||||
public function __construct($dataRecord = null)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dataRecord->Title = SiteConfig::current_site_config()->getField('Title');
|
||||
|
||||
$this->setFailover($this->dataRecord);
|
||||
}
|
||||
|
||||
public static function DefaultContainer()
|
||||
{
|
||||
return \Page::DefaultContainer();
|
||||
}
|
||||
}
|
|
@ -1,68 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/23/18
|
||||
* Time: 1:23 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements\Extensions;
|
||||
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Forms\TreeDropdownField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
|
||||
class BaseElementEx extends DataExtension
|
||||
{
|
||||
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$obj = $this->owner;
|
||||
parent::updateCMSFields($fields);
|
||||
$tab = $fields->findOrMakeTab('Root.Settings');
|
||||
|
||||
$tab->push(LiteralField::create(
|
||||
'ClassName',
|
||||
'<div class="form-group field text">'
|
||||
.'<div class="form__field-label">Class</div>'
|
||||
.'<div class="form__field-holder">'.$obj->getField('ClassName').'</div>'
|
||||
.'</div>'
|
||||
));
|
||||
|
||||
if($this->owner->ID) {
|
||||
$tab->push(TreeDropdownField::create(
|
||||
'MoveElementIDToPage',
|
||||
'Move an element to page',
|
||||
SiteTree::class
|
||||
)->setEmptyString('(select an element to move)'));
|
||||
}
|
||||
}
|
||||
|
||||
public static function MoveElementToPage($ID, $moveToID)
|
||||
{
|
||||
$el = BaseElement::get()->byID($ID);
|
||||
$page = SiteTree::get()->byID($moveToID);
|
||||
if (!$page || !$el) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$el->setField('ParentID', $page->ElementalArea()->ID);
|
||||
$el->write();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
|
||||
$moveID = $this->owner->getField('MoveElementIDToPage');
|
||||
if($this->owner->ID && $moveID) {
|
||||
self::MoveElementToPage($this->owner->ID, $moveID);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/24/18
|
||||
* Time: 2:35 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements\Extensions;
|
||||
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class ElementContentWidget extends DataExtension
|
||||
{
|
||||
}
|
|
@ -1,186 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/24/18
|
||||
* Time: 1:46 AM
|
||||
*/
|
||||
|
||||
namespace App\Elements\Extensions;
|
||||
|
||||
use Dynamic\Elements\Image\Elements\ElementImage;
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class ElementImageWidget extends DataExtension
|
||||
{
|
||||
private static $available_heights = [
|
||||
'300' => 'Small (300px)',
|
||||
'400' => 'Medium (400px)',
|
||||
'600' => 'Big (600px)',
|
||||
];
|
||||
|
||||
private static $available_widths = [
|
||||
'300' => 'Small (300px)',
|
||||
'400' => 'Medium (400px)',
|
||||
'600' => 'Big (600px)',
|
||||
];
|
||||
|
||||
private static $available_ratios = [
|
||||
'1:1' => '1:1',
|
||||
'3:2' => '3:2',
|
||||
'2:3' => '2:3',
|
||||
'16:9' => '16:9'
|
||||
];
|
||||
|
||||
private static $db = [
|
||||
'Resize' => 'Boolean(1)',
|
||||
'ManualWidth' => 'Boolean(0)',
|
||||
'ImageHeight' => 'Float',
|
||||
'ImageWidth' => 'Float',
|
||||
'ImageAspectRatio' => 'Text',
|
||||
'Content' => 'HTMLText',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'ImageLink' => Link::class,
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$fields->insertBefore(
|
||||
'Image',
|
||||
LinkField::create('ImageLinkID', 'Link')
|
||||
);
|
||||
|
||||
$this->owner->ImageHeight = $this->getHeight();
|
||||
|
||||
$heights = Config::inst()->get(__CLASS__, 'available_heights');
|
||||
$widths = Config::inst()->get(__CLASS__, 'available_widths');
|
||||
$ratios = Config::inst()->get(__CLASS__, 'available_ratios');
|
||||
|
||||
$fields->replaceField('Resize', CheckboxField::create(
|
||||
'Resize',
|
||||
'Would you like to scale image?'
|
||||
));
|
||||
$fields->removeByName(['ManualWidth','ImageWidth','ImageAspectRatio',]);
|
||||
|
||||
if (count($heights)) {
|
||||
$fields->replaceField(
|
||||
'ImageHeight',
|
||||
CompositeField::create(
|
||||
CheckboxField::create(
|
||||
'ManualAspectRatio',
|
||||
'Set Aspect Ratio',
|
||||
($this->owner->getField('ImageAspectRatio') ? '1' : '0')
|
||||
),
|
||||
DropdownField::create(
|
||||
'ImageAspectRatio',
|
||||
'Image Aspect Ratio (width:height)',
|
||||
$ratios
|
||||
)
|
||||
->setEmptyString('(original)')
|
||||
->displayIf('ManualAspectRatio')->isChecked()
|
||||
->andIf('ManualWidth')->isNotChecked()
|
||||
->end(),
|
||||
DropdownField::create(
|
||||
'ImageHeight',
|
||||
'Image Height',
|
||||
$heights,
|
||||
$this->getHeight()
|
||||
)
|
||||
->setEmptyString('(auto)')
|
||||
->displayIf('Resize')->isChecked()->end(),
|
||||
CheckboxField::create('ManualWidth', 'Set Width Manually')
|
||||
->displayIf('Resize')->isChecked()
|
||||
->andIf('ManualAspectRatio')->isNotChecked()
|
||||
->end(),
|
||||
DropdownField::create(
|
||||
'ImageWidth',
|
||||
'Image Width',
|
||||
$widths
|
||||
)
|
||||
->setEmptyString('(auto)')
|
||||
->displayIf('ManualWidth')->isChecked()
|
||||
->end()
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$fields->dataFieldByName('ImageHeight')
|
||||
->setValue($this->getHeight());
|
||||
}
|
||||
}
|
||||
|
||||
public function ImageResized()
|
||||
{
|
||||
$image = $this->owner->Image();
|
||||
|
||||
if (!$this->owner->Resize) {
|
||||
return $image;
|
||||
}
|
||||
|
||||
$width = $this->getWidth();
|
||||
$height = $this->getHeight();
|
||||
$ratio = $this->owner->getField('ImageAspectRatio');
|
||||
|
||||
if ($ratio) {
|
||||
$v = explode(':', $this->owner->getField('ImageAspectRatio'));
|
||||
$x = $v[0];
|
||||
$y = $v[1];
|
||||
|
||||
if ($width > 0 && $width !== 'auto') {
|
||||
$height = $width*$y/$x;
|
||||
echo 'a1';
|
||||
} elseif ($height && $height > 0) {
|
||||
$width = $height*$x/$y;
|
||||
echo 'a2';
|
||||
}
|
||||
var_dump($width);
|
||||
var_dump($height);
|
||||
}
|
||||
|
||||
if (!$width || $width === 'auto') {
|
||||
return $height > 0
|
||||
? $image->ScaleHeight($height)
|
||||
: $image;
|
||||
}
|
||||
|
||||
return $height > 0
|
||||
? $image->FocusFill($width, $height)
|
||||
: $image->ScaleWidth($width);
|
||||
}
|
||||
|
||||
public function getWidth()
|
||||
{
|
||||
$obj = $this->owner;
|
||||
return $obj->getField('ManualWidth') && $obj->getField('ImageWidth')
|
||||
? $obj->getField('ImageWidth')
|
||||
: $obj->getColumnWidthRecursive();
|
||||
}
|
||||
|
||||
public function getHeight()
|
||||
{
|
||||
$height = $this->owner->getField('ImageHeight');
|
||||
if ($height > 0) {
|
||||
return $height;
|
||||
}
|
||||
|
||||
$sibling = $this->owner->getSibling(false, [
|
||||
'ImageHeight:GreaterThan' => '0'
|
||||
]);
|
||||
|
||||
if ($sibling && $sibling->getField('ImageHeight')) {
|
||||
return $sibling->getField('ImageHeight');
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -1,303 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/23/18
|
||||
* Time: 1:23 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements\Extensions;
|
||||
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use DNADesign\ElementalList\Model\ElementList;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use App\Elements\AccordionElement;
|
||||
|
||||
class ElementRows extends DataExtension
|
||||
{
|
||||
private static $container_max_width = 1140;
|
||||
private static $column_class = 'col-block col-md';
|
||||
|
||||
private static $container_styles = [
|
||||
'container' => 'Fixed container',
|
||||
'container-fluid' => 'Fluid Container',
|
||||
];
|
||||
|
||||
private static $db = [
|
||||
'ContainerType' => 'Varchar(254)',
|
||||
//'SidebarOnly' => 'Boolean(0)',
|
||||
'Size' => 'Enum("1,2,3,4,5,6,7,8,9,10,11,12,auto","auto")',
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$obj = $this->owner;
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$fields->removeByName(['AvailableGlobally', 'TopPageLocale', 'TopPageID']);
|
||||
//$fields->removeByName('SidebarOnly');
|
||||
|
||||
// move available globaly to main tab
|
||||
$tab = $fields->findOrMakeTab('Root.Main');
|
||||
$tab->push(CheckboxField::create('AvailableGlobally'));
|
||||
//$tab->push(CheckboxField::create('SidebarOnly', 'Hidden (Sidebar Only)'));
|
||||
|
||||
// container type
|
||||
if ($this->isRoot()) {
|
||||
$tab->push(DropdownField::create(
|
||||
'ContainerType',
|
||||
_t(__CLASS__.'.CONTAINERTYPE', 'Container Type'),
|
||||
self::$container_styles
|
||||
));
|
||||
} else {
|
||||
$fields->removeByName('ContainerType');
|
||||
}
|
||||
|
||||
// site-specific
|
||||
$fields->removeByName('ContainerType');
|
||||
|
||||
// column size
|
||||
if ($this->isColumn()) {
|
||||
$sizes = $obj->dbObject('Size');
|
||||
|
||||
$sizeDropdown = DropdownField::create(
|
||||
'Size',
|
||||
_t(
|
||||
__CLASS__.'.SIZE',
|
||||
'Column Width (max 12 cols)'
|
||||
),
|
||||
array_combine(
|
||||
array_values($sizes->enumValues()),
|
||||
[
|
||||
'8.3% (1 of 12)',
|
||||
'16.6% (2 of 12)',
|
||||
'25% (3 of 12)',
|
||||
'33% (4 of 12)',
|
||||
'41.6% (5 of 12)',
|
||||
'50% (6 of 12)',
|
||||
'58.3% (7 of 12)',
|
||||
'66.4% (8 of 12)',
|
||||
'74.7% (9 of 12)',
|
||||
'83% (10 of 12)',
|
||||
'91.3% (11 of 12)',
|
||||
'100% (12 of 12)',
|
||||
'auto',
|
||||
]
|
||||
)
|
||||
);
|
||||
$tab->push($sizeDropdown);
|
||||
|
||||
// set default size if size field wasn't set or if it's new object without title set and the size is default
|
||||
$size = $obj->getField('Size');
|
||||
if (!$size || (!$obj->getField('Title') && $size === 'auto')) {
|
||||
$sibling = $this->getSibling();
|
||||
|
||||
$defaultSize = $sizes->getDefaultValue();
|
||||
$defaultSize = $sibling ? $sibling->getField('Size') : $defaultSize;
|
||||
|
||||
$obj->setField('Size', $defaultSize);
|
||||
$sizeDropdown->setValue($defaultSize);
|
||||
}
|
||||
} else {
|
||||
$fields->removeByName('Size');
|
||||
}
|
||||
|
||||
// move parent elements
|
||||
if ($this->isList()) {
|
||||
$currEls = $obj->getField('Elements')->Elements();
|
||||
if ($currEls->count()) {
|
||||
$tab->push(DropdownField::create(
|
||||
'MoveElementIDToParent',
|
||||
'Move an element from the current list to parent',
|
||||
$currEls->map('ID', 'Title')
|
||||
)->setEmptyString('(select an element to move)'));
|
||||
}
|
||||
|
||||
$parentEls = $obj->Parent()->Elements()->exclude('ID', $obj->ID);
|
||||
if ($parentEls->count()) {
|
||||
$tab->push(DropdownField::create(
|
||||
'MoveElementIDFromParent',
|
||||
'Move an element from the parent to the current list',
|
||||
$parentEls->map('ID', 'Title')
|
||||
)->setEmptyString('(select an element to move)'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getWidthPercetage()
|
||||
{
|
||||
return $this->isColumn() ? $this->owner->getField('Size') / self::colsNumber() * 100 : false;
|
||||
}
|
||||
|
||||
public function isList()
|
||||
{
|
||||
return is_a($this->owner, ElementList::class) && !is_a($this->owner, AccordionElement::class);
|
||||
}
|
||||
|
||||
public function isRow()
|
||||
{
|
||||
if (!$this->isList()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function isColumn()
|
||||
{
|
||||
if (!$this->isRoot()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function isRoot()
|
||||
{
|
||||
$parent = $this->owner->Parent()->getOwnerPage();
|
||||
if (is_a($parent, 'Page')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getSibling($any = true, $filter = [], $exclude = [])
|
||||
{
|
||||
$class = $any ? $this->owner->baseClass() : $this->owner->ClassName;
|
||||
|
||||
return $class::get()->filter(array_merge(
|
||||
['ParentID' => $this->owner->Parent()->ID],
|
||||
$filter
|
||||
))->exclude(array_merge(
|
||||
['ID' => $this->owner->ID],
|
||||
$exclude
|
||||
))->last();
|
||||
}
|
||||
|
||||
public function getColumnSizeRecursive($object = null)
|
||||
{
|
||||
$object = $object ? $object : $this->owner;
|
||||
|
||||
if ($object->isColumn() && $object->getField('Size')) {
|
||||
return $object->getField('Size');
|
||||
}
|
||||
|
||||
$parent = $object->Parent()->getOwnerPage();
|
||||
|
||||
if (is_a($parent, 'Page')) {
|
||||
return ($this->owner->getField('ContainerType') === 'container-fluid') ? false : self::colsNumber();
|
||||
}
|
||||
|
||||
return $object->getColumnSizeRecursive($parent);
|
||||
}
|
||||
|
||||
public function getColumnWidthRecursive($object = null, $max = null)
|
||||
{
|
||||
$max = $max ? $max : self::maxWidth();
|
||||
|
||||
$object = $object ? $object : $this->owner;
|
||||
|
||||
if (!$object->isRoot()) {
|
||||
$size = $object->getField('Size');
|
||||
$cols = self::colsNumber();
|
||||
|
||||
if ($size === 'auto') {
|
||||
return $size;
|
||||
}
|
||||
|
||||
$max = $size ? $max / ($cols / $size) : $max;
|
||||
$parent = $object->Parent()->getOwnerPage();
|
||||
|
||||
return $this->getColumnWidthRecursive($parent, $max);
|
||||
}
|
||||
|
||||
return $max;
|
||||
}
|
||||
|
||||
public static function colsNumber()
|
||||
{
|
||||
$db = Config::inst()->get(self::class, 'db');
|
||||
$sizes = $db['Size'];
|
||||
$sizes = preg_replace('!Enum\("([0-9A-z,]+)","([0-9A-z]+)"\)!i', '$1', $sizes);
|
||||
$sizes = explode(',', $sizes);
|
||||
|
||||
// remove auto
|
||||
$k = array_search('auto', $sizes);
|
||||
if ($k !== false) {
|
||||
unset($sizes[$k]);
|
||||
}
|
||||
|
||||
return max($sizes);
|
||||
}
|
||||
|
||||
public static function maxWidth()
|
||||
{
|
||||
return Config::inst()->get(self::class, 'container_max_width');
|
||||
}
|
||||
|
||||
public function ExtraClass()
|
||||
{
|
||||
$object = $this->owner;
|
||||
|
||||
return $object->getField('ExtraClass')
|
||||
.(
|
||||
$this->isColumn()
|
||||
? ' '.Config::inst()->get(self::class, 'column_class')
|
||||
.($object->getField('Size') === 'auto' ? '' : '-'.$object->getField('Size'))
|
||||
: ''
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* if it's root element and it doesn't contain any container styles
|
||||
* add the first one
|
||||
*/
|
||||
public function ContainerClass()
|
||||
{
|
||||
$type = $this->owner->getField('ContainerType');
|
||||
$container_styles = array_keys(self::$container_styles);
|
||||
|
||||
if (!$type && $this->isRoot()) {
|
||||
$type = \Page::DefaultContainer();
|
||||
}
|
||||
|
||||
return $type;
|
||||
}
|
||||
|
||||
public static function MoveElement($moveID, $targetID)
|
||||
{
|
||||
$el = BaseElement::get_by_id($moveID);
|
||||
if (!$el) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$el->setField('ParentID', $targetID);
|
||||
$el->write();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
|
||||
$moveID = $this->owner->getField('MoveElementIDFromParent');
|
||||
$targetID = $moveID ? $this->owner->Elements()->ID : null;
|
||||
|
||||
if ($moveID && $targetID) {
|
||||
self::MoveElement($moveID, $targetID);
|
||||
}
|
||||
|
||||
$moveID = $this->owner->getField('MoveElementIDToParent');
|
||||
$targetID = $moveID ? $this->owner->Parent()->ID : null;
|
||||
|
||||
if ($moveID && $targetID) {
|
||||
self::MoveElement($moveID, $targetID);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/23/18
|
||||
* Time: 1:23 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements\Extensions;
|
||||
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\ORM\HasManyList;
|
||||
use SilverStripe\ORM\UnsavedRelationList;
|
||||
|
||||
class ElementalArea extends DataExtension
|
||||
{
|
||||
public function ElementFilteredControllers()
|
||||
{
|
||||
// Don't try and process unsaved lists
|
||||
if ($this->Elements() instanceof UnsavedRelationList) {
|
||||
return ArrayList::create();
|
||||
}
|
||||
|
||||
$controllers = ArrayList::create();
|
||||
$items = $this->Elements()->filterByCallback(static function (BaseElement $item) {
|
||||
return $item->canView();
|
||||
});
|
||||
|
||||
if ($items !== null) {
|
||||
foreach ($items as $element) {
|
||||
$controller = $element->getController();
|
||||
$controllers->push($controller);
|
||||
}
|
||||
}
|
||||
|
||||
return $controllers;
|
||||
}
|
||||
|
||||
/**
|
||||
* A cache-aware accessor for the elements
|
||||
* @return ArrayList|HasManyList|BaseElement[]
|
||||
*/
|
||||
public function Elements()
|
||||
{
|
||||
return $this->owner->Elements();//->exclude('SidebarOnly', true);
|
||||
}
|
||||
}
|
|
@ -1,73 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 8/26/18
|
||||
* Time: 12:55 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements\Extensions;
|
||||
|
||||
use SilverStripe\Core\Extension;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use App\Models\MapPin;
|
||||
|
||||
class MapExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'MapZoom' => 'Int',
|
||||
];
|
||||
|
||||
private static $many_many = [
|
||||
'Locations' => MapPin::class,
|
||||
];
|
||||
|
||||
private static $owns = [
|
||||
'Locations',
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields): void
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$fields->removeByName('Locations');
|
||||
$fields->addFieldsToTab('Root.MapPins', [
|
||||
NumericField::create('MapZoom', 'Initial Map Zoom (enter a number from 0 to 24)'),
|
||||
GridField::create(
|
||||
'Locations',
|
||||
'Locations',
|
||||
$this->owner->Locations(),
|
||||
$cfg = GridFieldConfig_RelationEditor::create(100)
|
||||
)
|
||||
]);
|
||||
|
||||
$cfg->getComponentByType(GridFieldDataColumns::class)->setFieldFormatting([
|
||||
'ShowAtMap' => static function ($v, $obj) {
|
||||
return $v ? 'YES' : 'NO';
|
||||
}
|
||||
]);
|
||||
|
||||
$fields->findOrMakeTab('Root.MapPins')->setTitle('Locations');
|
||||
}
|
||||
|
||||
public function getGeoJSON(): string
|
||||
{
|
||||
$locs = $this->owner->Locations()->filter('ShowAtMap', true);
|
||||
|
||||
$pins = [];
|
||||
foreach ($locs as $off) {
|
||||
$pins[] = $off->getGeo();
|
||||
}
|
||||
|
||||
return json_encode([
|
||||
'type' => 'MarkerCollection',
|
||||
'features' => $pins
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,79 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Elements\Extensions;
|
||||
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
use SilverStripe\Forms\GridField\GridFieldPaginator;
|
||||
use SilverStripe\Forms\ListboxField;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\UserForms\Model\EditableFormField;
|
||||
|
||||
class UserDefinedFormExtension extends DataExtension
|
||||
{
|
||||
/*private static $db = [
|
||||
'CustomThankYouCode' => 'HTMLText',
|
||||
'RedirectOnComplete' => 'Boolean(0)',
|
||||
'RedirectOnCompleteURL' => 'Varchar(255)',
|
||||
];*/
|
||||
|
||||
private static $many_many = [
|
||||
'SubmissionColumns' => EditableFormField::class,
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$fields->removeByName('RedirectOnComplete');
|
||||
$fields->removeByName('RedirectOnCompleteURL');
|
||||
|
||||
$fields->removeByName('SubmissionColumns');
|
||||
|
||||
$fields->addFieldToTab(
|
||||
'Root.Main',
|
||||
ListboxField::create(
|
||||
'SubmissionColumns',
|
||||
'Display following columns at submissions list',
|
||||
$this->owner->Fields()->map('ID', 'Title')
|
||||
)
|
||||
);
|
||||
|
||||
$tab = $fields->findOrMakeTab('Root.FormOptions');
|
||||
|
||||
/*$tab->push(CheckboxField::create('RedirectOnComplete'));
|
||||
$tab->push(TextField::create('RedirectOnCompleteURL'));*/
|
||||
//$tab->push(TextareaField::create('CustomThankYouCode'));
|
||||
|
||||
$grid = $fields->dataFieldByName('Submissions');
|
||||
|
||||
$config = $grid->getConfig();
|
||||
$config->getComponentByType(GridFieldPaginator::class)->setItemsPerPage(100);
|
||||
|
||||
$cols = $this->owner->SubmissionColumns();
|
||||
if ($grid && $cols->count()) {
|
||||
$dataCols = $config->getComponentByType(GridFieldDataColumns::class);
|
||||
|
||||
$columns = [
|
||||
'ID' => 'ID',
|
||||
'Created' => 'Created',
|
||||
];
|
||||
|
||||
foreach ($cols as $col) {
|
||||
$title = $col->getField('Title');
|
||||
$name = $col->getField('Name');
|
||||
$columns[$name] = [
|
||||
'title' => $title,
|
||||
'callback' => function ($item) use ($name) {
|
||||
return $item->relField($name);
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
$columns['Actions'] = 'Actions';
|
||||
|
||||
$dataCols->setDisplayFields($columns);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,103 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use SilverStripe\Core\Convert;
|
||||
|
||||
class InstagramElement extends BaseElement
|
||||
{
|
||||
private static $singular_name = 'Instagram';
|
||||
|
||||
private static $plural_name = 'Instagram Elements';
|
||||
|
||||
private static $description = 'Displays Instagram posts';
|
||||
|
||||
private static $table_name = 'InstagramElement';
|
||||
|
||||
private static $db = [
|
||||
'Username' => 'Varchar(255)',
|
||||
'Tag' => 'Varchar(255)',
|
||||
'DisplayProfile' => 'Boolean(0)',
|
||||
'DisplayBiography' => 'Boolean(0)',
|
||||
'DisplayGallery' => 'Boolean(0)',
|
||||
'DisplayCaptions' => 'Boolean(0)',
|
||||
];
|
||||
|
||||
private static $defaults = [
|
||||
'DisplayGallery' => true,
|
||||
];
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return self::$singular_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getAttributes(): array
|
||||
{
|
||||
return [
|
||||
'data-username' => $this->Username,
|
||||
'data-display-profile' => $this->DisplayProfile,
|
||||
'data-display-biography' => $this->DisplayBiography,
|
||||
'data-display-gallery' => $this->DisplayGallery,
|
||||
'data-display-captions' => $this->DisplayCaptions,
|
||||
'data-items' => 12,
|
||||
];
|
||||
}
|
||||
/**
|
||||
* Custom attributes to process.
|
||||
*
|
||||
* @param array $attributes
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function AttributesHTML($attributes = null): string
|
||||
{
|
||||
if (!$attributes) {
|
||||
$attributes = $this->getAttributes();
|
||||
}
|
||||
|
||||
$attributes = (array) $attributes;
|
||||
|
||||
$attributes = array_filter($attributes, static function ($v) {
|
||||
return ($v || $v === 0 || $v === '0');
|
||||
});
|
||||
|
||||
// Create markup
|
||||
$parts = [];
|
||||
|
||||
foreach ($attributes as $name => $value) {
|
||||
if ($value === true) {
|
||||
$value = $name;
|
||||
} else if (is_scalar($value)) {
|
||||
$value = (string) $value;
|
||||
} else {
|
||||
$value = json_encode($value);
|
||||
}
|
||||
|
||||
$parts[] = sprintf('%s=%s', Convert::raw2att($name), Convert::raw2att($value));
|
||||
}
|
||||
|
||||
return implode(' ', $parts);
|
||||
}
|
||||
|
||||
public function FeedLink()
|
||||
{
|
||||
return 'https://www.instagram.com/'.($this->Username ? $this->Username : 'explore/tags/'.$this->Tag).'/';
|
||||
}
|
||||
|
||||
public function FeedTitle()
|
||||
{
|
||||
return ($this->Username ? '@'.$this->Username : '#'.$this->Tag);
|
||||
}
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
use A2nt\SilverStripeMapboxField\MapboxField;
|
||||
use BetterBrief\GoogleMapField;
|
||||
use Colymba\BulkManager\BulkManager;
|
||||
use DNADesign\Elemental\Models\ElementContent;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use App\Controllers\MapElementController;
|
||||
use App\Elements\Extensions\MapExtension;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
|
||||
class MapElement extends ElementContent
|
||||
{
|
||||
private static $icon = 'font-icon-globe-1';
|
||||
|
||||
private static $singular_name = 'Map Element';
|
||||
|
||||
private static $plural_name = 'Map Element';
|
||||
|
||||
private static $description = 'Displays dynamic map';
|
||||
|
||||
private static $table_name = 'MapElement';
|
||||
|
||||
private static $controller_class = MapElementController::class;
|
||||
private static $map_type = 'mapbox';
|
||||
|
||||
private static $extensions = [
|
||||
MapExtension::class,
|
||||
];
|
||||
|
||||
public function getType():string
|
||||
{
|
||||
return self::$singular_name;
|
||||
}
|
||||
|
||||
public function getCMSFields(): FieldList
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->remove('HTML');
|
||||
|
||||
$tab = $fields->findOrMakeTab('Root.MapPins');
|
||||
$tab->setTitle('Description');
|
||||
$tab->push(HTMLEditorField::create('HTML', 'Content'));
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
NumericField::create('MapZoom', 'Initial Map Zoom (enter a number from 0 to 24)'),
|
||||
GridField::create(
|
||||
'Locations',
|
||||
'Locations',
|
||||
$this->owner->Locations(),
|
||||
$cfg = GridFieldConfig_RelationEditor::create(100)
|
||||
)
|
||||
]);
|
||||
|
||||
$cfg->getComponentByType(GridFieldDataColumns::class)->setFieldFormatting([
|
||||
'ShowAtMap' => static function ($v, $obj) {
|
||||
return $v ? 'YES' : 'NO';
|
||||
}
|
||||
]);
|
||||
$cfg->addComponent(new BulkManager());
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public static function MapAPIKey(): string
|
||||
{
|
||||
$type = self::config()->get('map_type');
|
||||
|
||||
switch ($type) {
|
||||
case 'mapbox':
|
||||
$key = MapboxField::getAccessToken();
|
||||
break;
|
||||
case 'google-maps':
|
||||
$cfg = Config::inst()->get(GoogleMapField::class, 'default_options');
|
||||
$key = $cfg['api_key'];
|
||||
break;
|
||||
default:
|
||||
$key = '';
|
||||
break;
|
||||
}
|
||||
|
||||
return $key;
|
||||
}
|
||||
}
|
|
@ -1,133 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements;
|
||||
|
||||
use Dynamic\Elements\Flexslider\Elements\ElementSlideshow;
|
||||
use Dynamic\FlexSlider\Model\SlideImage;
|
||||
use Dynamic\FlexSlider\ORM\FlexSlider;
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\Forms\ReadonlyField;
|
||||
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
|
||||
|
||||
class SliderElement extends ElementSlideshow
|
||||
{
|
||||
private static $singular_name = 'Slider';
|
||||
|
||||
private static $plural_name = 'Sliders';
|
||||
|
||||
private static $description = 'Displays slide show';
|
||||
|
||||
private static $table_name = 'SliderElement';
|
||||
|
||||
private static $slide_width = 2140;
|
||||
private static $slide_height = 700;
|
||||
|
||||
private static $db = [
|
||||
'Interval' => 'Int',
|
||||
];
|
||||
|
||||
private static $extensions = [
|
||||
FlexSlider::class,
|
||||
];
|
||||
|
||||
private static $owns = [
|
||||
'Slides',
|
||||
];
|
||||
|
||||
private $items;
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return self::$singular_name;
|
||||
}
|
||||
|
||||
public function getSlideWidth()
|
||||
{
|
||||
return self::config()->get('slide_width');
|
||||
}
|
||||
|
||||
public function getSlideHeight()
|
||||
{
|
||||
return self::config()->get('slide_height');
|
||||
}
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
// remove in case you don't need to provide this functionality
|
||||
$fields->removeByName([
|
||||
'ConfigHD',
|
||||
'Animation',
|
||||
'Loop',
|
||||
'Animate',
|
||||
'ThumbnailNav',
|
||||
'SliderControlNav',
|
||||
'SliderDirectionNav',
|
||||
'CarouselControlNav',
|
||||
'CarouselDirectionNav',
|
||||
'CarouselThumbnailCt',
|
||||
]);
|
||||
|
||||
$fields->addFieldsToTab('Root.Settings', [
|
||||
NumericField::create('Interval', 'Auto-play Interval'),
|
||||
]);
|
||||
|
||||
$grid = $fields->dataFieldByName('Slides');
|
||||
if ($grid) {
|
||||
$config = $grid->getConfig();
|
||||
|
||||
$columns = new GridFieldEditableColumns();
|
||||
$columns->setDisplayFields([
|
||||
'Hide' => [
|
||||
'title' => 'Hide it?',
|
||||
'field' => CheckboxField::class,
|
||||
],
|
||||
]);
|
||||
|
||||
$config->addComponent($columns);
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getSlideShow()
|
||||
{
|
||||
if ($this->items) {
|
||||
return $this->items;
|
||||
}
|
||||
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$this->items = $this->Slides()->filter([
|
||||
'Hide' => '0',
|
||||
])->filterByCallback(static function ($item, $list) use ($date) {
|
||||
$on = $item->getField('DateOn');
|
||||
$off = $item->getField('DateOff');
|
||||
|
||||
return ($on <= $date) && (!$off || $off > $date);
|
||||
})->sort('SortOrder');
|
||||
|
||||
return $this->items;
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
|
||||
if (!$this->getField('Interval')) {
|
||||
$this->setField('Interval', 5000);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace App\Elements;
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use App\Models\TeamMember;
|
||||
|
||||
class TeamMembersElement extends BaseElement
|
||||
{
|
||||
private static $singular_name = 'Team Members';
|
||||
|
||||
private static $plural_name = 'Team Members';
|
||||
|
||||
private static $description = 'Displays random Team Members';
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return self::$singular_name;
|
||||
}
|
||||
|
||||
public function Members()
|
||||
{
|
||||
return TeamMember::get()->sort('RAND()');
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 8/26/18
|
||||
* Time: 12:55 PM
|
||||
*/
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
|
||||
use SilverStripe\Core\Extension;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
|
||||
class AddressExtension extends Extension
|
||||
{
|
||||
public function updateFormFields(FieldList $fields)
|
||||
{
|
||||
$holder = CompositeField::create();
|
||||
foreach ($fields as $field) {
|
||||
$holder->push($field);
|
||||
$fields->remove($field);
|
||||
}
|
||||
|
||||
$holder->addExtraClass('col-sm-6');
|
||||
$fields->push($holder);
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Blog\Forms\GridField\GridFieldConfigBlogPost;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class BlogExtension extends DataExtension
|
||||
{
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$f = $fields->dataFieldByName('ChildPages');
|
||||
if ($f) {
|
||||
$f->setConfig(GridFieldConfigBlogPost::create(75));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 7/2/18
|
||||
* Time: 12:10 AM
|
||||
*/
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use DNADesign\Elemental\Models\ElementContent;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class BlogPostExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'Featured' => 'Boolean(0)',
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$mainTab = $fields->findOrMakeTab('Root.Main');
|
||||
$mainTab->push(CheckboxField::create('Featured'));
|
||||
}
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 7/2/18
|
||||
* Time: 1:05 AM
|
||||
*/
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\ORM\HiddenClass;
|
||||
use Page;
|
||||
|
||||
class CMSMain_HiddenClass extends Page implements HiddenClass
|
||||
{
|
||||
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Blog\Forms\GridField\GridFieldConfigBlogPost;
|
||||
use SilverStripe\Core\Extension;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class CompositeFieldExtension extends CompositeField
|
||||
{
|
||||
public function extraClass()
|
||||
{
|
||||
return 'composite '.parent::extraClass();
|
||||
}
|
||||
|
||||
public function getAttributes()
|
||||
{
|
||||
$attrs = parent::getAttributes();
|
||||
unset($attrs['name'], $attrs['type'], $attrs['disabled'], $attrs['readonly'], $attrs['autofocus']);
|
||||
|
||||
return $attrs;
|
||||
}
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
|
||||
use Sheadawson\Linkable\Forms\EmbeddedObjectField;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\ORM\FieldType\DBHTMLText;
|
||||
|
||||
class EmbedObjectField extends EmbeddedObjectField
|
||||
{
|
||||
/**
|
||||
* @param array $properties
|
||||
* @return mixed|DBHTMLText
|
||||
*/
|
||||
public function FieldHolder($properties = [])
|
||||
{
|
||||
$name = $this->getName();
|
||||
|
||||
$fields = [
|
||||
CheckboxField::create(
|
||||
$name . '[autoplay]',
|
||||
_t(self::CLASS.'AUTOPLAY', 'Autoplay video?')
|
||||
)->setValue($this->object->getField('Autoplay')),
|
||||
|
||||
CheckboxField::create(
|
||||
$name . '[loop]',
|
||||
_t(self::CLASS.'LOOP', 'Loop video?')
|
||||
)->setValue($this->object->getField('Loop')),
|
||||
|
||||
CheckboxField::create(
|
||||
$name.'[controls]',
|
||||
_t(self::CLASS.'CONTROLS', 'Show player controls?')
|
||||
)->setValue($this->object->getField('Controls'))
|
||||
];
|
||||
|
||||
return CompositeField::create(array_merge([
|
||||
LiteralField::create(
|
||||
$name.'Options',
|
||||
parent::FieldHolder($properties)
|
||||
)
|
||||
], $fields));
|
||||
}
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\View\HTML;
|
||||
|
||||
class EmbedShortcodeProvider extends \SilverStripe\View\Shortcodes\EmbedShortcodeProvider
|
||||
{
|
||||
/**
|
||||
* Build video embed tag
|
||||
*
|
||||
* @param array $arguments
|
||||
* @param string $content Raw HTML content
|
||||
* @return string
|
||||
*/
|
||||
protected static function videoEmbed($arguments, $content)
|
||||
{
|
||||
// Ensure outer div has given width (but leave height auto)
|
||||
if (!empty($arguments['width'])) {
|
||||
$arguments['style'] = 'width:' . (int) $arguments['width'] . 'px';
|
||||
//.';height:' . (int) $arguments['height'] . 'px';
|
||||
}
|
||||
|
||||
// Convert caption to <p>
|
||||
if (!empty($arguments['caption'])) {
|
||||
$xmlCaption = Convert::raw2xml($arguments['caption']);
|
||||
$content .= "\n<p class=\"caption\">{$xmlCaption}</p>";
|
||||
}
|
||||
|
||||
// Convert arguments to data-*argument_name*
|
||||
foreach ($arguments as $k => $v) {
|
||||
if($k === 'class' || $k === 'style') {
|
||||
continue;
|
||||
}
|
||||
|
||||
unset($arguments[$k]);
|
||||
$arguments['data-'.$k] = $v;
|
||||
}
|
||||
|
||||
$arguments['class'] .= ' embed-youtube embed-responsive embed-responsive-16by9';
|
||||
|
||||
$iframe = strpos($content, 'iframe');
|
||||
if($iframe >= 0) {
|
||||
$content = substr($content, 0, $iframe+6).' class="embed-responsive-item" '.substr($content, $iframe +7);
|
||||
}
|
||||
|
||||
return HTML::createTag('div', $arguments, $content);
|
||||
}
|
||||
}
|
|
@ -1,136 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class EmbeddedObjectExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'Autoplay' => 'Boolean(0)',
|
||||
'Loop' => 'Boolean(0)',
|
||||
'Controls' => 'Boolean(1)',
|
||||
];
|
||||
|
||||
public function Embed()
|
||||
{
|
||||
$this->owner->Embed();
|
||||
$this->setEmbedParams();
|
||||
|
||||
return $this->owner;
|
||||
}
|
||||
|
||||
public function setEmbedParams($params = [])
|
||||
{
|
||||
$iframe_params = [];
|
||||
if ($this->owner->getField('Autoplay')) {
|
||||
$iframe_params[] = 'allow="autoplay"';
|
||||
}
|
||||
|
||||
// YouTube params
|
||||
if (stripos($this->owner->EmbedHTML, 'https://www.youtube.com/embed/') > 0) {
|
||||
$url = $this->owner->getField('SourceURL');
|
||||
preg_match(
|
||||
'/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&"\'>]+)/',
|
||||
$url,
|
||||
$matches
|
||||
);
|
||||
if (isset($matches[1])) {
|
||||
$videoID = $matches[1];
|
||||
|
||||
$params = array_merge($params, [
|
||||
'feature=oembed',
|
||||
'wmode=transparent',
|
||||
'enablejsapi=1',
|
||||
'disablekb=1',
|
||||
'iv_load_policy=3',
|
||||
'modestbranding=1',
|
||||
'rel=0',
|
||||
'showinfo=0',
|
||||
//'controls='.($this->owner->getField('Controls') ? '1': '0')
|
||||
]);
|
||||
|
||||
if ($this->owner->getField('Autoplay')) {
|
||||
$params[] = 'autoplay=1';
|
||||
$params[] = 'mute=1';
|
||||
}
|
||||
|
||||
if ($this->owner->getField('Loop')) {
|
||||
$params[] = 'loop=1';
|
||||
$params[] = 'playlist=' . $videoID;
|
||||
}
|
||||
|
||||
$this->owner->EmbedHTML = preg_replace(
|
||||
'/src="([A-z0-9:\/\.]+)\??(.*?)"/',
|
||||
'src="https://www.youtube.com/embed/' . $videoID . '?' . implode('&', $params) . '" '
|
||||
. implode(' ', $iframe_params),
|
||||
$this->owner->EmbedHTML
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (stripos($this->owner->EmbedHTML, 'https://player.vimeo.com/video/') > 0) {
|
||||
$url = $this->owner->getField('SourceURL');
|
||||
preg_match(
|
||||
'/^https:\/\/vimeo\.com\/([A-z0-9]+)/',
|
||||
$url,
|
||||
$matches
|
||||
);
|
||||
$videoID = $matches[1];
|
||||
|
||||
$params = array_merge($params, [
|
||||
'controls='.($this->owner->getField('Controls') ? '1': '0'),
|
||||
'background=1',
|
||||
]);
|
||||
|
||||
if ($this->owner->getField('Autoplay')) {
|
||||
$params[] = 'autoplay=1';
|
||||
}
|
||||
|
||||
if ($this->owner->getField('Loop')) {
|
||||
$params[] = 'loop=1';
|
||||
}
|
||||
$this->owner->EmbedHTML = preg_replace(
|
||||
'/src="([A-z0-9:\/\.]+)\??(.*?)"/',
|
||||
'src="https://player.vimeo.com/video/'.$videoID.'?' . implode('&', $params) . '" '
|
||||
.implode(' ', $iframe_params),
|
||||
$this->owner->EmbedHTML
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$fields->removeByName([
|
||||
'Width', 'Height', 'EmbedHTML', 'ThumbURL',
|
||||
'Autoplay', 'Loop', 'Controls',
|
||||
'ExtraClass', 'Type',
|
||||
]);
|
||||
|
||||
$fields->addFieldsToTab('Root.Extra', [
|
||||
CheckboxField::create('Autoplay'),
|
||||
CheckboxField::create('Loop'),
|
||||
CheckboxField::create('Controls'),
|
||||
NumericField::create('Width'),
|
||||
NumericField::create('Height'),
|
||||
TextareaField::create('EmbedHTML'),
|
||||
TextField::create('ThumbURL'),
|
||||
TextField::create('ExtraClass'),
|
||||
TextField::create('Type'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
$this->setEmbedParams();
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Forms\Form;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class HtmlEditorFieldExtension extends DataExtension
|
||||
{
|
||||
public function updateMediaForm(Form $form)
|
||||
{
|
||||
$page_id = $_SESSION['CMSMain']['currentPage'];
|
||||
$page_urlsegment = SiteTree::get()->byID($page_id)->URLSegment;
|
||||
|
||||
$computerUploadField = $form->Fields()->dataFieldByName('AssetUploadField');
|
||||
$computerUploadField->setFolderName(sprintf("%s/images/%s", 'Uploads', $page_urlsegment));
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\NumericField;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class ImageExtension extends DataExtension
|
||||
{
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
/*$fields->removeByName([
|
||||
'Filename',
|
||||
]);*/
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Core\Extension;
|
||||
use SilverStripe\FontAwesome\FontAwesomeField;
|
||||
use SilverStripe\View\Requirements;
|
||||
use App\Templates\DeferredRequirements;
|
||||
|
||||
class LeftAndMainExtension extends Extension
|
||||
{
|
||||
public function init()
|
||||
{
|
||||
$config = Config::inst()->get(DeferredRequirements::class);
|
||||
// App libs
|
||||
if (!$config['nofontawesome']) {
|
||||
$v = !isset($config['fontawesome_version']) || !$config['fontawesome_version']
|
||||
? Config::inst()->get(FontAwesomeField::class, 'version')
|
||||
: $config['fontawesome_version'];
|
||||
|
||||
Requirements::css('//use.fontawesome.com/releases/v'.$v.'/css/all.css');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:37 PM
|
||||
*/
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\Control\HTTPResponse;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\ORM\FieldType\DBField;
|
||||
use SilverStripe\Security\MemberAuthenticator\LostPasswordHandler;
|
||||
|
||||
class LostPasswordHandlerExtension extends LostPasswordHandler
|
||||
{
|
||||
private static $url_handlers = [
|
||||
'passwordsent' => 'passwordsent',
|
||||
];
|
||||
|
||||
private static $allowed_actions = [
|
||||
'passwordsent',
|
||||
];
|
||||
|
||||
/**
|
||||
* Show the "password sent" page, after a user has requested
|
||||
* to reset their password.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function passwordsent()
|
||||
{
|
||||
$message = _t(
|
||||
'SilverStripe\\Security\\Security.PASSWORDRESETSENTTEXT',
|
||||
"Thank you. A reset link has been sent, provided an account exists for this email address."
|
||||
);
|
||||
|
||||
$email = $this->getRequest()->getVar('email');
|
||||
$message = $email
|
||||
? 'Thank you! A reset link has been sent to \''.$email.'\', provided an account exists for this email address.'
|
||||
: $message;
|
||||
|
||||
return [
|
||||
'Title' => _t(
|
||||
'SilverStripe\\Security\\Security.PASSWORDRESETSENTHEADER',
|
||||
"Password reset link sent".($email ? ' to \''.$email.'\'' : '')
|
||||
),
|
||||
'ElementalArea' => DBField::create_field('HTMLFragment', "<p>$message</p>"),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Avoid information disclosure by displaying the same status, regardless wether the email address actually exists
|
||||
*
|
||||
* @param array $data
|
||||
* @return HTTPResponse
|
||||
*/
|
||||
protected function redirectToSuccess(array $data)
|
||||
{
|
||||
$link = $this->link('passwordsent').'?email='.$data['Email'];
|
||||
|
||||
return $this->redirect($this->addBackURLParam($link));
|
||||
}
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use Dynamic\Elements\Blog\Elements\ElementBlogPosts;
|
||||
use Innoweb\Sitemap\Pages\SitemapPage;
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldDetailForm;
|
||||
use SilverStripe\Forms\GridField\GridFieldEditButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
||||
use SilverStripe\Forms\HeaderField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\TreeMultiselectField;
|
||||
use BetterBrief\GoogleMapField;
|
||||
use App\Models\Holiday;
|
||||
use App\Models\Notification;
|
||||
use App\Models\OpeningHour;
|
||||
use Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton;
|
||||
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
|
||||
use Symbiote\GridFieldExtensions\GridFieldTitleHeader;
|
||||
|
||||
class NotificationsExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'ShowNotifications' => 'Boolean(1)',
|
||||
];
|
||||
|
||||
private static $has_many = [
|
||||
'Notifications' => Notification::class,
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$tab = $fields->findOrMakeTab('Root.Notifications');
|
||||
|
||||
if(!$this->owner->exists()) {
|
||||
$tab->push(LiteralField::create(
|
||||
'NotificationsNotice',
|
||||
'<p class="message notice">The object must be saved before notifications can be added</p>'
|
||||
));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
$items = $this->owner->Notifications();
|
||||
|
||||
$config = GridFieldConfig::create();
|
||||
$config->addComponents([
|
||||
new GridFieldToolbarHeader(),
|
||||
new GridFieldTitleHeader(),
|
||||
new GridFieldEditableColumns(),
|
||||
new GridFieldAddNewInlineButton('toolbar-header-right'),
|
||||
new GridFieldDetailForm(),
|
||||
new GridFieldEditButton(),
|
||||
new GridFieldDeleteAction(),
|
||||
]);
|
||||
|
||||
$tab->setChildren(FieldList::create(
|
||||
HeaderField::create('NotificationsHeader','Notifications'),
|
||||
LiteralField::create(
|
||||
'CurrentNotifications',
|
||||
'<b>Current:</b>'
|
||||
.$this->owner->renderWith('App\\Objects\\NotificationsList')
|
||||
),
|
||||
CheckboxField::create('ShowNotifications'),
|
||||
GridField::create(
|
||||
'Notifications',
|
||||
'',
|
||||
$items,
|
||||
$config
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
public function NotificationsToday()
|
||||
{
|
||||
$items = $this->owner->Notifications();
|
||||
$time = time();
|
||||
|
||||
return $items->filter([
|
||||
'DateOn:LessThanOrEqual' => date('Y-m-d', $time),
|
||||
'DateOff:GreaterThanOrEqual' => date('Y-m-d', $time),
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,189 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use Dynamic\Elements\Blog\Elements\ElementBlogPosts;
|
||||
use Innoweb\Sitemap\Pages\SitemapPage;
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader;
|
||||
use SilverStripe\Forms\HeaderField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\TreeMultiselectField;
|
||||
use BetterBrief\GoogleMapField;
|
||||
use App\Models\Holiday;
|
||||
use App\Models\OpeningHour;
|
||||
use Symbiote\GridFieldExtensions\GridFieldAddNewInlineButton;
|
||||
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
|
||||
use Symbiote\GridFieldExtensions\GridFieldTitleHeader;
|
||||
|
||||
class OpenningHoursExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'ShowOpeningHours' => 'Boolean(1)',
|
||||
'OpenningHoursNote' => 'Varchar(255)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'OpeningHoursPage' => SiteTree::class,
|
||||
];
|
||||
|
||||
private static $has_many = [
|
||||
'OpeningHours' => OpeningHour::class,
|
||||
'Holidays' => Holiday::class,
|
||||
];
|
||||
|
||||
public function HoursLink()
|
||||
{
|
||||
return $this->owner->OpeningHoursPage()->Link();
|
||||
}
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$tab = $fields->findOrMakeTab('Root.OpeningHours');
|
||||
|
||||
if(!$this->owner->exists()) {
|
||||
$tab->push(LiteralField::create(
|
||||
'OpeningHoursNotice',
|
||||
'<p class="message notice">The object must be saved before opening hours can be added</p>'
|
||||
));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
$hours = $this->owner->OpeningHours();
|
||||
|
||||
$config = GridFieldConfig::create();
|
||||
$config->addComponents([
|
||||
new GridFieldToolbarHeader(),
|
||||
new GridFieldTitleHeader(),
|
||||
new GridFieldEditableColumns(),
|
||||
new GridFieldAddNewInlineButton('toolbar-header-right'),
|
||||
new GridFieldDeleteAction(),
|
||||
]);
|
||||
|
||||
$tab->setChildren(FieldList::create(
|
||||
HeaderField::create('OpeningHours','Opening Hours'),
|
||||
LiteralField::create(
|
||||
'CurrentOpeningHour',
|
||||
'<b>Today:</b>'
|
||||
.'<p class="message notice">'
|
||||
.$this->owner->renderWith('App\\Objects\\OpeningHoursList')
|
||||
.'</p>'
|
||||
),
|
||||
CheckboxField::create('ShowOpeningHours'),
|
||||
DropdownField::create(
|
||||
'OpeningHoursPageID',
|
||||
'Opening Hours Page',
|
||||
SiteTree::get()->map()->toArray()
|
||||
),
|
||||
/*TextareaField::create('OpenningHoursNote'),
|
||||
LiteralField::create(
|
||||
'OpeningHoursNote',
|
||||
'<p><b>Please, specify time ranges. For example:</b><br/>'
|
||||
.'Monday 10:00 AM - 2:00 PM<br/>'
|
||||
.'Monday 3:00 PM - 6:00 PM<br/>'
|
||||
.'Tuesday 12:00 AM - 2:00 PM<br/>'
|
||||
.'Tuesday 3:00 PM - 4:00 PM<br/>'
|
||||
.'...<br/>'
|
||||
.'<b>Short day example durring holidays:</b><br/>'
|
||||
.'Monday 12:00 AM - 2:00 PM 12/31/2018 - 01/06/2019'
|
||||
.'</p>'
|
||||
),*/
|
||||
GridField::create(
|
||||
'OpeningHours',
|
||||
'Opening Hours',
|
||||
$hours,
|
||||
$config
|
||||
)
|
||||
));
|
||||
|
||||
$tab = $fields->findOrMakeTab('Root.Holidays');
|
||||
$tab->push(GridField::create(
|
||||
'Holidays',
|
||||
'Holidays',
|
||||
$this->owner->Holidays(),
|
||||
$config
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the opening hours
|
||||
*
|
||||
* @return OpeningHour|DataObject|null
|
||||
*/
|
||||
public function OpeningHoursToday()
|
||||
{
|
||||
$hours = $this->owner->OpeningHours();
|
||||
$time = time();
|
||||
|
||||
$today = $hours->filter([
|
||||
'Day' => date('l', $time),
|
||||
'DisplayStart:LessThanOrEqual' => date('Y-m-d', $time),
|
||||
'DisplayEnd:GreaterThanOrEqual' => date('Y-m-d', $time),
|
||||
]);
|
||||
|
||||
return $today->exists() ? $today : $hours->filter([
|
||||
'Day' => date('l', $time),
|
||||
'DisplayStart' => null,
|
||||
'DisplayEnd' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
public function OpeningHoursJSON()
|
||||
{
|
||||
$hours = $this->owner->OpeningHours();
|
||||
$result = [];
|
||||
foreach ($hours as $hour) {
|
||||
$from = str_replace(':00', '', date('g:i a', strtotime($hour->getField('From'))));
|
||||
$till = str_replace(':00', '', date('g:i a', strtotime($hour->getField('Till'))));
|
||||
|
||||
$result['days'][$hour->getField('Day')][] = [
|
||||
'From' => $from,
|
||||
'Till' => $till,
|
||||
'DisplayStart' => $hour->getField('DisplayStart'),
|
||||
'DisplayEnd' => $hour->getField('DisplayEnd'),
|
||||
];
|
||||
}
|
||||
|
||||
$holidays = $this->owner->Holidays();
|
||||
foreach ($holidays as $holiday) {
|
||||
$result['holidays'][$holiday->getField('Date')] = $holiday->getField('Title');
|
||||
}
|
||||
|
||||
return json_encode($result);
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
if ($this->owner->exists() && !$this->owner->OpeningHours()->exists()) {
|
||||
$this->createOpeningHours();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up the opening hours for each day of the week
|
||||
*/
|
||||
private function createOpeningHours()
|
||||
{
|
||||
$days = OpeningHour::singleton()->dbObject('Day')->enumValues();
|
||||
foreach ($days as $day) {
|
||||
$openingHour = OpeningHour::create();
|
||||
$openingHour->Day = $day;
|
||||
$this->owner->OpeningHours()->add($openingHour);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Blog\Forms\GridField\GridFieldConfigBlogPost;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use TractorCow\Fluent\Model\Locale;
|
||||
|
||||
class PageFluentExtension extends DataExtension
|
||||
{
|
||||
/**
|
||||
* Override default Fluent fallback
|
||||
*
|
||||
* @param string $query
|
||||
* @param string $table
|
||||
* @param string $field
|
||||
* @param Locale $locale
|
||||
*/
|
||||
public function updateLocaliseSelect(&$query, $table, $field, Locale $locale)
|
||||
{
|
||||
// disallow elemental data inheritance in the case that published localised page instance already exists
|
||||
if ($field == 'ElementalAreaID' && $this->owner->isPublishedInLocale()) {
|
||||
$query = '"' . $table . '_Localised_' . $locale->getLocale() . '"."' . $field . '"';
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Core\Extension;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\TextField;
|
||||
|
||||
class PlaceholderFormExtension extends Extension
|
||||
{
|
||||
public function updateFormFields(FieldList $fields)
|
||||
{
|
||||
foreach ($fields as $field) {
|
||||
$this->setPlaceholder($field);
|
||||
}
|
||||
}
|
||||
|
||||
private function setPlaceholder($field)
|
||||
{
|
||||
if (is_a($field, TextField::class)) {
|
||||
$field->setAttribute(
|
||||
'placeholder',
|
||||
$field->Title()
|
||||
.($field->hasClass('requiredField') ? '*' : '')
|
||||
);
|
||||
$field->setTitle('');
|
||||
}
|
||||
|
||||
if (is_a($field, CompositeField::class)) {
|
||||
$children = $field->getChildren();
|
||||
foreach ($children as $child) {
|
||||
$this->setPlaceholder($child);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/23/18
|
||||
* Time: 1:23 PM
|
||||
*/
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class ShoppingCartControllerExtension extends DataExtension
|
||||
{
|
||||
public function updateAddResponse($request, $response, $product, $quantity)
|
||||
{
|
||||
\PageController::setSiteWideMessage('+'.$quantity.' item(s) was added into the cart', 'success', $request);
|
||||
}
|
||||
|
||||
public function updateRemoveResponse($request, $response, $product, $quantity)
|
||||
{
|
||||
\PageController::setSiteWideMessage(''.$quantity.' item(s) was removed from the cart', 'success', $request);
|
||||
}
|
||||
}
|
|
@ -1,139 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use A2nt\SilverStripeMapboxField\MapboxField;
|
||||
use Innoweb\Sitemap\Pages\SitemapPage;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Blog\Model\BlogPost;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\TreeMultiselectField;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
|
||||
//use BetterBrief\GoogleMapField;
|
||||
|
||||
class SiteConfigExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'ExtraCode' => 'Text',
|
||||
'Longitude' => 'Decimal(10, 8)',
|
||||
'Latitude' => 'Decimal(11, 8)',
|
||||
'MapZoom' => 'Int',
|
||||
//'MapAPIKey' => 'Varchar(255)',
|
||||
'Description' => 'Varchar(255)',
|
||||
'Address' => 'Varchar(255)',
|
||||
'Suburb' => 'Varchar(255)',
|
||||
'State' => 'Varchar(255)',
|
||||
'ZipCode' => 'Varchar(6)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'PrivacyPolicy' => SiteTree::class,
|
||||
'Sitemap' => SiteTree::class,
|
||||
];
|
||||
|
||||
private static $many_many = [
|
||||
'Navigation' => SiteTree::class,
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
$img = Image::get()->filter([
|
||||
'ParentID' => 0,
|
||||
'FileFilename' => 'qrcode.png',
|
||||
])->first();
|
||||
if ($img) {
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
LiteralField::create('QRCode', '<img src="'.$img->Link().'" alt="QR code" width="200" style="float:left" />'),
|
||||
]);
|
||||
}
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
TreeMultiselectField::create(
|
||||
'Navigation',
|
||||
'Navigation',
|
||||
SiteTree::class
|
||||
)->setDisableFunction(static function ($el) {
|
||||
return $el->getField('ParentID') !== 0;
|
||||
}),
|
||||
TextareaField::create('Description', 'Website Description'),
|
||||
TextareaField::create('ExtraCode', 'Extra site-wide HTML code'),
|
||||
DropdownField::create(
|
||||
'PrivacyPolicyID',
|
||||
'Privacy Policy Page',
|
||||
SiteTree::get()->map()->toArray()
|
||||
)->setEmptyString('(Select one)'),
|
||||
DropdownField::create(
|
||||
'SitemapID',
|
||||
'Sitemap Page',
|
||||
SitemapPage::get()->map()->toArray()
|
||||
)->setEmptyString('(Select one)'),
|
||||
]);
|
||||
|
||||
$mapTab = $fields->findOrMakeTab('Root.Maps');
|
||||
$mapTab->setTitle('Address / Map');
|
||||
|
||||
$fields->addFieldsToTab('Root.Maps', [
|
||||
TextField::create('Address'),
|
||||
TextField::create('Suburb', 'City'),
|
||||
TextField::create('State'),
|
||||
TextField::create('ZipCode'),
|
||||
]);
|
||||
|
||||
if (MapboxField::getAccessToken()) {
|
||||
$fields->addFieldsToTab('Root.Maps', [
|
||||
//TextField::create('MapAPIKey'),
|
||||
TextField::create('MapZoom'),
|
||||
MapboxField::create('Map', 'Choose a location', 'Latitude', 'Longitude'),
|
||||
]);
|
||||
} else {
|
||||
$fields->addFieldsToTab('Root.Maps', [
|
||||
LiteralField::create('MapNotice', '<p class="alert alert-info">No Map API keys specified.</p>')
|
||||
]);
|
||||
}
|
||||
|
||||
/*GoogleMapField::create(
|
||||
$this->owner,
|
||||
'Location',
|
||||
[
|
||||
'show_search_box' => true,
|
||||
]
|
||||
)*/
|
||||
}
|
||||
|
||||
public function MapAPIKey()
|
||||
{
|
||||
return MapboxField::config()->get('access_token');
|
||||
}
|
||||
|
||||
public function MapStyle()
|
||||
{
|
||||
return MapboxField::config()->get('map_style');
|
||||
}
|
||||
|
||||
public function getGeoJSON()
|
||||
{
|
||||
return '{"type": "MarkerCollection","features": [{"type": "Feature","icon": "<i class=\'fas fa-map-marker-alt\'></i>",'
|
||||
.'"properties": {"content": "'.$this->owner->getTitle().'"},"geometry": {"type": "Point",'
|
||||
.'"coordinates": ['.$this->owner->getField('Longitude').','.$this->owner->getField('Latitude').']}}]}';
|
||||
}
|
||||
|
||||
public function DirectionsLink()
|
||||
{
|
||||
return '<a href="https://www.google.com/maps/dir/Current+Location/'
|
||||
.$this->owner->getField('Latitude').','
|
||||
.$this->owner->getField('Longitude').'" class="btn btn-primary btn-directions" target="_blank">'
|
||||
.'<i class="fas fa-road"></i> Get Directions</a>';
|
||||
}
|
||||
|
||||
public function getLatestBlogPosts()
|
||||
{
|
||||
return BlogPost::get()->sort('PublishDate DESC');
|
||||
}
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Security\MemberAuthenticator\MemberLoginForm;
|
||||
|
||||
class SiteMemberLoginForm extends MemberLoginForm
|
||||
{
|
||||
public function __construct(
|
||||
$controller,
|
||||
$authenticatorClass,
|
||||
$name,
|
||||
$fields = null,
|
||||
$actions = null,
|
||||
$checkCurrentUser = true
|
||||
) {
|
||||
parent::__construct($controller, $authenticatorClass, $name, $fields, $actions, $checkCurrentUser);
|
||||
|
||||
$fields = $this->Fields();
|
||||
$actions = $this->Actions();
|
||||
|
||||
$email = $fields->fieldByName('Email');
|
||||
if ($email) {
|
||||
$email
|
||||
->setAttribute('placeholder', 'your@email.com')
|
||||
->setAttribute('autocomplete', 'email')
|
||||
->setAttribute('type', 'email');
|
||||
}
|
||||
|
||||
$pass = $fields->fieldByName('Password');
|
||||
if($pass) {
|
||||
//$pass->setAttribute('autocomplete', 'current-password');
|
||||
$pass->setAttribute('placeholder', '**********');
|
||||
$pass->setAutofocus(true);
|
||||
}
|
||||
|
||||
$btn = $actions->fieldByName('action_doLogin');
|
||||
if($btn) {
|
||||
$btn->setUseButtonTag(true);
|
||||
$btn->setButtonContent('<i class="fas fa-check"></i> '.$btn->Title());
|
||||
$btn->addExtraClass('btn-lg');
|
||||
}
|
||||
|
||||
if (Director::isLive()) {
|
||||
$this->enableSpamProtection();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Forms\TextareaField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
|
||||
class SiteTreeExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'ExtraCode' => 'Text',
|
||||
];
|
||||
|
||||
public function updateSettingsFields(FieldList $fields)
|
||||
{
|
||||
$fields->addFieldsToTab('Root.Settings', [
|
||||
TextareaField::create(
|
||||
'ExtraCode',
|
||||
'Extra page specific HTML code'
|
||||
),
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:37 PM
|
||||
* Ref: Dynamic\FlexSlider\Model\SlideImage
|
||||
*/
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Forms\DatetimeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\ToggleCompositeField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class SlideImageExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'Hide' => 'Boolean(0)',
|
||||
'DateOn' => 'Datetime',
|
||||
'DateOff' => 'Datetime',
|
||||
];
|
||||
|
||||
private $_cache = [];
|
||||
|
||||
public function getElement()
|
||||
{
|
||||
if(!isset($this->_cache['element'])) {
|
||||
$this->_cache['element'] = $this->owner->SlideshowElement();
|
||||
}
|
||||
|
||||
return $this->_cache['element'];
|
||||
}
|
||||
|
||||
public function getSlideWidth()
|
||||
{
|
||||
$element = $this->getElement();
|
||||
return $element->getSlideWidth();
|
||||
}
|
||||
|
||||
public function getSlideHeight()
|
||||
{
|
||||
$element = $this->getElement();
|
||||
return $element->getSlideHeight();
|
||||
}
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$fields->removeByName([
|
||||
'PageLinkID',
|
||||
'Hide',
|
||||
'DateOn',
|
||||
'DateOff',
|
||||
]);
|
||||
|
||||
|
||||
$fields->dataFieldByName('Image')
|
||||
->setTitle('Image ('.$this->getSlideWidth().' x '.$this->getSlideHeight().' px)');
|
||||
|
||||
$fields->addFieldToTab('Root.Main', ToggleCompositeField::create(
|
||||
'ConfigHD',
|
||||
'Slide Settings',
|
||||
[
|
||||
CheckboxField::create('Hide', 'Hide this slide? (That will hide the slide regardless of start/end fields)'),
|
||||
DatetimeField::create('DateOn', 'When would you like to start showing the slide?'),
|
||||
DatetimeField::create('DateOff', 'When would you like to stop showing the slide?'),
|
||||
]
|
||||
));
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:37 PM
|
||||
*/
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\TextField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\Security\Member;
|
||||
|
||||
class SocialExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
//'PhoneNumber' => 'Varchar(255)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'Facebook' => Link::class,
|
||||
'LinkedIn' => Link::class,
|
||||
'Pinterest' => Link::class,
|
||||
'Instagram' => Link::class,
|
||||
'Twitter' => Link::class,
|
||||
'PublicEmail' => Link::class,
|
||||
'PhoneNumber' => Link::class,
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$linkFields = [
|
||||
LinkField::create('FacebookID'),
|
||||
LinkField::create('LinkedInID'),
|
||||
LinkField::create('PinterestID'),
|
||||
LinkField::create('InstagramID'),
|
||||
LinkField::create('TwitterID'),
|
||||
];
|
||||
|
||||
foreach ($linkFields as $field) {
|
||||
$field->setAllowedTypes(['URL']);
|
||||
}
|
||||
|
||||
$fields->findOrMakeTab('Root.Social');
|
||||
|
||||
$fields->addFieldsToTab('Root.Social', [
|
||||
LinkField::create('PublicEmailID', 'Public Email')
|
||||
->setAllowedTypes(['Email']),
|
||||
LinkField::create('PhoneNumberID', 'Phone Number')
|
||||
->setAllowedTypes(['Phone']),
|
||||
]);
|
||||
|
||||
$fields->addFieldsToTab('Root.Social', $linkFields);
|
||||
}
|
||||
|
||||
public static function byPhone($phone)
|
||||
{
|
||||
$links = Link::get()->filter('Phone', $phone);
|
||||
|
||||
if ($links->exists()) {
|
||||
return Member::get()->filter(
|
||||
'PhoneNumberID',
|
||||
array_keys($links->map('ID', 'Title')->toArray())
|
||||
)->first();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Extensions;
|
||||
|
||||
use SilverStripe\ORM\HiddenClass;
|
||||
use SilverStripe\UserForms\Model\UserDefinedForm;
|
||||
|
||||
class UserDefinedForm_HiddenClass extends UserDefinedForm implements HiddenClass
|
||||
{
|
||||
}
|
|
@ -1,140 +0,0 @@
|
|||
<?php namespace Milkyway\SS\GridFieldUtils;
|
||||
|
||||
/**
|
||||
* Milkyway Multimedia
|
||||
* SaveAllButton.php
|
||||
*
|
||||
* @package milkyway-multimedia/ss-gridfield-utils
|
||||
* @author Mellisa Hankins <mell@milkywaymultimedia.com.au>
|
||||
*/
|
||||
|
||||
use GridField;
|
||||
use GridField_HTMLProvider;
|
||||
use GridField_ActionProvider;
|
||||
use GridField_FormAction;
|
||||
use GridField_SaveHandler;
|
||||
use Controller;
|
||||
|
||||
class SaveAllButton implements GridField_HTMLProvider, GridField_ActionProvider
|
||||
{
|
||||
protected $targetFragment;
|
||||
protected $actionName = 'saveallrecords';
|
||||
|
||||
public $buttonName;
|
||||
|
||||
public $publish = true;
|
||||
|
||||
public $completeMessage;
|
||||
|
||||
public $removeChangeFlagOnFormOnSave = false;
|
||||
|
||||
public function setButtonName($name)
|
||||
{
|
||||
$this->buttonName = $name;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setRemoveChangeFlagOnFormOnSave($flag)
|
||||
{
|
||||
$this->removeChangeFlagOnFormOnSave = $flag;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function __construct($targetFragment = 'before', $publish = true, $action = 'saveallrecords')
|
||||
{
|
||||
$this->targetFragment = $targetFragment;
|
||||
$this->publish = $publish;
|
||||
$this->actionName = $action;
|
||||
}
|
||||
|
||||
public function getHTMLFragments($gridField)
|
||||
{
|
||||
$singleton = singleton($gridField->getModelClass());
|
||||
|
||||
if (!$singleton->canEdit() && !$singleton->canCreate()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!$this->buttonName) {
|
||||
if ($this->publish && $singleton->hasExtension('Versioned')) {
|
||||
$this->buttonName = _t('GridField.SAVE_ALL_AND_PUBLISH', 'Save all and publish');
|
||||
} else {
|
||||
$this->buttonName = _t('GridField.SAVE_ALL', 'Save all');
|
||||
}
|
||||
}
|
||||
|
||||
$button = GridField_FormAction::create(
|
||||
$gridField,
|
||||
$this->actionName,
|
||||
$this->buttonName,
|
||||
$this->actionName,
|
||||
null
|
||||
);
|
||||
|
||||
$button->setAttribute('data-icon', 'disk')->addExtraClass('new new-link ui-button-text-icon-primary');
|
||||
|
||||
if ($this->removeChangeFlagOnFormOnSave) {
|
||||
$button->addExtraClass('js-mwm-gridfield--saveall');
|
||||
}
|
||||
|
||||
return [
|
||||
$this->targetFragment => $button->Field(),
|
||||
];
|
||||
}
|
||||
|
||||
public function getActions($gridField)
|
||||
{
|
||||
return [$this->actionName];
|
||||
}
|
||||
|
||||
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
|
||||
{
|
||||
if ($actionName == $this->actionName) {
|
||||
return $this->saveAllRecords($gridField, $arguments, $data);
|
||||
}
|
||||
}
|
||||
|
||||
protected function saveAllRecords(GridField $grid, $arguments, $data)
|
||||
{
|
||||
if (isset($data[$grid->Name])) {
|
||||
$currValue = $grid->Value();
|
||||
$grid->setValue($data[$grid->Name]);
|
||||
$model = singleton($grid->List->dataClass());
|
||||
|
||||
foreach ($grid->getConfig()->getComponents() as $component) {
|
||||
if ($component instanceof GridField_SaveHandler) {
|
||||
$component->handleSave($grid, $model);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->publish) {
|
||||
// Only use the viewable list items, since bulk publishing can take a toll on the system
|
||||
$list = ($paginator = $grid->getConfig()->getComponentByType('GridFieldPaginator')) ? $paginator->getManipulatedData($grid, $grid->List) : $grid->List;
|
||||
|
||||
$list->each(
|
||||
function ($item) {
|
||||
if ($item->hasExtension('Versioned')) {
|
||||
$item->writeToStage('Stage');
|
||||
$item->publish('Stage', 'Live');
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if ($model->exists()) {
|
||||
$model->delete();
|
||||
$model->destroy();
|
||||
}
|
||||
|
||||
$grid->setValue($currValue);
|
||||
|
||||
if (Controller::curr() && $response = Controller::curr()->Response) {
|
||||
if (!$this->completeMessage) {
|
||||
$this->completeMessage = _t('GridField.DONE', 'Done.');
|
||||
}
|
||||
|
||||
$response->addHeader('X-Status', rawurlencode($this->completeMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
use SilverStripe\GraphQL\Auth\AuthenticatorInterface;
|
||||
use SilverStripe\ORM\ValidationException;
|
||||
use SilverStripe\Security\Member;
|
||||
use App\Templates\WebpackTemplateProvider;
|
||||
use SilverStripe\Security\Permission;
|
||||
use SilverStripe\Security\Security;
|
||||
|
||||
class APIKeyAuthenticator implements AuthenticatorInterface
|
||||
{
|
||||
public function authenticate(HTTPRequest $request)
|
||||
{
|
||||
$member = Security::getCurrentUser();
|
||||
|
||||
if (Director::isLive()
|
||||
&& $request->getHeader('apikey') !== WebpackTemplateProvider::config()['GRAPHQL_API_KEY']
|
||||
) {
|
||||
if ($member && Permission::checkMember($member, 'CMS_ACCESS')) {
|
||||
return $member;
|
||||
}
|
||||
|
||||
throw new ValidationException('Restricted resource', 401);
|
||||
}
|
||||
|
||||
return Member::get()->first();
|
||||
}
|
||||
|
||||
public function isApplicable(HTTPRequest $request)
|
||||
{
|
||||
if ($request->param('Controller') === '%$SilverStripe\GraphQL\Controller.admin') {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*if($request->getHeader('apikey')){
|
||||
return true;
|
||||
}*/
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
|
||||
use GraphQL\Type\Schema;
|
||||
use SilverStripe\GraphQL\Middleware\QueryMiddleware;
|
||||
use App\Templates\WebpackTemplateProvider;
|
||||
|
||||
class APIKeyMiddleware implements QueryMiddleware
|
||||
{
|
||||
public function process(Schema $schema, $query, $context, $params, callable $next)
|
||||
{
|
||||
var_dump($context);
|
||||
die('saaddsdsads');
|
||||
if($request->getHeader('apikey') === WebpackTemplateProvider::config()['GRAPHQL_API_KEY']) {
|
||||
return $next($schema, $query, $context, $params);
|
||||
}
|
||||
|
||||
throw new \Exception('Invalid API key token');
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
|
||||
use GraphQL\Type\Definition\ResolveInfo;
|
||||
use GraphQL\Type\Definition\Type;
|
||||
use SilverStripe\GraphQL\TypeCreator;
|
||||
|
||||
class ElementTypeCreator extends TypeCreator
|
||||
{
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'name' => 'element'
|
||||
];
|
||||
}
|
||||
|
||||
public function fields()
|
||||
{
|
||||
return [
|
||||
'_id' => ['type' => Type::nonNull(Type::id()),'resolve' => static function($object) {
|
||||
return $object->ID;
|
||||
}],
|
||||
'ID' => ['type' => Type::nonNull(Type::id())],
|
||||
'Title' => ['type' => Type::string()],
|
||||
'ParentID' => ['type' => Type::id()],
|
||||
'Render' => [
|
||||
'type' => Type::string(),
|
||||
'resolve' => static function($object, array $args, $context, ResolveInfo $info) {
|
||||
//$object->forTemplate()->HTML()
|
||||
return $object->getController()->forTemplate()->HTML();
|
||||
}
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
|
||||
use GraphQL\Type\Definition\Type;
|
||||
use SilverStripe\GraphQL\TypeCreator;
|
||||
use SilverStripe\GraphQL\Pagination\Connection;
|
||||
|
||||
class MemberTypeCreator extends TypeCreator
|
||||
{
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'name' => 'member'
|
||||
];
|
||||
}
|
||||
|
||||
public function fields()
|
||||
{
|
||||
return [
|
||||
'ID' => ['type' => Type::nonNull(Type::id())],
|
||||
'Email' => ['type' => Type::string()],
|
||||
'FirstName' => ['type' => Type::string()],
|
||||
'Surname' => ['type' => Type::string()],
|
||||
];
|
||||
}
|
||||
}
|
|
@ -1,107 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
|
||||
use GraphQL\Type\Definition\ResolveInfo;
|
||||
use GraphQL\Type\Definition\Type;
|
||||
use SilverStripe\CMS\Controllers\ModelAsController;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
use SilverStripe\GraphQL\TypeCreator;
|
||||
use SilverStripe\GraphQL\Pagination\Connection;
|
||||
use SilverStripe\View\SSViewer;
|
||||
|
||||
class PageTypeCreator extends TypeCreator
|
||||
{
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'name' => 'page'
|
||||
];
|
||||
}
|
||||
|
||||
public function fields()
|
||||
{
|
||||
$elementsConnection = Connection::create('Elements')
|
||||
->setConnectionType($this->manager->getType('element'))
|
||||
->setDescription('A list of the page elements')
|
||||
->setSortableFields(['ID', 'Title']);
|
||||
|
||||
return [
|
||||
'_id' => ['type' => Type::nonNull(Type::id()),'resolve' => static function($object) {
|
||||
return $object->ID;
|
||||
}],
|
||||
'ID' => ['type' => Type::nonNull(Type::id())],
|
||||
'Title' => ['type' => Type::string()],
|
||||
'Content' => ['type' => Type::string()],
|
||||
'Link' => ['type' => Type::string(), 'resolve' => static function($object) {
|
||||
return $object->Link();
|
||||
}],
|
||||
'URLSegment' => ['type' => Type::string()],
|
||||
'ParentID' => ['type' => Type::id()],
|
||||
'ClassName' => ['type' => Type::string()],
|
||||
'CSSClass' => ['type' => Type::string(), 'resolve' => static function($object) {
|
||||
return $object->CSSClass();
|
||||
}],
|
||||
'Summary' => ['type' => Type::string(), 'resolve' => static function($object) {
|
||||
return $object->Summary();
|
||||
}],
|
||||
'HTML' => ['type' => Type::string(), 'resolve' => static function($object) {
|
||||
// get action from request
|
||||
$action = null;
|
||||
|
||||
/** @var \Page $object */
|
||||
Director::set_current_page($object);
|
||||
/** @var \PageController $controller */
|
||||
$controller = ModelAsController::controller_for($object);
|
||||
|
||||
// find templates
|
||||
$tpl = 'Page';
|
||||
$tpls = SSViewer::get_templates_by_class(
|
||||
$object->ClassName,
|
||||
($action ? '_'.$action : ''),
|
||||
\Page::class
|
||||
);
|
||||
|
||||
foreach ($tpls as $tpl){
|
||||
if(is_array($tpl)){
|
||||
continue;
|
||||
}
|
||||
|
||||
$a_tpl = explode('\\',$tpl);
|
||||
$last_name = array_pop($a_tpl);
|
||||
$a_tpl[] = 'Layout';
|
||||
$a_tpl[] = $last_name;
|
||||
$a_tpl = implode('\\', $a_tpl);
|
||||
|
||||
if(SSViewer::hasTemplate($a_tpl)){
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
$tpl = ($tpl !== 'Page') ? $tpl : 'Layout/Page';
|
||||
|
||||
$action = $action ? $action : 'index';
|
||||
/** @var HTTPRequest $request */
|
||||
$controller->setAction($action);
|
||||
|
||||
return $controller->renderWith([$tpl, 'GraphQLPage'])->HTML();
|
||||
}],
|
||||
'Elements' => [
|
||||
'type' => $elementsConnection->toType(),
|
||||
'args' => $elementsConnection->args(),
|
||||
'resolve' => static function($object, array $args, $context, ResolveInfo $info) use ($elementsConnection) {
|
||||
return $elementsConnection->resolveList(
|
||||
$object->ElementalArea()->Elements(),
|
||||
$args,
|
||||
$context
|
||||
);
|
||||
}
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
|
||||
use GraphQL\Type\Definition\ResolveInfo;
|
||||
use GraphQL\Type\Definition\Type;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\GraphQL\Pagination\Connection;
|
||||
use SilverStripe\GraphQL\Pagination\PaginatedQueryCreator;
|
||||
|
||||
class PaginatedReadMembersQueryCreator extends PaginatedQueryCreator
|
||||
{
|
||||
public function createConnection()
|
||||
{
|
||||
|
||||
return Connection::create('paginatedReadMembers')
|
||||
->setConnectionType($this->manager->getType('member'))
|
||||
->setArgs([
|
||||
'Email' => [
|
||||
'type' => Type::string()
|
||||
]
|
||||
])
|
||||
->setSortableFields(['ID', 'FirstName', 'Email'])
|
||||
->setConnectionResolver(static function ($object, array $args, $context, ResolveInfo $info) {
|
||||
$member = Member::singleton();
|
||||
if (!$member->canView($context['currentUser'])) {
|
||||
throw new \InvalidArgumentException(sprintf(
|
||||
'%s view access not permitted',
|
||||
Member::class
|
||||
));
|
||||
}
|
||||
$list = Member::get();
|
||||
|
||||
// Optional filtering by properties
|
||||
if (isset($args['Email'])) {
|
||||
$list = $list->filter('Email', $args['Email']);
|
||||
}
|
||||
|
||||
return $list;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
|
||||
use GraphQL\Type\Definition\ResolveInfo;
|
||||
use GraphQL\Type\Definition\Type;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\ORM\ArrayList;
|
||||
use SilverStripe\ORM\SS_List;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\GraphQL\Pagination\Connection;
|
||||
use SilverStripe\GraphQL\Pagination\PaginatedQueryCreator;
|
||||
|
||||
class PaginatedReadPagesQueryCreator extends PaginatedQueryCreator
|
||||
{
|
||||
public function createConnection()
|
||||
{
|
||||
|
||||
return Connection::create('readPages')
|
||||
->setConnectionType($this->manager->getType('page'))
|
||||
->setArgs([
|
||||
'Link' => [
|
||||
'type' => Type::string()
|
||||
]
|
||||
])
|
||||
->setSortableFields(['Sort'])
|
||||
->setConnectionResolver(static function ($object, array $args, $context, ResolveInfo $info) {
|
||||
|
||||
if (isset($args['Link'])) {
|
||||
$link = $args['Link'];
|
||||
|
||||
if(SiteTree::has_extension('\TractorCow\Fluent\Extension\FluentSiteTreeExtension')) {
|
||||
$arr = array_filter(explode('/', $args['Link']));
|
||||
|
||||
$locale = \TractorCow\Fluent\Model\Locale::get()->filter('URLSegment', array_shift($arr))->first();
|
||||
\TractorCow\Fluent\State\FluentState::singleton()->setLocale($locale->Locale);
|
||||
|
||||
$link = implode('/', $arr);
|
||||
}
|
||||
|
||||
|
||||
$list = ArrayList::create();
|
||||
$page = SiteTree::get_by_link($link);
|
||||
$list->add($page);
|
||||
}
|
||||
|
||||
/*$list = \Page::get();
|
||||
|
||||
// Optional filtering by properties
|
||||
if (isset($args['ID'])) {
|
||||
$list = $list->filter('ID', $args['ID']);
|
||||
}*/
|
||||
|
||||
return $list;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\GraphQL;
|
||||
|
||||
|
||||
use GraphQL\Type\Definition\ResolveInfo;
|
||||
use GraphQL\Type\Definition\Type;
|
||||
use SilverStripe\Security\Member;
|
||||
use SilverStripe\GraphQL\OperationResolver;
|
||||
use SilverStripe\GraphQL\QueryCreator;
|
||||
|
||||
class ReadMembersQueryCreator extends QueryCreator implements OperationResolver
|
||||
{
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'name' => 'readMembers'
|
||||
];
|
||||
}
|
||||
|
||||
public function args()
|
||||
{
|
||||
return [
|
||||
'Email' => ['type' => Type::string()]
|
||||
];
|
||||
}
|
||||
|
||||
public function type()
|
||||
{
|
||||
return Type::listOf($this->manager->getType('member'));
|
||||
}
|
||||
|
||||
public function resolve($object, array $args, $context, ResolveInfo $info)
|
||||
{
|
||||
$member = Member::singleton();
|
||||
|
||||
if (!$member->canView($context['currentUser'])) {
|
||||
throw new \InvalidArgumentException(sprintf(
|
||||
'%s view access not permitted',
|
||||
Member::class
|
||||
));
|
||||
}
|
||||
$list = Member::get();
|
||||
|
||||
// Optional filtering by properties
|
||||
if (isset($args['Email'])) {
|
||||
$list = $list->filter('Email', $args['Email']);
|
||||
}
|
||||
|
||||
return $list;
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 9/12/18
|
||||
* Time: 2:55 AM
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Dynamic\FlexSlider\Model\SlideImage;
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\ValidationResult;
|
||||
use SilverStripe\SiteConfig\SiteConfig;
|
||||
|
||||
class Holiday extends DataObject
|
||||
{
|
||||
private static $table_name = 'Holiday';
|
||||
|
||||
private static $db = [
|
||||
'Title' => 'Varchar(255)',
|
||||
'Date' => 'Date',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'Parent' => SiteConfig::class,
|
||||
];
|
||||
|
||||
|
||||
private static $summary_fields = [
|
||||
'Title' => 'Title',
|
||||
'Date' => 'Date',
|
||||
];
|
||||
|
||||
private static $default_sort = 'Date ASC, Title ASC';
|
||||
|
||||
public function validate()
|
||||
{
|
||||
$result = parent::validate();
|
||||
|
||||
$exists = self::get()->filter([
|
||||
'ID:not' => $this->ID,
|
||||
'Date' => $this->getField('Date'),
|
||||
])->exists();
|
||||
|
||||
if($exists) {
|
||||
return $result->addError(
|
||||
'Holiday was defined already.',
|
||||
ValidationResult::TYPE_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
|
@ -1,144 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 9/12/18
|
||||
* Time: 2:55 AM
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use A2nt\SilverStripeMapboxField\MapboxField;
|
||||
use A2nt\SilverStripeMapboxField\MarkerExtension;
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use App\Elements\MapElement;
|
||||
use Symbiote\Addressable\Addressable;
|
||||
|
||||
class MapPin extends DataObject
|
||||
{
|
||||
private static $table_name = 'MapPin';
|
||||
|
||||
private static $db = [
|
||||
'Title' => 'Varchar(255)',
|
||||
'ShowAtMap' => 'Boolean(1)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'PhoneNumber' => Link::class,
|
||||
'Fax' => Link::class,
|
||||
];
|
||||
|
||||
private static $extensions = [
|
||||
Addressable::class,
|
||||
MarkerExtension::class,
|
||||
Versioned::class,
|
||||
];
|
||||
|
||||
private static $belongs_many_many = [
|
||||
'MapElements' => MapElement::class,
|
||||
];
|
||||
|
||||
private static $default_sort = 'Title ASC, ID DESC';
|
||||
|
||||
private static $summary_fields = [
|
||||
'Title',
|
||||
'Address',
|
||||
'ShowAtMap',
|
||||
];
|
||||
|
||||
private static $defaults = [
|
||||
'ShowAtMap' => '1',
|
||||
'Suburb' => 'Syracuse',
|
||||
'State' => 'NY',
|
||||
'Postcode' => '13210',
|
||||
'Country' => 'US',
|
||||
];
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->removeByName('MapElements');
|
||||
|
||||
$fields->replaceField(
|
||||
'PhoneNumberID',
|
||||
LinkField::create('PhoneNumberID', 'Phone Number')
|
||||
->setAllowedTypes(['Phone'])
|
||||
);
|
||||
|
||||
$fields->replaceField(
|
||||
'FaxID',
|
||||
LinkField::create('FaxID', 'FAX')
|
||||
->setAllowedTypes(['Phone'])
|
||||
);
|
||||
$fields->removeByName(['Map', 'LatLngOverride', 'Lng','Lat']);
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
CheckboxField::create('ShowAtMap', 'Show at the map?'),
|
||||
CheckboxField::create('LatLngOverride', 'Override Latitude and Longitude?')
|
||||
->setDescription('Check this box and save to be able to edit the latitude and longitude manually.'),
|
||||
MapboxField::create('Map', 'Choose a location', 'Lat', 'Lng'),
|
||||
]);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
|
||||
$lng = $this->getField('Lng');
|
||||
$lat = $this->getField('Lat');
|
||||
|
||||
|
||||
if (!$this->getField('Country')) {
|
||||
$this->setField('Country', 'us');
|
||||
}
|
||||
|
||||
// geocode
|
||||
try {
|
||||
// reverse geocoding get address
|
||||
if (!$this->hasAddress() && $lng && $lat) {
|
||||
require_once BASE_PATH . '/app/thirdparty/geocoding-example/php/Mapbox.php';
|
||||
$mapbox = new \Mapbox(MapboxField::getAccessToken());
|
||||
|
||||
// GET Address
|
||||
$res = $mapbox->reverseGeocode($lng, $lat);
|
||||
if ($res->success() && $res->getCount()) {
|
||||
$res = $res->getData();
|
||||
if (count($res) && isset($res[0]['place_name'])) {
|
||||
$details = explode(',', $res[0]['place_name']);
|
||||
$fields = [
|
||||
'Address',
|
||||
'City',
|
||||
'State',
|
||||
//'Country',
|
||||
];
|
||||
|
||||
$n = count($fields);
|
||||
for ($i = 0; $i < $n; $i++) {
|
||||
if (!isset($details[$i])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$name = $fields[$i];
|
||||
$val = $details[$i];
|
||||
|
||||
// get postal code
|
||||
if ($name === 'State') {
|
||||
$this->setField('PostalCode', substr($val, strrpos($val, ' ')+1));
|
||||
}
|
||||
|
||||
$this->setField($name, $val);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 9/12/18
|
||||
* Time: 2:55 AM
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Dynamic\FlexSlider\Model\SlideImage;
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\ValidationResult;
|
||||
use SilverStripe\SiteConfig\SiteConfig;
|
||||
|
||||
class Notification extends DataObject
|
||||
{
|
||||
private static $table_name = 'Notification';
|
||||
|
||||
private static $db = [
|
||||
'Title' => 'Varchar(255)',
|
||||
'Content' => 'Text',
|
||||
'DateOn' => 'Date',
|
||||
'DateOff' => 'Date',
|
||||
'Area' => 'Enum("Site","Site")',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'Parent' => SiteConfig::class,
|
||||
'TargetLink' => Link::class,
|
||||
];
|
||||
|
||||
private static $defaults = [
|
||||
'Area' => 'Site',
|
||||
];
|
||||
|
||||
|
||||
private static $summary_fields = [
|
||||
'Title' => 'Title',
|
||||
'Content' => 'Text',
|
||||
'DateOn' => 'Turn on date',
|
||||
'DateOff' => 'Turn off date',
|
||||
];
|
||||
|
||||
private static $default_sort = 'DateOn DESC, DateOff DESC, Title ASC';
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
LinkField::create('TargetLinkID', 'Link'),
|
||||
]);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function validate()
|
||||
{
|
||||
$result = parent::validate();
|
||||
|
||||
if (!$this->getField('DateOn') || !$this->getField('DateOff')) {
|
||||
return $result->addError(
|
||||
'Turn on and turn off dates are required.',
|
||||
ValidationResult::TYPE_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
if (!$this->getField('Content')) {
|
||||
return $result->addError(
|
||||
'Text field required.',
|
||||
ValidationResult::TYPE_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
|
@ -1,90 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 9/12/18
|
||||
* Time: 2:55 AM
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Dynamic\FlexSlider\Model\SlideImage;
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\ORM\ValidationResult;
|
||||
use SilverStripe\SiteConfig\SiteConfig;
|
||||
|
||||
class OpeningHour extends DataObject
|
||||
{
|
||||
private static $table_name = 'OpeningHour';
|
||||
|
||||
private static $db = [
|
||||
'Day' => 'Enum("Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", "Monday")',
|
||||
'From' => 'Time',
|
||||
'Till' => 'Time',
|
||||
'Comment' => 'Varchar(255)',
|
||||
'DisplayStart' => 'Date',
|
||||
'DisplayEnd' => 'Date',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'Parent' => SiteConfig::class,
|
||||
];
|
||||
|
||||
private static $defaults = [
|
||||
'Day' => 'Monday',
|
||||
'From' => '09:00:00',
|
||||
'Till' => '22:00:00',
|
||||
];
|
||||
|
||||
private static $summary_fields = [
|
||||
'Day' => 'Day *',
|
||||
'From' => 'From *',
|
||||
'Till' => 'Till *',
|
||||
//'Comment' => 'Comment',
|
||||
'DisplayStart' => 'Display Start',
|
||||
'DisplayEnd' => 'Display End',
|
||||
];
|
||||
|
||||
private static $default_sort = 'Day ASC, From ASC';
|
||||
|
||||
public function validate()
|
||||
{
|
||||
$result = parent::validate();
|
||||
|
||||
|
||||
if (!$this->getField('Day')
|
||||
|| !$this->getField('From')
|
||||
|| !$this->getField('Till')
|
||||
|| $this->getField('From') > $this->getField('Till')
|
||||
) {
|
||||
return $result->addError(
|
||||
'Day, From and Till fields are required or wrong time range was specified.',
|
||||
ValidationResult::TYPE_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
$exists = self::get()->filter([
|
||||
'ID:not' => $this->ID,
|
||||
'ParentID' => $this->getField('ParentID'),
|
||||
'Day' => $this->getField('Day'),
|
||||
'From:GreaterThanOrEqual' => $this->getField('From'),
|
||||
'Till:LessThanOrEqual' => $this->getField('Till'),
|
||||
])->exists();
|
||||
|
||||
if ($exists) {
|
||||
return $result->addError(
|
||||
'Hours were defined already for specified range.',
|
||||
ValidationResult::TYPE_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function forTemplate()
|
||||
{
|
||||
return $this->renderWith(__CLASS__);
|
||||
}
|
||||
}
|
|
@ -1,63 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:36 PM
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Versioned\Versioned;
|
||||
use App\Extensions\SocialExtension;
|
||||
|
||||
class TeamMember extends DataObject
|
||||
{
|
||||
private static $table_name = 'TeamMember';
|
||||
|
||||
private static $db = [
|
||||
'FirstName' => 'Varchar(254)',
|
||||
'LastName' => 'Varchar(254)',
|
||||
'Company' => 'Varchar(254)',
|
||||
'Position' => 'Varchar(254)',
|
||||
'Content' => 'HTMLText',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'Photo' => Image::class,
|
||||
];
|
||||
|
||||
private static $extensions = [
|
||||
SocialExtension::class,
|
||||
Versioned::class,
|
||||
];
|
||||
|
||||
private static $owns = [
|
||||
'Photo',
|
||||
];
|
||||
|
||||
private static $summary_fields = [
|
||||
'Company',
|
||||
'FirstName',
|
||||
'LastName',
|
||||
'Position',
|
||||
];
|
||||
|
||||
private static $searchable_fields = [
|
||||
'FirstName',
|
||||
'LastName',
|
||||
];
|
||||
|
||||
private static $frontend_searchable_fields = [
|
||||
'FirstName:PartialMatch',
|
||||
'LastName:PartialMatch',
|
||||
'Content:PartialMatch',
|
||||
];
|
||||
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->getField('Company').' | '.$this->getField('FirstName').' '.$this->getField('LastName');
|
||||
}
|
||||
}
|
|
@ -4,7 +4,6 @@
|
|||
// extends global Page class
|
||||
//namespace App\Pages;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use DNADesign\Elemental\Models\ElementContent;
|
||||
use SilverStripe\FontAwesome\FontAwesomeField;
|
||||
|
|
|
@ -22,8 +22,8 @@ use SilverStripe\ORM\ArrayList;
|
|||
use DNADesign\Elemental\Models\ElementContent;
|
||||
use DNADesign\Elemental\Models\ElementalArea;
|
||||
use DNADesign\ElementalUserForms\Control\ElementFormController;
|
||||
use App\Models\TeamMember;
|
||||
use App\Templates\DeferredRequirements;
|
||||
use A2nt\ElementalBasics\Models\TeamMember;
|
||||
use A2nt\CMSNiceties\Templates\DeferredRequirements;
|
||||
|
||||
class PageController extends ContentController
|
||||
{
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 8/26/18
|
||||
* Time: 1:40 PM
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
|
||||
use SilverShop\Checkout\Component\CheckoutComponent;
|
||||
use SilverShop\Model\Order;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\HeaderField;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\SiteConfig\SiteConfig;
|
||||
use SilverStripe\View\SSViewer;
|
||||
|
||||
class CheckoutMapComponent extends CheckoutComponent
|
||||
{
|
||||
public function getFormFields(Order $order)
|
||||
{
|
||||
$config = SiteConfig::current_site_config();
|
||||
|
||||
return FieldList::create(
|
||||
HeaderField::create('MapHeader', 'Pick up location'),
|
||||
LiteralField::create(
|
||||
'Map',
|
||||
SSViewer::create('Objects\Map')->process($config)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function validateData(Order $order, array $data)
|
||||
{
|
||||
}
|
||||
|
||||
public function setData(Order $order, array $data)
|
||||
{
|
||||
}
|
||||
|
||||
public function getData(Order $order)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 8/26/18
|
||||
* Time: 1:08 PM
|
||||
*/
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
|
||||
use SilverShop\Checkout\Checkout;
|
||||
use SilverShop\Checkout\CheckoutComponentConfig;
|
||||
use SilverShop\Checkout\Component\CustomerDetails;
|
||||
use SilverShop\Checkout\Component\Notes;
|
||||
use SilverShop\Checkout\Component\Payment;
|
||||
use SilverShop\Checkout\Component\Terms;
|
||||
use SilverShop\Checkout\Component\Membership;
|
||||
use SilverShop\Model\Order;
|
||||
use SilverStripe\Omnipay\GatewayInfo;
|
||||
use SilverStripe\Security\Security;
|
||||
|
||||
class CheckoutNoDeliveryConfig extends CheckoutComponentConfig
|
||||
{
|
||||
public function __construct(Order $order)
|
||||
{
|
||||
parent::__construct($order);
|
||||
$this->addComponent(CustomerDetails::create());
|
||||
|
||||
if (Checkout::member_creation_enabled() && !Security::getCurrentUser()) {
|
||||
$this->addComponent(Membership::create());
|
||||
}
|
||||
|
||||
if (count(GatewayInfo::getSupportedGateways()) > 1) {
|
||||
$this->addComponent(Payment::create());
|
||||
}
|
||||
|
||||
$this->addComponent(Notes::create());
|
||||
|
||||
$this->addComponent(CheckoutMapComponent::create());
|
||||
$this->addComponent(Terms::create());
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
Remove it in case u need silvershop module
|
|
@ -1,39 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Tasks;
|
||||
|
||||
use SilverStripe\Assets\File;
|
||||
use SilverStripe\Dev\BuildTask;
|
||||
|
||||
class BrokenFilesTask extends BuildTask
|
||||
{
|
||||
protected $title = 'Broken Files Task';
|
||||
|
||||
protected $description = 'Broken files report';
|
||||
|
||||
protected $enabled = true;
|
||||
|
||||
public function run($request)
|
||||
{
|
||||
$files = File::get();
|
||||
$i = 0;
|
||||
foreach ($files as $file) {
|
||||
if (!$file->exists()) {
|
||||
echo '<b style="color:red">File name was not found at SS DB: '
|
||||
.$file->getField('Name').'</b><br/>'
|
||||
.PHP_EOL;
|
||||
|
||||
$i++;
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
echo ($i > 0) ?
|
||||
'<h2 style="color:red">Missing '.$i.' files</h2>'
|
||||
: '<h2 style="color:green">All files are ok!</h2>';
|
||||
|
||||
die('Done!');
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Tasks;
|
||||
|
||||
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
|
||||
class BuildTask extends \SilverStripe\Dev\BuildTask
|
||||
{
|
||||
|
||||
protected $title = 'Base build task interface';
|
||||
protected $description = 'Base build task interface';
|
||||
protected $enabled = false;
|
||||
|
||||
protected $messages = [];
|
||||
/**
|
||||
* Implement this method in the task subclass to
|
||||
* execute via the TaskRunner
|
||||
*
|
||||
* @param HTTPRequest $request
|
||||
* @return
|
||||
*/
|
||||
public function run($request)
|
||||
{
|
||||
// TODO: Implement run() method.
|
||||
return $this->render();
|
||||
}
|
||||
|
||||
public function Title()
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
protected function setMessage($msg, string $type = 'msg')
|
||||
{
|
||||
if(is_array($msg)) {
|
||||
$type = 'list';
|
||||
}
|
||||
|
||||
$this->messages[] = [$type, $msg];
|
||||
}
|
||||
|
||||
public function render()
|
||||
{
|
||||
echo '<style>'
|
||||
.'.info{color:#053bff}'
|
||||
.'.bad,.error{color:red}'
|
||||
.'.good,.success{color:green}'
|
||||
.'</style>';
|
||||
|
||||
foreach ($this->messages as $item) {
|
||||
$type = $item[0];
|
||||
$msg = $item[1];
|
||||
|
||||
switch ($type) {
|
||||
case 'h2':
|
||||
echo '<h2>'.$msg.'</h2>'.PHP_EOL;
|
||||
break;
|
||||
case 'h3':
|
||||
echo '<h3>'.$msg.'</h3>'.PHP_EOL;
|
||||
break;
|
||||
case 'list':
|
||||
echo '<ul>';
|
||||
foreach ($msg as $m) {
|
||||
echo '<li>'.$m.'</li>';
|
||||
}
|
||||
echo '</ul>';
|
||||
break;
|
||||
default:
|
||||
echo $msg.'<br/>'.PHP_EOL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
echo '<h2 class="success">Success!</h2>';
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Tasks;
|
||||
|
||||
use SilverStripe\Assets\File;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Dev\BuildTask;
|
||||
|
||||
class CleanContentTask extends BuildTask
|
||||
{
|
||||
protected $title = 'Clean content task';
|
||||
|
||||
protected $description = 'Clean content task';
|
||||
|
||||
protected $enabled = true;
|
||||
|
||||
public function run($request)
|
||||
{
|
||||
$pages = SiteTree::get();
|
||||
foreach ($pages as $p) {
|
||||
$p->setField('Content', '');
|
||||
$p->write();
|
||||
echo '#'.$p->ID.' '.$p->getField('Title').'<br/>';
|
||||
}
|
||||
|
||||
die('Done!');
|
||||
}
|
||||
}
|
|
@ -1,105 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Tasks;
|
||||
|
||||
use Endroid\QrCode\ErrorCorrectionLevel;
|
||||
use Endroid\QrCode\LabelAlignment;
|
||||
use Endroid\QrCode\QrCode;
|
||||
use SilverStripe\Assets\File;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Assets\Storage\AssetStore;
|
||||
use SilverStripe\Assets\Upload;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
|
||||
|
||||
class QRCodeTask extends BuildTask
|
||||
{
|
||||
protected $title = 'Generate website QR-code';
|
||||
|
||||
protected $description = 'Generate website QR-code';
|
||||
|
||||
protected $enabled = true;
|
||||
|
||||
public function run($request)
|
||||
{
|
||||
echo '<h1>'.$this->Title().'</h1>';
|
||||
|
||||
echo self::generateQR();
|
||||
|
||||
die('Done!');
|
||||
}
|
||||
|
||||
public static function generateQR()
|
||||
{
|
||||
$qrCode = new QrCode(Director::absoluteBaseURL());
|
||||
$qrCode->setSize(600);
|
||||
$qrCode->setMargin(10);
|
||||
|
||||
$qrCode->setWriterByName('png');
|
||||
$qrCode->setEncoding('UTF-8');
|
||||
$qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH());
|
||||
$qrCode->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]);
|
||||
$qrCode->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]);
|
||||
$qrCode->setLabel(Director::absoluteBaseURL(), 16, null, LabelAlignment::CENTER());
|
||||
/*$qrCode->setLogoPath('/'.File::join_paths(
|
||||
PUBLIC_PATH,
|
||||
RESOURCES_DIR,
|
||||
project(),
|
||||
'client', 'dist', 'icons',
|
||||
'apple-touch-icon-152x152.png'
|
||||
));
|
||||
$qrCode->setLogoSize(152, 152);*/
|
||||
$qrCode->setValidateResult(true);
|
||||
|
||||
|
||||
// Round block sizes to improve readability and make the blocks sharper in pixel based outputs (like png).
|
||||
// There are three approaches:
|
||||
$qrCode->setRoundBlockSize(true, QrCode::ROUND_BLOCK_SIZE_MODE_MARGIN); // The size of the qr code is shrinked, if necessary, but the size of the final image remains unchanged due to additional margin being added (default)
|
||||
$qrCode->setRoundBlockSize(true, QrCode::ROUND_BLOCK_SIZE_MODE_ENLARGE); // The size of the qr code and the final image is enlarged, if necessary
|
||||
$qrCode->setRoundBlockSize(true, QrCode::ROUND_BLOCK_SIZE_MODE_SHRINK); // The size of the qr code and the final image is shrinked, if necessary
|
||||
|
||||
// Set additional writer options (SvgWriter example)
|
||||
$qrCode->setWriterOptions(['exclude_xml_declaration' => true]);
|
||||
|
||||
// Directly output the QR code
|
||||
/*header('Content-Type: '.$qrCode->getContentType());
|
||||
echo $qrCode->writeString();
|
||||
die();*/
|
||||
|
||||
// Save it to a file
|
||||
$qrCode->writeFile(TEMP_PATH.'/qrcode.png');
|
||||
$res = self::getAssetStore()->setFromLocalFile(
|
||||
TEMP_PATH.'/qrcode.png',
|
||||
'qrcode.png', null, null,
|
||||
[
|
||||
'conflict' => AssetStore::CONFLICT_OVERWRITE,
|
||||
'visibility' => AssetStore::VISIBILITY_PUBLIC,
|
||||
]
|
||||
);
|
||||
|
||||
$img = Image::get()->filter([
|
||||
'ParentID' => 0,
|
||||
'FileFilename' => $res['Filename'],
|
||||
])->first();
|
||||
if(!$img) {
|
||||
$img = Image::create();
|
||||
}
|
||||
|
||||
$res['FileHash'] = $res['Hash'];
|
||||
$res['FileFilename'] = $res['Filename'];
|
||||
$res['ParentID'] = 0;
|
||||
|
||||
$img = $img->update($res);
|
||||
$img->write();
|
||||
$img->publishFile();
|
||||
|
||||
return '<img src="'.$qrCode->writeDataUri().'" width="300" alt="QR-code" /><br/>';
|
||||
}
|
||||
|
||||
protected static function getAssetStore()
|
||||
{
|
||||
return Injector::inst()->get(AssetStore::class);
|
||||
}
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Tasks;
|
||||
|
||||
use SilverStripe\Assets\File;
|
||||
use SilverStripe\Dev\BuildTask;
|
||||
|
||||
class RestoreFilesTask extends BuildTask
|
||||
{
|
||||
protected $title = 'Restore Files Task';
|
||||
|
||||
protected $description = 'Restores file from specific folder';
|
||||
|
||||
protected $enabled = false;
|
||||
|
||||
public function run($request)
|
||||
{
|
||||
die('Specify path first');
|
||||
$path = '*<Path to the folder with files to be restored>*';
|
||||
|
||||
$files = array_diff(scandir($path), ['.','..']);
|
||||
foreach ($files as $fileName) {
|
||||
$file = File::get()->filter('Name', $fileName);
|
||||
if (!$file->count()) {
|
||||
echo '<b style="color:red">File name was not found at SS DB: '.$fileName.'</b><br/>'.PHP_EOL;
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($file as $f) {
|
||||
if ($f->exists()) {
|
||||
echo 'File #'.$f->ID.' already exists at SS file structure. <b style="color:green">'.$fileName.'</b><br/>' . PHP_EOL;
|
||||
continue;
|
||||
}
|
||||
|
||||
echo 'Found non existing at SS file system file and found it at SS DB.'
|
||||
.' Creating the file #'.$f->ID.' at SS file system. "<b style="color:#053bff">' . $fileName . '"</b><br/>' . PHP_EOL;
|
||||
|
||||
$f->setFromLocalFile($path.'/'.$fileName);
|
||||
$f->write();
|
||||
$f->publishFile();
|
||||
}
|
||||
}
|
||||
|
||||
die('Success!');
|
||||
}
|
||||
}
|
|
@ -1,229 +0,0 @@
|
|||
<?php
|
||||
|
||||
/** @noinspection PhpUnusedPrivateFieldInspection */
|
||||
|
||||
namespace App\Templates;
|
||||
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\View\TemplateGlobalProvider;
|
||||
use SilverStripe\View\Requirements;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Core\Path;
|
||||
use SilverStripe\FontAwesome\FontAwesomeField;
|
||||
|
||||
class DeferredRequirements implements TemplateGlobalProvider
|
||||
{
|
||||
private static $css = [];
|
||||
private static $js = [];
|
||||
private static $deferred = false;
|
||||
private static $static_domain;
|
||||
private static $version;
|
||||
private static $nojquery = false;
|
||||
private static $jquery_version = '3.4.1';
|
||||
private static $nofontawesome = false;
|
||||
private static $custom_requirements = [];
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function get_template_global_variables(): array
|
||||
{
|
||||
return [
|
||||
'AutoRequirements' => 'Auto',
|
||||
'DeferedCSS' => 'loadCSS',
|
||||
'DeferedJS' => 'loadJS',
|
||||
'WebpackActive' => 'webpackActive',
|
||||
'EmptyImgSrc' => 'emptyImageSrc',
|
||||
];
|
||||
}
|
||||
|
||||
public static function Auto($class = false): string
|
||||
{
|
||||
$config = Config::inst()->get(self::class);
|
||||
$projectName = WebpackTemplateProvider::projectName();
|
||||
$mainTheme = WebpackTemplateProvider::mainTheme();
|
||||
$mainTheme = $mainTheme ?: $projectName;
|
||||
|
||||
$dir = Path::join(
|
||||
Director::publicFolder(),
|
||||
RESOURCES_DIR,
|
||||
$projectName,
|
||||
'client',
|
||||
'dist'
|
||||
);
|
||||
$cssPath = Path::join($dir, 'css');
|
||||
$jsPath = Path::join($dir, 'js');
|
||||
|
||||
// Initialization
|
||||
Requirements::block(THIRDPARTY_DIR.'/jquery/jquery.js');
|
||||
/*if (defined('FONT_AWESOME_DIR')) {
|
||||
Requirements::block(FONT_AWESOME_DIR.'/css/lib/font-awesome.min.css');
|
||||
}*/
|
||||
Requirements::set_force_js_to_bottom(true);
|
||||
|
||||
// Main libs
|
||||
if (!$config['nojquery']) {
|
||||
self::loadJS(
|
||||
'//ajax.googleapis.com/ajax/libs/jquery/'
|
||||
.$config['jquery_version'].'/jquery.min.js'
|
||||
);
|
||||
}
|
||||
|
||||
if (!$config['noreact']) {
|
||||
if (!Director::isDev()) {
|
||||
self::loadJS('https://unpkg.com/react@17/umd/react.production.min.js');
|
||||
self::loadJS('https://unpkg.com/react-dom@17/umd/react-dom.production.min.js');
|
||||
} else {
|
||||
self::loadJS('https://unpkg.com/react@17/umd/react.development.js');
|
||||
self::loadJS('https://unpkg.com/react-dom@17/umd/react-dom.development.js');
|
||||
}
|
||||
}
|
||||
|
||||
// App libs
|
||||
if (!$config['nofontawesome']) {
|
||||
$v = !isset($config['fontawesome_version']) || !$config['fontawesome_version']
|
||||
? Config::inst()->get(FontAwesomeField::class, 'version')
|
||||
: $config['fontawesome_version'];
|
||||
|
||||
self::loadCSS('//use.fontawesome.com/releases/v'.$v.'/css/all.css');
|
||||
}
|
||||
|
||||
self::loadCSS($mainTheme.'.css');
|
||||
|
||||
// hot reloading
|
||||
/*if (self::webpackActive()) {
|
||||
self::loadJS('hot.js');
|
||||
}*/
|
||||
|
||||
self::loadJS($mainTheme.'.js');
|
||||
|
||||
// Custom controller requirements
|
||||
$curr_class = $class ?: get_class(Controller::curr());
|
||||
if (isset($config['custom_requirements'][$curr_class])) {
|
||||
foreach ($config['custom_requirements'][$curr_class] as $file) {
|
||||
if (strpos($file, '.css')) {
|
||||
self::loadCSS($file);
|
||||
}
|
||||
if (strpos($file, '.js')) {
|
||||
self::loadJS($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$curr_class = str_replace('\\', '.', $curr_class);
|
||||
|
||||
// Controller requirements
|
||||
$themePath = Path::join($cssPath, $mainTheme.'_'.$curr_class . '.css');
|
||||
$projectPath = Path::join($cssPath, $projectName.'_'.$curr_class . '.css');
|
||||
if ($mainTheme && file_exists($themePath)) {
|
||||
self::loadCSS($mainTheme.'_'.$curr_class . '.css');
|
||||
} elseif (file_exists($projectPath)) {
|
||||
self::loadCSS($projectName.'_'.$curr_class . '.css');
|
||||
}
|
||||
|
||||
$themePath = Path::join($jsPath, $mainTheme.'_'.$curr_class . '.js');
|
||||
$projectPath = Path::join($jsPath, $projectName.'_'.$curr_class . '.js');
|
||||
if ($mainTheme && file_exists($themePath)) {
|
||||
self::loadJS($mainTheme.'_'.$curr_class . '.js');
|
||||
} elseif (file_exists($projectPath)) {
|
||||
self::loadJS($projectName.'_'.$curr_class . '.js');
|
||||
}
|
||||
|
||||
return self::forTemplate();
|
||||
}
|
||||
|
||||
public static function loadCSS($css): void
|
||||
{
|
||||
$external = (mb_strpos($css, '//') === 0 || mb_strpos($css, 'http') === 0);
|
||||
if ($external) {
|
||||
self::$css[] = $css;
|
||||
} else {
|
||||
WebpackTemplateProvider::loadCSS($css);
|
||||
}
|
||||
}
|
||||
|
||||
public static function loadJS($js): void
|
||||
{
|
||||
/*$external = (mb_substr($js, 0, 2) === '//' || mb_substr($js, 0, 4) === 'http');
|
||||
if ($external || (self::getDeferred() && !self::_webpackActive())) {*/
|
||||
// webpack supposed to load external JS
|
||||
if (self::getDeferred() && !self::webpackActive()) {
|
||||
self::$js[] = $js;
|
||||
} else {
|
||||
WebpackTemplateProvider::loadJS($js);
|
||||
}
|
||||
}
|
||||
|
||||
public static function webpackActive(): bool
|
||||
{
|
||||
return WebpackTemplateProvider::isActive();
|
||||
}
|
||||
|
||||
public static function setDeferred($bool): void
|
||||
{
|
||||
Config::inst()->set(__CLASS__, 'deferred', $bool);
|
||||
}
|
||||
|
||||
public static function getDeferred(): bool
|
||||
{
|
||||
return self::config()['deferred'];
|
||||
}
|
||||
|
||||
public static function forTemplate(): string
|
||||
{
|
||||
$result = '';
|
||||
self::$css = array_unique(self::$css);
|
||||
foreach (self::$css as $css) {
|
||||
$result .= '<i class="defer-cs" data-load="' . self::get_url($css) . '"></i>';
|
||||
}
|
||||
|
||||
self::$js = array_unique(self::$js);
|
||||
foreach (self::$js as $js) {
|
||||
$result .= '<i class="defer-sc" data-load="' . self::get_url($js) . '"></i>';
|
||||
}
|
||||
|
||||
$result .=
|
||||
'<script>function lsc(a,b){var c=document.createElement("script");c.readyState'
|
||||
.'?c.onreadystatechange=function(){"loaded"!=c.readyState&&"complete"!=c.readyState||(c.onreadystatechange=null,b())}'
|
||||
.':c.onload=function(){b()},c.src=a,document.getElementsByTagName("body")[0].appendChild(c)}'
|
||||
.'function lscd(a){a<s.length-1&&(a++,lsc(s.item(a).getAttribute("data-load"),function(){lscd(a)}))}'
|
||||
.'for(var s=document.getElementsByClassName("defer-cs"),i=0;i<s.length;i++){var b=document.createElement("link");b.rel="stylesheet",'
|
||||
.'b.type="text/css",b.href=s.item(i).getAttribute("data-load"),b.media="all";var c=document.getElementsByTagName("body")[0];'
|
||||
.'c.appendChild(b)}var s=document.getElementsByClassName("defer-sc"),i=0;if(s.item(i)!==null)lsc(s.item(i).getAttribute("data-load"),function(){lscd(i)});'
|
||||
.'</script>';
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private static function get_url($url): string
|
||||
{
|
||||
$config = self::config();
|
||||
|
||||
// external URL
|
||||
if (strpos($url, '//') !== false) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
$path = WebpackTemplateProvider::toPublicPath($url);
|
||||
|
||||
$absolutePath = Director::getAbsFile($path);
|
||||
$hash = sha1_file($absolutePath);
|
||||
|
||||
$version = $config['version'] ? '&v='.$config['version'] : '';
|
||||
//$static_domain = $config['static_domain'];
|
||||
//$static_domain = $static_domain ?: '';
|
||||
|
||||
return Controller::join_links(WebpackTemplateProvider::toPublicPath($url), '?m='.$hash.$version);
|
||||
}
|
||||
|
||||
public static function emptyImageSrc(): string
|
||||
{
|
||||
return 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
|
||||
}
|
||||
|
||||
public static function config(): array
|
||||
{
|
||||
return Config::inst()->get(__CLASS__);
|
||||
}
|
||||
}
|
|
@ -1,153 +0,0 @@
|
|||
<?php
|
||||
/** @noinspection PhpUnusedPrivateFieldInspection */
|
||||
|
||||
/**
|
||||
* Directs assets requests to Webpack server or to static files
|
||||
*/
|
||||
|
||||
namespace App\Templates;
|
||||
|
||||
use SilverStripe\Core\Manifest\ModuleManifest;
|
||||
use SilverStripe\View\SSViewer;
|
||||
use SilverStripe\View\TemplateGlobalProvider;
|
||||
use SilverStripe\View\Requirements;
|
||||
use SilverStripe\Control\Director;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
|
||||
class WebpackTemplateProvider implements TemplateGlobalProvider
|
||||
{
|
||||
/**
|
||||
* @var int port number
|
||||
*/
|
||||
private static $port = 3000;
|
||||
|
||||
/**
|
||||
* @var string host name
|
||||
*/
|
||||
private static $hostname = 'localhost';
|
||||
|
||||
/**
|
||||
* @var string assets static files directory
|
||||
*/
|
||||
private static $dist = 'client/dist';
|
||||
private static $webp = false;
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function get_template_global_variables(): array
|
||||
{
|
||||
return [
|
||||
'WebpackDevServer' => 'isActive',
|
||||
'WebpackCSS' => 'loadCSS',
|
||||
'WebpackJS' => 'loadJS',
|
||||
'ResourcesURL' => 'resourcesURL',
|
||||
'ProjectName' => 'themeName',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Load CSS file
|
||||
* @param $path
|
||||
*/
|
||||
public static function loadCSS($path): void
|
||||
{
|
||||
/*if (self::isActive()) {
|
||||
return;
|
||||
}*/
|
||||
|
||||
Requirements::css(self::_getPath($path));
|
||||
}
|
||||
|
||||
/**
|
||||
* Load JS file
|
||||
* @param $path
|
||||
*/
|
||||
public static function loadJS($path): void
|
||||
{
|
||||
Requirements::javascript(self::_getPath($path));
|
||||
}
|
||||
|
||||
public static function projectName(): string
|
||||
{
|
||||
return Config::inst()->get(ModuleManifest::class, 'project');
|
||||
}
|
||||
|
||||
public static function mainTheme()
|
||||
{
|
||||
$themes = Config::inst()->get(SSViewer::class, 'themes');
|
||||
return is_array($themes) && $themes[0] !== '$public' && $themes[0] !== '$default' ? $themes[0] : false;
|
||||
}
|
||||
|
||||
public static function resourcesURL($link = null): string
|
||||
{
|
||||
$cfg = self::config();
|
||||
|
||||
if ($cfg['webp'] && !self::isActive()) {
|
||||
$link = str_replace(['.png','.jpg','.jpeg'], '.webp', $link);
|
||||
}
|
||||
|
||||
return Controller::join_links(
|
||||
Director::baseURL(),
|
||||
'/resources/',
|
||||
self::projectName(),
|
||||
$cfg['dist'],
|
||||
'img',
|
||||
$link
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if dev mode is enabled and if webpack server is online
|
||||
* @return bool
|
||||
*/
|
||||
public static function isActive(): bool
|
||||
{
|
||||
$cfg = self::config();
|
||||
return Director::isDev() && @fsockopen(
|
||||
$cfg['HOSTNAME'],
|
||||
$cfg['PORT']
|
||||
);
|
||||
}
|
||||
|
||||
protected static function _getPath($path): string
|
||||
{
|
||||
return self::isActive() && strpos($path, '//') === false ?
|
||||
self::_toDevServerPath($path) :
|
||||
self::toPublicPath($path);
|
||||
}
|
||||
|
||||
protected static function _toDevServerPath($path): string
|
||||
{
|
||||
$cfg = self::config();
|
||||
return sprintf(
|
||||
'%s%s:%s/%s',
|
||||
($cfg['HTTPS'] ? 'https://' : 'http://'),
|
||||
$cfg['HOSTNAME'],
|
||||
$cfg['PORT'],
|
||||
basename($path)
|
||||
//Controller::join_links($cfg['APPDIR'], $cfg['SRC'], basename($path))
|
||||
);
|
||||
}
|
||||
|
||||
public static function toPublicPath($path): string
|
||||
{
|
||||
$cfg = self::config();
|
||||
return strpos($path, '//') === false ?
|
||||
Controller::join_links(
|
||||
RESOURCES_DIR,
|
||||
self::projectName(),
|
||||
$cfg['dist'],
|
||||
(strpos($path, '.css') ? 'css' : 'js'),
|
||||
$path
|
||||
)
|
||||
: $path;
|
||||
}
|
||||
|
||||
public static function config(): array
|
||||
{
|
||||
return Config::inst()->get(__CLASS__);
|
||||
}
|
||||
}
|
|
@ -1,142 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 10/31/18
|
||||
* Time: 5:31 AM
|
||||
*/
|
||||
|
||||
namespace App\Tests;
|
||||
|
||||
use SilverStripe\Assets\Upload_Validator;
|
||||
use SilverStripe\Core\Cache\FilesystemCacheFactory;
|
||||
use SilverStripe\Core\Config\Config;
|
||||
use SilverStripe\Core\Convert;
|
||||
use SilverStripe\Dev\BuildTask;
|
||||
use SilverStripe\Dev\Deprecation;
|
||||
use SilverStripe\Assets\File;
|
||||
|
||||
class TestServer extends BuildTask
|
||||
{
|
||||
protected $title = 'Test server';
|
||||
protected $description = 'Test server';
|
||||
|
||||
public function run($request)
|
||||
{
|
||||
echo '<style>table{width:100%}table td,table th{border:1px solid #dedede}</style>';
|
||||
|
||||
echo '<h2>Testing Server</h2>';
|
||||
echo self::success('BASE_PATH: <b>'.BASE_PATH.'</b>');
|
||||
echo self::success('PHP: <b>'.phpversion().'</b>');
|
||||
|
||||
$v = Deprecation::dump_settings()['version'];
|
||||
if ($v) {
|
||||
echo self::success('SilverStipe version: <b>'.$v.'</b>');
|
||||
} else {
|
||||
echo self::success('SilverStipe version unknown: <b>'
|
||||
.(file_exists(BASE_PATH.'/framework') ? '3.x.x' : '4.x.x')
|
||||
.'</b>');
|
||||
}
|
||||
|
||||
echo self::success('Memory limit: <b>'.ini_get('memory_limit').'</b>');
|
||||
|
||||
|
||||
if (is_writable(TEMP_FOLDER)) {
|
||||
echo self::success('TMP (cache) dir <b>'.TEMP_FOLDER.'</b> dir is writable.');
|
||||
} else {
|
||||
echo self::error('TMP (cache) dir <b>'.TEMP_FOLDER.'</b> dir is no writable!');
|
||||
}
|
||||
|
||||
echo '<h2>Testing Uploads</h2>';
|
||||
$maxUpload = ini_get('upload_max_filesize');
|
||||
$maxPost = ini_get('post_max_size');
|
||||
|
||||
echo self::success('PHP max upload size: '.$maxUpload);
|
||||
echo self::success('PHP max post size: '.$maxPost);
|
||||
echo self::success('So calculated max upload size: '.self::formatBytes(min(
|
||||
self::memstring2bytes($maxUpload),
|
||||
self::memstring2bytes($maxPost)
|
||||
)));
|
||||
|
||||
$defaultSizes = Config::inst()->get(Upload_Validator::class, 'default_max_file_size');
|
||||
if ($defaultSizes) {
|
||||
if (!is_array($defaultSizes)) {
|
||||
echo self::error('default_max_file_size miss-configuration, plz fix');
|
||||
var_dump($defaultSizes);
|
||||
die();
|
||||
}
|
||||
|
||||
echo '<h3>Configured limits:</h3><table style="text-align:center">'
|
||||
.'<thead><tr><th>File</th><th>Size limit</th></tr></thead><tbody>';
|
||||
foreach ($defaultSizes as $k => $size) {
|
||||
echo '<tr><td>'.$k.'</td><td>'.$size.'</td></tr>';
|
||||
}
|
||||
echo '</tbody></table>';
|
||||
}
|
||||
|
||||
if (is_writable(ASSETS_DIR)) {
|
||||
echo self::success('Assets dir <b>'.ASSETS_DIR.'</b> dir is writable.');
|
||||
} else {
|
||||
echo self::error('Assets dir <b>'.ASSETS_DIR.'</b> dir is no writable!');
|
||||
}
|
||||
|
||||
if (function_exists('imagewebp')) {
|
||||
echo self::success('WebP is available');
|
||||
} else {
|
||||
echo self::error('WebP is not available');
|
||||
}
|
||||
|
||||
|
||||
die();
|
||||
}
|
||||
|
||||
|
||||
public static function formatBytes($size, $precision = 2)
|
||||
{
|
||||
$base = log($size, 1024);
|
||||
$suffixes = array('', 'K', 'M', 'G', 'T');
|
||||
|
||||
return round(pow(1024, $base - floor($base)), $precision) . $suffixes[(string)floor($base)];
|
||||
}
|
||||
|
||||
public static function error($text)
|
||||
{
|
||||
return '<span style="color:red">ERROR: '.$text.'</span><br/>';
|
||||
}
|
||||
|
||||
public static function success($text)
|
||||
{
|
||||
return '<span style="color:green">SUCCESS: '.$text.'</span><br/>';
|
||||
}
|
||||
|
||||
public static function warning($text)
|
||||
{
|
||||
return '<span style="color:#0014ff">WARNING: '.$text.'</span><br/>';
|
||||
}
|
||||
|
||||
public static function renderValidation($result)
|
||||
{
|
||||
echo '<p>';
|
||||
$msgs = $result->getMessages();
|
||||
foreach ($msgs as $msg) {
|
||||
echo self::error($msg['fieldName'].': '.$msg['message']);
|
||||
}
|
||||
echo '</p>';
|
||||
}
|
||||
|
||||
public static function memstring2bytes($memString)
|
||||
{
|
||||
// Remove non-unit characters from the size
|
||||
$unit = preg_replace('/[^bkmgtpezy]/i', '', $memString);
|
||||
// Remove non-numeric characters from the size
|
||||
$size = preg_replace('/[^0-9\.]/', '', $memString);
|
||||
|
||||
if ($unit) {
|
||||
// Find the position of the unit in the ordered string which is the power
|
||||
// of magnitude to multiply a kilobyte by
|
||||
return round($size * pow(1024, stripos('bkmgtpezy', $unit[0])));
|
||||
}
|
||||
|
||||
return round($size);
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
trait PaginatedListing
|
||||
{
|
||||
private $filter = [];
|
||||
|
||||
public function NextPage($pageID = null)
|
||||
{
|
||||
$vars = $this->getRequest()->requestVars();
|
||||
$vars = array_filter($vars);
|
||||
$vars['page'] = $pageID ? $pageID : '2';
|
||||
|
||||
return $this->Link('?'.http_build_query($vars));
|
||||
}
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class BannerWidget extends Widget
|
||||
{
|
||||
private static $title = 'Banner';
|
||||
private static $cmsTitle = 'Banner';
|
||||
private static $description = 'Shows banner with image and link.';
|
||||
private static $icon = '<i class="icon font-icon-block-banner"></i>';
|
||||
private static $table_name = 'BannerWidget';
|
||||
|
||||
private static $has_one = [
|
||||
'Image' => Image::class,
|
||||
'Link' => Link::class,
|
||||
];
|
||||
|
||||
private static $owns = [
|
||||
'Image',
|
||||
'Link',
|
||||
];
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->push(UploadField::create('Image', 'Image (minimal width 301px)')
|
||||
->setAllowedFileCategories(['image/supported']));
|
||||
|
||||
$fields->push(LinkField::create('LinkID', 'Link'));
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
private $_random;
|
||||
public function Random()
|
||||
{
|
||||
if (!$this->_random) {
|
||||
$this->_random = self::get()->filter('Enabled', true)->sort('RAND()')->first();
|
||||
}
|
||||
|
||||
return $this->_random;
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
$title = $this->getField('Title');
|
||||
$img = $this->Image();
|
||||
if(!$title && $img) {
|
||||
$this->setField('Title', $img->getTitle());
|
||||
}
|
||||
|
||||
parent::onBeforeWrite();
|
||||
}
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class ContentWidget extends Widget
|
||||
{
|
||||
private static $title = 'Content';
|
||||
private static $cmsTitle = 'Content';
|
||||
private static $description = 'Shows text content.';
|
||||
private static $icon = '<i class="icon font-icon-block-content"></i>';
|
||||
private static $table_name = 'ContentWidget';
|
||||
|
||||
private static $db = [
|
||||
'Text' => 'HTMLText',
|
||||
];
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->push(HTMLEditorField::create('Text'));
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use DNADesign\ElementalList\Model\ElementList;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Forms\DropdownField;
|
||||
use SilverStripe\Forms\TreeDropdownField;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class ElementWidget extends Widget
|
||||
{
|
||||
private static $title = 'Virtual Element';
|
||||
private static $cmsTitle = 'Virtual Element';
|
||||
private static $description = 'Adds existing element to side bar';
|
||||
private static $icon = '<i class="icon font-icon-block-banner"></i>';
|
||||
private static $table_name = 'ElementWidget';
|
||||
|
||||
private static $has_one = [
|
||||
'Element' => BaseElement::class,
|
||||
];
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->push(
|
||||
DropdownField::create(
|
||||
'ElementID',
|
||||
'Displayed Element',
|
||||
BaseElement::get()
|
||||
->filter(['AvailableGlobally' => true])
|
||||
->exclude(['ClassName' => ElementList::class])
|
||||
)
|
||||
/*TreeDropdownField::create(
|
||||
'ElementID',
|
||||
'Displayed Element',
|
||||
SiteTree::class
|
||||
)->setFilterFunction(static function($el){
|
||||
return (bool) $el->getField('ElementalArea')->Elements()->count();
|
||||
})*/
|
||||
);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function SimpleClassName()
|
||||
{
|
||||
$el = $this->getField('Element');
|
||||
var_dump($el);
|
||||
die();
|
||||
return $el->getSimpleClassName();
|
||||
}
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\AssetAdmin\Forms\UploadField;
|
||||
use SilverStripe\Assets\Image;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
|
||||
use SilverStripe\Forms\LiteralField;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class LinksWidget extends Widget
|
||||
{
|
||||
private static $title = 'Links';
|
||||
private static $cmsTitle = 'Links';
|
||||
private static $description = 'Shows listing of links.';
|
||||
private static $icon = '<i class="icon font-icon-list"></i>';
|
||||
private static $table_name = 'LinksWidget';
|
||||
|
||||
private static $many_many = [
|
||||
'Links' => Link::class,
|
||||
];
|
||||
|
||||
private static $owns = [
|
||||
'Links',
|
||||
];
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
if($this->ID) {
|
||||
$fields->push(GridField::create(
|
||||
'Links',
|
||||
'',
|
||||
$this->Links(),
|
||||
GridFieldConfig_RecordEditor::create()
|
||||
));
|
||||
}else{
|
||||
$fields->push(LiteralField::create(
|
||||
'Note',
|
||||
'<p class="alert alert-warning"><b>Note:</b> The widget needs to be saved before adding a link.'
|
||||
.' Enter the Title and click "+ Create" button at the bottom left corner of the screen</p>')
|
||||
);
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
use SilverStripe\Forms\CheckboxField;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
|
||||
if (!class_exists(Widget::class)) {
|
||||
return;
|
||||
}
|
||||
|
||||
class SubmenuWidget extends Widget
|
||||
{
|
||||
private static $title = 'Sub-Menu';
|
||||
private static $cmsTitle = 'Sub-Menu';
|
||||
private static $description = 'Shows sub menu.';
|
||||
private static $icon = '<i class="icon font-icon-tree"></i>';
|
||||
private static $table_name = 'SubmenuWidget';
|
||||
|
||||
private static $db = [
|
||||
'TopLevelSubmenu' => 'Boolean(1)',
|
||||
];
|
||||
|
||||
public function getPage()
|
||||
{
|
||||
$area = $this->Parent();
|
||||
return \Page::get()->filter('SideBarID', $area->ID)->first();
|
||||
}
|
||||
|
||||
public function getSubmenu()
|
||||
{
|
||||
$page = $this->getPage();
|
||||
|
||||
if(!$this->getField('TopLevelSubmenu')) {
|
||||
return $page->Children();
|
||||
}
|
||||
|
||||
return $page->Level(1)->Children();
|
||||
}
|
||||
|
||||
public function getCMSFields()
|
||||
{
|
||||
$fields = parent::getCMSFields();
|
||||
|
||||
$fields->push(CheckboxField::create(
|
||||
'TopLevelSubmenu',
|
||||
'Display sub-menu starting from the top level (otherwise current page children will be displayed)'
|
||||
));
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
|
@ -1,157 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
use DNADesign\Elemental\Controllers\ElementalAreaController;
|
||||
use DNADesign\Elemental\Forms\ElementalAreaConfig;
|
||||
use DNADesign\Elemental\Forms\ElementalAreaField;
|
||||
use DNADesign\Elemental\Models\BaseElement;
|
||||
use DNADesign\Elemental\Models\ElementalArea;
|
||||
use SilverStripe\Control\Controller;
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Forms\CompositeField;
|
||||
use SilverStripe\Forms\FieldGroup;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\FormField;
|
||||
use SilverStripe\Forms\GridField\GridField;
|
||||
use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter;
|
||||
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_Base;
|
||||
use SilverStripe\Forms\GridField\GridFieldConfig_RelationEditor;
|
||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||
use SilverStripe\Forms\GridField\GridFieldDetailForm;
|
||||
use SilverStripe\Forms\GridField\GridFieldEditButton;
|
||||
use SilverStripe\Forms\TabSet;
|
||||
use SilverStripe\ORM\DataObjectInterface;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
use SilverStripe\Widgets\Model\WidgetArea;
|
||||
use Symbiote\GridFieldExtensions\GridFieldAddNewMultiClass;
|
||||
use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
|
||||
|
||||
class WidgetAreaField extends GridField
|
||||
{
|
||||
/**
|
||||
* @var ElementalArea $area
|
||||
*/
|
||||
protected $area;
|
||||
|
||||
/**
|
||||
* @var array $type
|
||||
*/
|
||||
protected $types = [];
|
||||
|
||||
/**
|
||||
* @var null
|
||||
*/
|
||||
protected $inputType = null;
|
||||
|
||||
protected $modelClassName = Widget::class;
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param ElementalArea $area
|
||||
* @param string[] $blockTypes
|
||||
*/
|
||||
public function __construct($name, WidgetArea $area, array $blockTypes)
|
||||
{
|
||||
$this->setTypes($blockTypes);
|
||||
|
||||
$config = GridFieldConfig_Base::create();
|
||||
|
||||
$config->getComponentByType(GridFieldDataColumns::class)->setDisplayFields([
|
||||
'Icon' => '',
|
||||
'Title' => 'Title',
|
||||
'Enabled' => 'Enabled',
|
||||
])->setFieldFormatting([
|
||||
'Icon' => static function ($v, Widget $item) {
|
||||
return '<span style="font-size:2rem">'.$item::config()->get('icon').'</span>';
|
||||
},
|
||||
'Enabled' => static function ($v, Widget $item) {
|
||||
return $item->getField('Enabled') ? 'Yes' : 'No';
|
||||
},
|
||||
]);
|
||||
|
||||
$config->addComponent(new GridFieldEditButton());
|
||||
$config->addComponent(new GridFieldDeleteAction(false));
|
||||
$config->addComponent(new GridFieldDetailForm(null, false, false));
|
||||
$config->addComponent(new GridFieldSortableRows('Sort'));
|
||||
|
||||
if (!empty($blockTypes)) {
|
||||
/** @var GridFieldAddNewMultiClass $adder */
|
||||
$adder = Injector::inst()->create(GridFieldAddNewMultiClass::class);
|
||||
$adder->setClasses($blockTypes);
|
||||
$config->addComponent($adder);
|
||||
}
|
||||
|
||||
// By default, no need for a title on the editor. If there is more than one area then use `setTitle` to describe
|
||||
parent::__construct($name, '', $area->Widgets(), $config);
|
||||
|
||||
$this->area = $area;
|
||||
$this->addExtraClass('element-editor__container no-change-track');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $types
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setTypes($types)
|
||||
{
|
||||
$this->types = $types;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getTypes()
|
||||
{
|
||||
$types = $this->types;
|
||||
|
||||
$this->extend('updateGetTypes', $types);
|
||||
|
||||
return $types;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ElementalArea
|
||||
*/
|
||||
public function getArea()
|
||||
{
|
||||
return $this->area;
|
||||
}
|
||||
|
||||
public function saveInto(DataObjectInterface $dataObject)
|
||||
{
|
||||
parent::saveInto($dataObject);
|
||||
|
||||
$elementData = $this->Value();
|
||||
$idPrefixLength = strlen(sprintf(ElementalAreaController::FORM_NAME_TEMPLATE, ''));
|
||||
|
||||
if (!$elementData) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($elementData as $form => $data) {
|
||||
// Extract the ID
|
||||
$elementId = (int) substr($form, $idPrefixLength);
|
||||
|
||||
// @var BaseElement $element
|
||||
$element = $this->getArea()->Widgets()->byID($elementId);
|
||||
|
||||
if (!$element) {
|
||||
// Ignore invalid elements
|
||||
continue;
|
||||
}
|
||||
|
||||
$data = ElementalAreaController::removeNamespacesFromFields($data, $element->ID);
|
||||
|
||||
$element->updateFromFormData($data);
|
||||
$element->write();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
|
||||
use DNADesign\Elemental\Forms\TextCheckboxGroupField;
|
||||
use SilverStripe\CMS\Model\SiteTree;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Forms\TreeDropdownField;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class WidgetExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'ShowTitle' => 'Boolean(1)',
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
// Add a combined field for "Title" and "Displayed" checkbox in a Bootstrap input group
|
||||
$fields->removeByName('ShowTitle');
|
||||
$fields->replaceField(
|
||||
'Title',
|
||||
TextCheckboxGroupField::create()
|
||||
->setName('Title')
|
||||
);
|
||||
$fields->push(TreeDropdownField::create(
|
||||
'MovePageID', 'Move widget to page', SiteTree::class
|
||||
));
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
$obj = $this->owner;
|
||||
$moveID = $obj->MovePageID;
|
||||
if ($moveID) {
|
||||
$page = \Page::get()->byID($moveID);
|
||||
if($page) {
|
||||
$sidebarID = $page->getField('SideBarID');
|
||||
if($sidebarID) {
|
||||
$obj->setField('ParentID', $sidebarID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
parent::onBeforeWrite();
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
<?php
|
||||
|
||||
|
||||
namespace App\Widgets;
|
||||
|
||||
use DNADesign\Elemental\Forms\ElementalAreaField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\Widgets\Forms\WidgetAreaEditor;
|
||||
use SilverStripe\Widgets\Model\Widget;
|
||||
use SilverStripe\Widgets\Model\WidgetArea;
|
||||
|
||||
class WidgetPageExtension extends \SilverStripe\Widgets\Extensions\WidgetPageExtension
|
||||
{
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$tab = $fields->findOrMakeTab('Root.Widgets');
|
||||
|
||||
$tab->setTitle('Sidebar');
|
||||
|
||||
$tab->removeByName('SideBar');
|
||||
|
||||
$widgetTypes = WidgetAreaEditor::create('Sidebar')->AvailableWidgets();
|
||||
$available = [];
|
||||
/** @var Widget $type */
|
||||
foreach ($widgetTypes as $type) {
|
||||
$available[get_class($type)] = $type->getCMSTitle();
|
||||
}
|
||||
|
||||
$tab->push(WidgetAreaField::create(
|
||||
'SideBar',
|
||||
$this->owner->Sidebar(),
|
||||
$available
|
||||
));
|
||||
}
|
||||
|
||||
public function onBeforeWrite()
|
||||
{
|
||||
parent::onBeforeWrite();
|
||||
|
||||
if (!$this->owner->getField('SideBarID')) {
|
||||
$area = WidgetArea::create();
|
||||
$area->write();
|
||||
|
||||
$this->owner->setField('SideBarID', $area->ID);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<div class="element__content" data-listelement-count="{$Elements.Elements.Count}">
|
||||
<div id="ElementAccordion{$Elements.ID}" class="accordion">
|
||||
$Accordion
|
||||
</div>
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
<% if $ElementFilteredControllers %>
|
||||
<% loop $ElementFilteredControllers %>
|
||||
<div class="card">
|
||||
<div
|
||||
id="ElementHeader{$ID}"
|
||||
class="card-header accordion-header a h4"
|
||||
data-toggle="collapse"
|
||||
data-target="#ElementContent{$ID}"
|
||||
aria-expanded="false"
|
||||
aria-controls="ElementContent{$ID}"
|
||||
>
|
||||
$Title
|
||||
</div>
|
||||
|
||||
<div
|
||||
id="ElementContent{$ID}"
|
||||
class="accordion-content collapse"
|
||||
aria-labelledby="ElementHeader{$ID}"
|
||||
data-parent="#ElementAccordion{$Parent.ID}"
|
||||
>
|
||||
$Me
|
||||
</div>
|
||||
</div>
|
||||
<% end_loop %>
|
||||
<% end_if %>
|
|
@ -1,22 +0,0 @@
|
|||
<div
|
||||
data-aos="fade-up"
|
||||
class="element__content<% if $BlockLink %> has-blockLink<% end_if %><% if $BlockIcon %> has-blockIcon<% end_if %><% if $Style %> $CssStyle<% end_if %>"
|
||||
>
|
||||
<% if $BlockIcon %>
|
||||
<i class="element__icon $BlockIcon"></i>
|
||||
<% end_if %>
|
||||
|
||||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<div class="element__html typography">
|
||||
$HTML
|
||||
</div>
|
||||
|
||||
<% if $BlockLink %>
|
||||
<a href="$BlockLink.LinkURL" class="element__link btn btn-default stretched-link">
|
||||
$BlockLink.Title
|
||||
</a>
|
||||
<% end_if %>
|
||||
</div>
|
|
@ -1,15 +0,0 @@
|
|||
<div class="element__content<% if $Style %> $CssStyle<% end_if %>">
|
||||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<div class="element__html typography">
|
||||
$HTML
|
||||
</div>
|
||||
|
||||
<% if $BlockLink %>
|
||||
<a href="$BlockLink.LinkURL" class="element__link btn btn-default stretched-link">
|
||||
$BlockLink.Title
|
||||
</a>
|
||||
<% end_if %>
|
||||
</div>
|
|
@ -1,8 +0,0 @@
|
|||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<div class="element__content">
|
||||
<div class="element__feed jsInstagramFeed" $AttributesHTML></div>
|
||||
<div class="feed__link"><a href="{$FeedLink}" target="_blank">{$FeedTitle}</a></div>
|
||||
</div>
|
|
@ -1,23 +0,0 @@
|
|||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Content %>
|
||||
<div class="element__html typography">$Content</div>
|
||||
<% end_if %>
|
||||
|
||||
<div class="element__content">
|
||||
<% include Objects\Map %>
|
||||
|
||||
<% if $Locations %>
|
||||
<div class="locations">
|
||||
<div class="row">
|
||||
<% loop $Locations %>
|
||||
<div class="col">
|
||||
$forTemplate
|
||||
</div>
|
||||
<% end_loop %>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
||||
</div>
|
|
@ -1,24 +0,0 @@
|
|||
<% if $ShowTitle || $Content %>
|
||||
<div class="slider-caption">
|
||||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
<% if $Content %><div class="element__html typography">$Content</div><% end_if %>
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% if $SlideShow %>
|
||||
<div class="element__content">
|
||||
<div id="Carousel{$ID}" class="element__carousel carousel slide js-carousel"<% if $SlideShow.count > 1 %><% if $Interval %> data-interval="$Interval"<% end_if %> data-indicators="true" data-arrows="true"<% end_if %>>
|
||||
<div class="carousel-inner">
|
||||
<% loop $SlideShow %>
|
||||
<div class="carousel-item carousel-item-{$SlideType}<% if no $Controls %> carousel-item-nocontrols<% end_if %><% if $First %> active<% end_if %>">
|
||||
<div class="carousel-slide">
|
||||
<% include SlideItem %>
|
||||
</div>
|
||||
</div>
|
||||
<% end_loop %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
|
@ -1,17 +0,0 @@
|
|||
<% if $Members %>
|
||||
<div class="element__content<% if $Style %> $CssStyle<% end_if %>">
|
||||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<div class="element__content">
|
||||
<div class="row">
|
||||
<% loop $Members %>
|
||||
<div class="col-sm-3">
|
||||
<% include Objects\HCard %>
|
||||
</div>
|
||||
<% end_loop %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
|
@ -1,28 +0,0 @@
|
|||
<div id="MapPin{$ID}" data-id="{$ID}" class="location">
|
||||
<div class="fn">{$Title}</div>
|
||||
<div class="addr">{$Address}</div>
|
||||
<% if $Address2 %>
|
||||
<div class="addr2">{$Address2}</div>
|
||||
<% end_if %>
|
||||
<% if $City || $Suburb || $PostalCode || $Postcode %>
|
||||
<div class="city">
|
||||
{$City}{$Suburb}, {$State} {$PostalCode}{$Postcode}
|
||||
</div>
|
||||
<% end_if %>
|
||||
<% if $Country %>
|
||||
<div class="country d-none">{$Country}</div>
|
||||
<% end_if %>
|
||||
<% if $PhoneNumber %>
|
||||
<% with $PhoneNumber %>
|
||||
T: <a href="$LinkURL" class="tel">$Title</a><br/>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
||||
<% if $Fax %>
|
||||
<% with $Fax %>
|
||||
F: <span class="fax">$Title</span>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
||||
<div class="dir-link">
|
||||
<a href="$DirectionsURL" target="_blank">Get Directions »</a>
|
||||
</div>
|
||||
</div>
|
|
@ -1 +0,0 @@
|
|||
<b>$Day:</b> $From.Nice - $Till.Nice
|
|
@ -1,32 +0,0 @@
|
|||
<% if $ShowNotifications && $NotificationsToday %>
|
||||
<div class="notifications-list">
|
||||
<% loop $NotificationsToday %>
|
||||
<div class="alert alert-warning">
|
||||
<div class="container">
|
||||
<% if $DisplayTitle && $Title %>
|
||||
<h2>$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<div class="typography">
|
||||
$Content
|
||||
</div>
|
||||
|
||||
<% if $TargetLink %>
|
||||
<% with $TargetLink %>
|
||||
<a
|
||||
class="alert-link" href="$LinkURL"
|
||||
<% if $OpenInNewWindow %> target="_blank"<% end_if %>
|
||||
>
|
||||
$Title
|
||||
</a>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
||||
|
||||
<b class="btn btn-danger btn-close" data-dismiss="alert" aria-label="Close">
|
||||
<i class="fas fa-times"></i>
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
<% end_loop %>
|
||||
</div>
|
||||
<% end_if %>
|
|
@ -1,7 +0,0 @@
|
|||
<% if $OpeningHoursToday %>
|
||||
<% loop $OpeningHoursToday %>
|
||||
$forTemplate<br/>
|
||||
<% end_loop %>
|
||||
<% else %>
|
||||
<b class="hours hous-closed">Closed</b>
|
||||
<% end_if %>
|
|
@ -1,8 +0,0 @@
|
|||
<img src="$Image.FocusFill(432,315).URL" alt="$Title" />
|
||||
<% if $Link %>
|
||||
<% with $Link %>
|
||||
<a href="$URL"<% if $OpenInNewWindow %> target="_blank"<% end_if %> class="stretched-link">
|
||||
<span class="sr-only">$Up.Title</span>
|
||||
</a>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
|
@ -1,3 +0,0 @@
|
|||
<% if $Text %>
|
||||
<div class="typography">$Text</div>
|
||||
<% end_if %>
|
|
@ -1,9 +0,0 @@
|
|||
<% if $Element %>
|
||||
<% with $Element %>
|
||||
<div class="element element__{$SimpleClassName}<% if $StyleVariant %> $StyleVariant<% end_if %><% if $ExtraClass %> $ExtraClass<% end_if %>" id="$Anchor">
|
||||
<div class="element-container<% if $ContainerClass %> $ContainerClass<% end_if %>">
|
||||
$forTemplate
|
||||
</div>
|
||||
</div>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
|
@ -1,18 +0,0 @@
|
|||
<% if $Submenu %>
|
||||
<nav>
|
||||
<ul class="nav flex-column">
|
||||
<% with $Page.Level(1) %>
|
||||
<li class="nav-item-level1 nav-item {$CSSClass} $ExtraClass">
|
||||
<b class="nav-link">
|
||||
$MenuTitle.XML
|
||||
<% if $isCurrent || $isSection %><i class="sr-only">(current)</i><% end_if %>
|
||||
</b>
|
||||
</li>
|
||||
<% end_with %>
|
||||
|
||||
<% loop $Submenu %>
|
||||
<% include NavItem %>
|
||||
<% end_loop %>
|
||||
</ul>
|
||||
</nav>
|
||||
<% end_if %>
|
|
@ -1,21 +0,0 @@
|
|||
<% if $Pages %>
|
||||
<div class="$DefaultContainer">
|
||||
<nav class="breadcrumbs" aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item">
|
||||
<a href="/" class="breadcrumb-link">Home</a>
|
||||
</li>
|
||||
<% loop $Pages %>
|
||||
<li
|
||||
class="breadcrumb-item<% if $Last %> current active<% end_if %>"
|
||||
<% if $Last %> aria-current="page"<% end_if %>
|
||||
>
|
||||
<% if not Up.Unlinked %><a href="$Link" class="graphql-page breadcrumb-link breadcrumb-link__$Pos"><% end_if %>
|
||||
$MenuTitle.XML
|
||||
<% if not Up.Unlinked %></a><% end_if %>
|
||||
</li>
|
||||
<% end_loop %>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
<% end_if %>
|
|
@ -1,10 +1,11 @@
|
|||
<div
|
||||
id="$Anchor"
|
||||
class="element $SimpleClassName.LowerCase
|
||||
<% if $LinkedElement %> $LinkedElement.SimpleClassName.LowerCase<% end_if %>
|
||||
<% if $StyleVariant %> $StyleVariant<% end_if %><% if $ExtraClass %> $ExtraClass<% end_if %>"
|
||||
id="$Anchor"
|
||||
class="element $SimpleClassName.LowerCase
|
||||
<% if $LinkedElement %> $LinkedElement.SimpleClassName.LowerCase<% end_if %>
|
||||
<% if $StyleVariant %> $StyleVariant<% end_if %>
|
||||
<% if $ExtraClass %> $ExtraClass<% end_if %>"
|
||||
>
|
||||
<div class="element-container<% if $ContainerClass %> $ContainerClass<% end_if %>">
|
||||
<div class="element__container<% if $ContainerClass %> $ContainerClass<% end_if %>">
|
||||
$Element
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
<div
|
||||
class="element__content<% if $BlockLink %> has-blockLink<% end_if %><% if $BlockIcon %> has-blockIcon<% end_if %><% if $Style %> $CssStyle<% end_if %>"
|
||||
>
|
||||
<% if $BlockIcon %>
|
||||
<i class="element__icon $BlockIcon"></i>
|
||||
<% end_if %>
|
||||
<div class="element__content<% if $Style %> $CssStyle<% end_if %>">
|
||||
<% if $ShowTitle %>
|
||||
<h2 class="element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
@ -11,10 +6,4 @@ class="element__content<% if $BlockLink %> has-blockLink<% end_if %><% if $Block
|
|||
<div class="element__html typography">
|
||||
$HTML
|
||||
</div>
|
||||
|
||||
<% if $BlockLink %>
|
||||
<a href="$BlockLink.LinkURL" class="element__link btn btn-default stretched-link">
|
||||
$BlockLink.Title
|
||||
</a>
|
||||
<% end_if %>
|
||||
</div>
|
||||
|
|
|
@ -19,6 +19,6 @@
|
|||
|
||||
<% if $ImageLink %>
|
||||
<a href="$ImageLink.LinkURL" class="element__link graphql-page stretched-link">
|
||||
<b class="sr-only">$ImageLink.Title</b>
|
||||
<b class="visually-hidden">$ImageLink.Title</b>
|
||||
</a>
|
||||
<% end_if %>
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
<% include MainContent Layout=$Layout %>
|
|
@ -1,53 +0,0 @@
|
|||
<div id="SiteWideAlerts" class="offline-message">
|
||||
<div
|
||||
class="alert alert-danger alert-offline alert-dismissible fade show"
|
||||
role="alert"
|
||||
>
|
||||
<div class="typography">
|
||||
The Internet connection is missing right now, but you're able to
|
||||
browse previously opened pages offline.
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-danger btn-close"
|
||||
data-bs-dismiss="alert"
|
||||
aria-label="Close"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
<noscript>
|
||||
<div class="main-bn alert alert-fixed-top alert-danger" role="alert">
|
||||
Please, enable javascript.
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
<!--[if lt IE 11
|
||||
]><div class="main-bn alert alert-danger" role="alert">
|
||||
<a
|
||||
href="https://www.google.com/chrome/browser/desktop/"
|
||||
classs="alert-link"
|
||||
>
|
||||
You are using an outdated browser. For a faster, safer browsing
|
||||
experience, upgrade for free today.
|
||||
</a>
|
||||
</div><!
|
||||
[endif]-->
|
||||
|
||||
<% if $SiteWideMessage %>
|
||||
<div class="single-message">
|
||||
<div class="alert alert-fixed-top alert-{$Type}">
|
||||
<div class="$DefaultContainer">
|
||||
<b class="btn btn-danger btn-close" data-dismiss="alert" aria-label="Close">
|
||||
<i class="fas fa-times"></i>
|
||||
</b>
|
||||
{$Message}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% with $SiteConfig %>
|
||||
<% include App\Objects\NotificationsList NotificationsToday=$NotificationsToday.filter('Area', 'Site') %>
|
||||
<% end_with %>
|
||||
</div>
|
|
@ -1,45 +0,0 @@
|
|||
<div class="page-content page-content-main">
|
||||
<% if not $ExcludeHeader %>
|
||||
<% include PageHeader %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $CurrentElement %>
|
||||
<div class="current-element">
|
||||
$CurrentElement
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="elemental-area">
|
||||
<% if $ElementalArea.Elements.Count %>
|
||||
$ElementalArea
|
||||
<% else_if $Content %>
|
||||
<div class="element element_content_field dnadesign__elemental__models__elementcontent">
|
||||
<div class="element-container {$DefaultContainer}">
|
||||
<% include DNADesign\Elemental\Models\ElementContent HTML=$Content %>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Form %>
|
||||
<div class="page-form-element element">
|
||||
<div class="element_container">
|
||||
<div class="$DefaultContainer">
|
||||
$Form
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% if $ExtraCode %>
|
||||
<div class="page-extra-code">
|
||||
<div class="element">
|
||||
<div class="element_container">
|
||||
<div class="$DefaultContainer">
|
||||
$ExtraCode
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
||||
</div>
|
|
@ -1,22 +0,0 @@
|
|||
<%-- Upgrade your Browser notice --%>
|
||||
<!--[if lt IE 10]><div class="main-bn"><a href="https://www.google.com/chrome/browser/desktop/" title="<%t Page.UPGRADEBROWSER 'Upgrade your browser' %>"><%t Page.OUTDATEDBROWSER 'You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.' %></a></div><![endif]-->
|
||||
|
||||
<%-- No JS enabled notice --%>
|
||||
<noscript><div class="main-bn"><%t Page.JAVASCRIPTREQUIRED 'Please, enable javascript.' %></div></noscript>
|
||||
|
||||
<% include LoadingSpinner %>
|
||||
|
||||
|
||||
<%-- if $isDev || $WebpackActive %>
|
||||
<div id="DevUtilities">
|
||||
$DeferedCSS('app_dev.css')
|
||||
$DeferedJS('app_dev.js')
|
||||
<div class="navs">
|
||||
<button class="toggle-original">Toggle Original</button>
|
||||
</div>
|
||||
<div class="original d-none"></div>
|
||||
</div>
|
||||
<% end_if --%>
|
||||
|
||||
<%-- Site Wide Alert Message --%>
|
||||
<% include Alerts %>
|
|
@ -1,15 +0,0 @@
|
|||
<div class="hidden-print hidden-md">
|
||||
$BetterNavigator
|
||||
</div>
|
||||
|
||||
<%-- Require CSS+JS from /public/resourses/[js,css]/[ClassName].[js,css] --%>
|
||||
$AutoRequirements($ClassName).RAW
|
||||
|
||||
<%-- Mapbox
|
||||
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.48.0/mapbox-gl.js"></script>
|
||||
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.48.0/mapbox-gl.css" rel="stylesheet" />--%>
|
||||
|
||||
<%-- place extra requirements after this line --%>
|
||||
<div class="extra-code extra-code-site">
|
||||
$SiteConfig.ExtraCode
|
||||
</div>
|
|
@ -1,221 +0,0 @@
|
|||
<style>
|
||||
@keyframes lds-ellipsis1 {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
@keyframes lds-ellipsis3 {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
100% {
|
||||
transform: scale(0);
|
||||
}
|
||||
}
|
||||
@keyframes lds-ellipsis2 {
|
||||
0% {
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
100% {
|
||||
transform: translate(1.35rem, 0);
|
||||
}
|
||||
}
|
||||
body,
|
||||
html {
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #fff;
|
||||
color: #212529;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
@media (min-width: 2000px) {
|
||||
html, body {
|
||||
font-size: .9vw;
|
||||
}
|
||||
}
|
||||
#PageLoading {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
margin: 0;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-ms-flex-pack: center;
|
||||
justify-content: center;
|
||||
z-index: 2000;
|
||||
will-change: opacity;
|
||||
background: #fff;
|
||||
color: #212529;
|
||||
}
|
||||
#PageLoading .logo {
|
||||
width:100px;
|
||||
width: 12.5vw;
|
||||
}
|
||||
#PageLoading .tagline {
|
||||
margin-top:1rem;
|
||||
margin-bottom:1rem;
|
||||
color: #fff;
|
||||
font-size:1.8rem;
|
||||
font-size: 4vh;
|
||||
letter-spacing: .25em;
|
||||
}
|
||||
.main-bn {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
z-index: 99999999;
|
||||
padding: 0.5rem 1rem;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
background: #ff0000;
|
||||
}
|
||||
img,
|
||||
iframe {
|
||||
max-width: 100%;
|
||||
}
|
||||
.loading-spinner {
|
||||
text-align: center;
|
||||
}
|
||||
.lds-ellipsis {
|
||||
margin-top:1.5rem;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 4.57rem;
|
||||
height: 1rem;
|
||||
color: #fff;
|
||||
}
|
||||
.lds-ellipsis div {
|
||||
position: absolute;
|
||||
top:0.15rem;
|
||||
width: 0.78rem;
|
||||
height: 0.78rem;
|
||||
border-radius: 50%;
|
||||
background: #888;
|
||||
animation-timing-function: cubic-bezier(0, 1, 1, 0);
|
||||
}
|
||||
.lds-ellipsis div:nth-child(1) {
|
||||
left: 0.42rem;
|
||||
animation: lds-ellipsis1 0.6s infinite;
|
||||
}
|
||||
.lds-ellipsis div:nth-child(2) {
|
||||
left: 0.9rem;
|
||||
animation: lds-ellipsis2 0.6s infinite;
|
||||
}
|
||||
.lds-ellipsis div:nth-child(3) {
|
||||
left: 1.85rem;
|
||||
animation: lds-ellipsis2 0.6s infinite;
|
||||
}
|
||||
.lds-ellipsis div:nth-child(4) {
|
||||
left: 3.21rem;
|
||||
animation: lds-ellipsis3 0.6s infinite;
|
||||
}
|
||||
@keyframes lds-text {
|
||||
from {
|
||||
font-size: 1em;
|
||||
}
|
||||
to {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
}
|
||||
.lds-text {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-left: -5rem;
|
||||
margin-top: 8rem;
|
||||
font-size: 0.8rem;
|
||||
letter-spacing: 0.25em;
|
||||
color: #fff;
|
||||
}
|
||||
.lds-text b {
|
||||
font-weight: 300;
|
||||
animation: lds-text 5s ease infinite alternate;
|
||||
}
|
||||
.lds-text b:nth-child(1) {
|
||||
animation-delay: 0.5s;
|
||||
}
|
||||
.lds-text b:nth-child(2) {
|
||||
animation-delay: 1s;
|
||||
}
|
||||
.lds-text b:nth-child(3) {
|
||||
animation-delay: 1.5s;
|
||||
}
|
||||
.lds-text b:nth-child(4) {
|
||||
animation-delay: 2s;
|
||||
}
|
||||
.lds-text b:nth-child(5) {
|
||||
animation-delay: 2.5s;
|
||||
}
|
||||
.lds-text b:nth-child(6) {
|
||||
animation-delay: 3s;
|
||||
}
|
||||
.lds-text b:nth-child(7) {
|
||||
animation-delay: 3.5s;
|
||||
}
|
||||
.lds-text b:nth-child(8) {
|
||||
animation-delay: 4s;
|
||||
}
|
||||
.lds-text b:nth-child(9) {
|
||||
animation-delay: 4.5s;
|
||||
}
|
||||
.lds-text b:nth-child(10) {
|
||||
animation-delay: 5s;
|
||||
}
|
||||
@media (orientation: portrait) {
|
||||
#PageLoading .logo {
|
||||
width:50vw;
|
||||
}
|
||||
#PageLoading .tagline {
|
||||
font-size: 4vw;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<% with $SiteConfig %>
|
||||
<div id="PageLoading">
|
||||
<div class="loading-spinner">
|
||||
<img
|
||||
class="logo"
|
||||
src="{$ResourcesURL('logo.png')}"
|
||||
width="200"
|
||||
alt="{$Title}"
|
||||
/><br />
|
||||
<div class="lds-ellipsis">
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<% if $Tagline %>
|
||||
<div class="tagline">
|
||||
$Tagline
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="lds-placeholder">LOADING...</div>
|
||||
<div class="lds-text">
|
||||
<b>L</b>
|
||||
<b>O</b>
|
||||
<b>A</b>
|
||||
<b>D</b>
|
||||
<b>I</b>
|
||||
<b>N</b>
|
||||
<b>G</b>
|
||||
<b>.</b>
|
||||
<b>.</b>
|
||||
<b>.</b>
|
||||
</div>
|
||||
<% end_if %>
|
||||
</div>
|
||||
</div>
|
||||
<% end_with %>
|
|
@ -1,16 +0,0 @@
|
|||
<% cached 'LocalesNavigationFooter', List(Page).max(LastEdited), $CurrentLocale, $ID %>
|
||||
<% if $Locales %>
|
||||
<div id="LocaleMenu">
|
||||
<nav class="primary">
|
||||
<ul class="list-inline">
|
||||
<% loop $Locales %>
|
||||
<li class="list-inline-item $LinkingMode<% if $LinkingMode = 'current' %> active<% end_if %>">
|
||||
<a href="$Link.ATT" <% if $LinkingMode != 'invalid' %>rel="alternate"
|
||||
hreflang="$HrefLang"<% end_if %>>$Title.XML</a>
|
||||
</li>
|
||||
<% end_loop %>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
<% end_if %>
|
||||
<% end_cached %>
|
|
@ -1,41 +0,0 @@
|
|||
<div class="mainContent-page-{$CSSClass}">
|
||||
<% if $HeroImageRecursive %>
|
||||
<div class="element element__hero-image">
|
||||
<div class="element-container">
|
||||
<% include SlideItem Image=$HeroImageRecursive, SlideWidth='2140', SlideHeight='450' %>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% if $URLSegment != 'home' %>
|
||||
<div id="PageBreadcumbs" class="element element__breadcrumbs">
|
||||
$Breadcrumbs
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% if $SideBarContent || $SideBarView && $SideBarView.Widgets.Count %>
|
||||
<div class="content-holder content-holder__sidebar">
|
||||
<div class="{$DefaultContainer}">
|
||||
<div class="row">
|
||||
<div class="col-md-9 layout__col">
|
||||
$Layout
|
||||
</div>
|
||||
<div class="col-md-3 sidebar__col">
|
||||
<div class="{$DefaultContainer}">
|
||||
<div class="page-content-sidebar page-content jsSidebarUI">
|
||||
<div class="jsSidebarUI__inner">
|
||||
$SideBarContent
|
||||
$SideBarView
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="content-holder">
|
||||
$Layout
|
||||
</div>
|
||||
<% end_if %>
|
||||
</div>
|
|
@ -1,68 +0,0 @@
|
|||
<% base_tag %>
|
||||
$MetaTags
|
||||
|
||||
<meta name="msapplication-navbutton-color" content="#000000" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="#000000" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
|
||||
<%-- OpenGraph --%>
|
||||
<meta property="og:url" content="{$AbsoluteBaseURL}" />
|
||||
<meta property="og:site_name" content="{$SiteConfig.Title}" />
|
||||
<meta property="og:locale" content="$ContentLocale.ATT" />
|
||||
|
||||
<% if $MetaTitle %>
|
||||
<meta property="og:title" content="{$MetaTitle} - {$SiteConfig.Title}" />
|
||||
<meta property="og:image:alt" content="{$MetaTitle}" />
|
||||
<% else %>
|
||||
<meta property="og:title" content="{$Title} - {$SiteConfig.Title}" />
|
||||
<meta property="og:image:alt" content="{$Title}" />
|
||||
<% end_if %>
|
||||
|
||||
<% if $MetaDescription %>
|
||||
<meta property="og:description" content="{$MetaDescription}" />
|
||||
<% end_if %>
|
||||
<% if $MetaImage %>
|
||||
<meta property="og:image" content="{$MetaImage.Link}" />
|
||||
<% end_if %>
|
||||
<% if $FacebookAppID %>
|
||||
<meta property="fb:app_id" content="{$FacebookAppID}" />
|
||||
<% end_if %>
|
||||
<meta property="og:type" content="<% if $OgType %>$OgType<% else %>article<% end_if %>" />
|
||||
<%-- /OpenGraph --%>
|
||||
|
||||
<link rel="canonical" href="{$AbsoluteLink}" />
|
||||
|
||||
<link rel="author" type="text/plain" href="{$AbsoluteBaseURL}humans.txt" />
|
||||
<link rel="sitemap" type="application/xml" title="Sitemap" href="{$AbsoluteBaseURL}sitemap.xml" />
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="preconnect" href="https://maps.google.com" />
|
||||
<link rel="preconnect" href="https://ajax.googleapis.com" />
|
||||
<link rel="preconnect" href="https://csi.gstatic.com" />
|
||||
<link rel="preconnect" href="https://maps.googleapis.com" />
|
||||
|
||||
<link rel="preconnect" href="https://www.youtube.com" />
|
||||
<link rel="preconnect" href="https://i.ytimg.com" />
|
||||
<link rel="preconnect" href="https://i9.ytimg.com" />
|
||||
<link rel="preconnect" href="https://s.ytimg.com" />
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{$AbsoluteBaseURL}resources/app/client/dist/icons/favicon.ico" />
|
||||
<link rel="apple-touch-icon" href="{$AbsoluteBaseURL}resources/app/client/dist/icons/apple-touch-icon.png" />
|
||||
<link rel="apple-touch-icon-precomposed" href="{$AbsoluteBaseURL}resources/app/client/dist/icons/apple-touch-icon-precomposed.png" />
|
||||
|
||||
<meta name="application-name" content="{$SiteConfig.Title}" />
|
||||
<meta name="msapplication-TileImage" content="{$AbsoluteBaseURL}resources/app/client/dist/icons/mstile-144x144.png" />
|
||||
<meta name="msapplication-TileColor" content="#2F98F1" />
|
||||
|
||||
<meta content="yes" name="apple-mobile-web-app-capable" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1" />
|
||||
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
|
||||
<meta name="swversion" content="{$SWVersion}" />
|
||||
<meta name="ping" content="/Security/ping" />
|
||||
<meta name="api_url" content="{$AbsoluteBaseURL}graphql" />
|
||||
<meta name="api_static_domain" content="{$AbsoluteBaseURL}" />
|
|
@ -1,28 +0,0 @@
|
|||
<% if $Children %>
|
||||
<div class="nav-item dropdown dropdown-hover<% if $SubmenuColumns %> submenu-cols-dropdown<% end_if %> {$CSSClass} {$ExtraClass}">
|
||||
<% include NavItem_link ExtraClass="dropdown-toggle-fl dropdown-toggle-notouch" %>
|
||||
|
||||
<button
|
||||
id="NavItemButton{$ID}"
|
||||
class="nav-link dropdown-toggle dropdown-toggle-sm dropdown-toggle-touch<% if $RedirectionType = 'External' || $ExternalURL || $OpenInNewWindow %> external<% end_if %><% if $DropdownNoLink %> d-block<% end_if %>"
|
||||
role="button"
|
||||
data-bs-toggle="dropdown"
|
||||
aria-expanded="false"
|
||||
type="button"
|
||||
>
|
||||
$MenuTitle.XML
|
||||
</button>
|
||||
|
||||
<div class="dropdown-menu<% if $SubmenuColumns %> submenu-cols<% end_if %>" aria-labelledby="NavItemButton{$ID}">
|
||||
<ul class="dropdown-list">
|
||||
<% loop $Children %>
|
||||
<% include NavItem ExtraClass="dropdown-item" %>
|
||||
<% end_loop %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<% else %>
|
||||
<div class="nav-item {$CSSClass} $ExtraClass">
|
||||
<% include NavItem_link ExtraClass='' %>
|
||||
</div>
|
||||
<% end_if %>
|
|
@ -1,12 +0,0 @@
|
|||
<a
|
||||
class="nav-link graphql-page $ExtraClass <% if $LinkClass %>{$LinkClass}<% else %>nav-link<% end_if %><% if $RedirectionType = 'External' || $ExternalURL || $OpenInNewWindow %> external<% end_if %><% if $isCurrent || $isSection %> active <% end_if %><% if $isSection %> section<% end_if %>"
|
||||
href="{$Link}"
|
||||
<% if $RedirectionType = 'External' || $OpenInNewWindow %> target="_blank"<% end_if %>
|
||||
data-text="{$MenuTitle.XML}"
|
||||
>
|
||||
<% if $BlockIcon %>
|
||||
<i class="fa-icon $BlockIcon"></i>
|
||||
<% end_if %>
|
||||
$MenuTitle.XML
|
||||
<% if $isCurrent || $isSection %><i class="sr-only">(current)</i><% end_if %>
|
||||
</a>
|
|
@ -1,15 +0,0 @@
|
|||
<div class="
|
||||
element
|
||||
page-header-element
|
||||
<% if $ElementalArea.Elements.Count < 1 %>
|
||||
d-block no-elements
|
||||
<% else_if not $ElementalArea.Elements.First.ShowTitle && $ElementalArea.Elements.First.ClassName != App\Elements\SliderElement %>
|
||||
d-block
|
||||
<% end_if %>
|
||||
">
|
||||
<div class="element-container $DefaultContainer">
|
||||
<h1 class="page-header">
|
||||
$Title
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
|
@ -1 +0,0 @@
|
|||
<div></div>
|
|
@ -1,27 +0,0 @@
|
|||
<% include SlideItem_media %>
|
||||
|
||||
<% if $Content || $Headline || $CustomTitle || $Description || $SlideLinkID %>
|
||||
<div class="container">
|
||||
<div class="carousel-caption">
|
||||
<div class="carousel-caption-container typography">
|
||||
<% if $Headline %>
|
||||
<h2 class="carousel-title">
|
||||
$Headline
|
||||
</h2>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Content %>
|
||||
<div class="carousel-content">$Content</div>
|
||||
<% else_if $Description %>
|
||||
<p class="carousel-content">$Description</p>
|
||||
<% end_if %>
|
||||
|
||||
<% if $SlideLinkID %>
|
||||
<% with $SlideLink %>
|
||||
<% include NavItem_link MenuTitle=$Title, Link=$LinkURL, LinkClass="slide-link" %>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
|
@ -1,26 +0,0 @@
|
|||
<% if $Video || $Image %>
|
||||
<% if $Video %>
|
||||
<div class="video">
|
||||
$Video.EmbedHTML.RAW
|
||||
</div>
|
||||
<% else %>
|
||||
<% if $Image || $ImageURL %>
|
||||
<span class="img">
|
||||
<img class="carousel__img"
|
||||
src="{$EmptyImgSrc}"
|
||||
data-lazy-src="<% if $ImageURL %>$ImageURL<% else %>$Image.FocusFill($SlideWidth,$SlideHeight).URL<% end_if %>"
|
||||
alt="<% if $Headline %>$Headline.XML<% end_if %>"
|
||||
/>
|
||||
</span>
|
||||
<% end_if %>
|
||||
|
||||
<% if $SlideLinkID %>
|
||||
<% with $SlideLink %>
|
||||
<% include NavItem_link MenuTitle=$Title, Link=$LinkURL, LinkClass="stretched-link slide-link slide-link__media" %>
|
||||
<% end_with %>
|
||||
<% else_if $SlideLinkURL %>
|
||||
<% include NavItem_link MenuTitle=$Headline, Link=$SlideLinkURL, LinkClass="stretched-link slide-link slide-link__media" %>
|
||||
<% end_if %>
|
||||
|
||||
<% end_if %>
|
||||
<% end_if %>
|
|
@ -1,33 +0,0 @@
|
|||
<div class="vcard h-card">
|
||||
<div class="img">
|
||||
<img
|
||||
class="photo u-photo"
|
||||
src="<% if $Photo %>{$Photo.FocusFill(300,300).Link}<% else %>https://placehold.it/300x300<% end_if %>"
|
||||
alt="{$Title}"
|
||||
/>
|
||||
<div class="caption">
|
||||
<% include Objects\SocialLinks %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="fn p-name">
|
||||
$FirstName
|
||||
$LastName
|
||||
</h5>
|
||||
|
||||
<% if $Company || $Position %>
|
||||
<div class="company">
|
||||
<% if $Company %>
|
||||
<span class="org p-org">$Company</span><% if $Position %>,<% end_if %>
|
||||
<% end_if %>
|
||||
<% if $Position %>
|
||||
<span class="category p-category">$Position</span>
|
||||
<% end_if %>
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<span class="n p-name d-none">
|
||||
<span class="given-name p-given-name">$FirstName</span>
|
||||
<span class="family-name p-family-name">$LastName</span>
|
||||
</span>
|
||||
</div>
|
|
@ -1,28 +0,0 @@
|
|||
<div
|
||||
class="mapAPI-map-container"
|
||||
data-map-zoom="$MapZoom"
|
||||
data-key="$MapAPIKey"
|
||||
data-map-style="<% if $MapStyle %>$MapStyle.XML<% else %>$SiteConfig.MapStyle.XML<% end_if %>"
|
||||
<% if $GeoJSON %>data-geojson="$GeoJSON.XML"<% end_if %>
|
||||
<% if $ID %>
|
||||
data-id="$ID"
|
||||
<% end_if %>
|
||||
<% if $MapIcon %>
|
||||
data-icon="$Icon.XML"
|
||||
<% end_if %>
|
||||
<% if $MapTitle %>
|
||||
data-content="$MapTitle.XML"
|
||||
<% end_if %>
|
||||
<% if $Lat && $Lng %>
|
||||
data-lat="$Lat"
|
||||
data-lng="$Lng"
|
||||
<% else_if $FullAddress %>
|
||||
data-address="$FullAddress.XML"
|
||||
<% else_if $Address %>
|
||||
data-address="$Address.XML"
|
||||
<% end_if %>
|
||||
data-fly-to-marker="true"
|
||||
data-fly-to-bounds="false"
|
||||
>
|
||||
<div class="mapAPI-map"></div>
|
||||
</div>
|
|
@ -1,31 +0,0 @@
|
|||
<%-- NOTE: Before including this, you will need to wrap the include in a with block --%>
|
||||
|
||||
<% if $MoreThanOnePage %>
|
||||
<nav aria-label="<%t Page.PaginationLabel "Pagination" %>">
|
||||
<ul class="pagination justify-content-center">
|
||||
<li class="page-item<% if $FirstPage %> disabled<% end_if %>">
|
||||
<a class="page-link" href="{$PrevLink}" aria-label="<%t Page.PaginationPrevious "Previous" %>">
|
||||
<span aria-hidden="true">«</span>
|
||||
<span class="sr-only"><%t Page.PaginationPrevious "Previous" %></span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<% loop $PaginationSummary(12) %>
|
||||
<li class="page-item<% if $CurrentBool %> active<% end_if %>">
|
||||
<% if $Link %>
|
||||
<a href="$Link" class="page-link">$PageNum</a>
|
||||
<% else %>
|
||||
<span>...</span>
|
||||
<% end_if %>
|
||||
</li>
|
||||
<% end_loop %>
|
||||
|
||||
<li class="page-item<% if $LastPage %> disabled<% end_if %>">
|
||||
<a class="page-link" href="{$NextLink}" aria-label="<%t Page.PaginationNext "Next" %>">
|
||||
<span aria-hidden="true">»</span>
|
||||
<span class="sr-only"><%t Page.PaginationNext "Next" %></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<% end_if %>
|
|
@ -1,10 +0,0 @@
|
|||
<div class="sc-links sc-links-share">
|
||||
<a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u={$AbsoluteLink}" class="fb" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u={$AbsoluteLink}','sharer','toolbar=0,status=0,width=530,height=520');return false;">
|
||||
<i class="fa fas fa-facebook-f"></i>
|
||||
<span class="sr-only">Share Facebook</span>
|
||||
</a>
|
||||
<a target="_blank" href="https://twitter.com/intent/tweet?url={$AbsoluteLink}" class="tw">
|
||||
<i class="fa fas fa-twitter"></i>
|
||||
<span class="sr-only">Share Twitter</span>
|
||||
</a>
|
||||
</div>
|
|
@ -1,32 +0,0 @@
|
|||
<div class="sc-links">
|
||||
<% if $Facebook %>
|
||||
<a href="$Facebook.LinkURL" title="Facebook" target="_blank">
|
||||
<i class="fab fa-facebook-f"></i>
|
||||
<i class="sr-only">Facebook</i>
|
||||
</a>
|
||||
<% end_if %>
|
||||
<% if $LinkedIn %>
|
||||
<a href="$LinkedIn.LinkURL" title="LinkedIn" target="_blank">
|
||||
<i class="fab fa-linkedin-in"></i>
|
||||
<i class="sr-only">LinkedIn</i>
|
||||
</a>
|
||||
<% end_if %>
|
||||
<% if $Pinterest %>
|
||||
<a href="$Pinterest.LinkURL" title="Pinterest" target="_blank">
|
||||
<i class="fab fa-pinterest-p"></i>
|
||||
<i class="sr-only">Pinterest</i>
|
||||
</a>
|
||||
<% end_if %>
|
||||
<% if $Instagram %>
|
||||
<a href="$Instagram.LinkURL" title="Instagram" target="_blank">
|
||||
<i class="fab fa-instagram"></i>
|
||||
<i class="sr-only">Instagram</i>
|
||||
</a>
|
||||
<% end_if %>
|
||||
<% if $Twitter %>
|
||||
<a href="$Twitter.LinkURL" title="Twitter" target="_blank">
|
||||
<i class="fab fa-twitter"></i>
|
||||
<i class="sr-only">Twitter</i>
|
||||
</a>
|
||||
<% end_if %>
|
||||
</div>
|
|
@ -1,16 +0,0 @@
|
|||
<div class="testimonial">
|
||||
<div class="testimonial__quote">
|
||||
<blockquote class="blockquote text-center">
|
||||
<i class="fas fa-quote-left"></i>
|
||||
<% if $Content %><p>$Content</p><% end_if %>
|
||||
<% if $Name || $Affiliation %>
|
||||
<footer class="blockquote-footer">
|
||||
<% if $Name %><div class="fn">$Name</div><% end_if %>
|
||||
<% if $Affiliation || $Position %>
|
||||
<div class="company">$Affiliation<% if $Position && $Affiliation %>, $Position<% else %>$Position<% end_if %></div>
|
||||
<% end_if %>
|
||||
</footer>
|
||||
<% end_if %>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
|
@ -1,29 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="$ContentLocale.ATT" dir="$i18nScriptDirection.ATT">
|
||||
<%-- manifest="/cache.appcache" --%>
|
||||
<head>
|
||||
<% include MetaHead %>
|
||||
</head>
|
||||
|
||||
<body<% with $SiteConfig %> data-default-lng="$Longitude" data-default-lat="$Latitude"<% end_with %>>
|
||||
<div class="wrapper">
|
||||
<% include First %>
|
||||
|
||||
<div id="MetaLightboxApp"></div>
|
||||
|
||||
<header id="Header">
|
||||
<% include Header %>
|
||||
</header>
|
||||
|
||||
<main id="MainContent" class="page-content" data-ajax-region="LayoutAjax">
|
||||
<% include MainContent Layout=$Layout %>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<footer id="Footer" class="site-footer footer">
|
||||
<% include Footer %>
|
||||
</footer>
|
||||
|
||||
<% include Last %>
|
||||
</body>
|
||||
</html>
|
|
@ -2,5 +2,5 @@
|
|||
|
||||
<b class="field-password__show-password show-password">
|
||||
<i class="fas fa-eye"></i>
|
||||
<span class="sr-only">Show Password</span>
|
||||
<span class="visually-hidden">Show Password</span>
|
||||
</b>
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
<nav class="secondary element element__widget widget__$ClassName {$SimpleClassName}">
|
||||
<% if $ShowTitle && $Title %><h2 class="widget-title">$Title</h2><% end_if %>
|
||||
$Content
|
||||
</nav>
|
|
@ -7,8 +7,7 @@
|
|||
"webpack"
|
||||
],
|
||||
"license": "BSD-3-Clause",
|
||||
"require":
|
||||
{
|
||||
"require": {
|
||||
"php": ">=7.1.0",
|
||||
"ext-json": "*",
|
||||
"silverstripe/recipe-cms": "^4",
|
||||
|
@ -43,6 +42,8 @@
|
|||
"a2nt/silverstripe-font-awesome-field": "dev-master",
|
||||
"a2nt/silverstripe-mapboxfield": "dev-master",
|
||||
"a2nt/silverstripe-progressivewebapp": "dev-master",
|
||||
"a2nt/silverstripe-elemental-basics": "*",
|
||||
"a2nt/cms-niceties": "*",
|
||||
"bummzack/sortablefile": "*",
|
||||
"eluceo/ical": "^0.16.0",
|
||||
"ezyang/htmlpurifier": "^4.13",
|
||||
|
@ -51,23 +52,22 @@
|
|||
"jonom/focuspoint": "^3.1",
|
||||
"silverstripe/graphql": "^3.4"
|
||||
},
|
||||
"require-dev":
|
||||
{
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^5.7",
|
||||
"lekoala/silverstripe-debugbar": "dev-master",
|
||||
"silverstripe/graphql-devtools": "1.x-dev"
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/a2nt/silverstripe-font-awesome"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/a2nt/silverstripe-mapboxfield"
|
||||
}],
|
||||
"extra":
|
||||
{
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/a2nt/silverstripe-font-awesome"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/a2nt/silverstripe-mapboxfield"
|
||||
}
|
||||
],
|
||||
"extra": {
|
||||
"expose": [
|
||||
"app/client/dist"
|
||||
],
|
||||
|
@ -88,8 +88,7 @@
|
|||
"web.config"
|
||||
]
|
||||
},
|
||||
"config":
|
||||
{
|
||||
"config": {
|
||||
"process-timeout": 600
|
||||
},
|
||||
"prefer-stable": true,
|
||||
|
|
90
package.json
90
package.json
|
@ -32,10 +32,10 @@
|
|||
],
|
||||
"dependencies": {
|
||||
"@a2nt/meta-lightbox-react": "^3.1.3",
|
||||
"@a2nt/ss-bootstrap-ui-webpack-boilerplate-react": "^3.2.1",
|
||||
"@angular/common": "^11.2.12",
|
||||
"@angular/core": "^11.2.12",
|
||||
"@apollo/client": "^3.3.16",
|
||||
"@a2nt/ss-bootstrap-ui-webpack-boilerplate-react": "^3.2.4",
|
||||
"@angular/common": "^12.0.5",
|
||||
"@angular/core": "^12.0.5",
|
||||
"@apollo/client": "^3.3.20",
|
||||
"@jsanahuja/instagramfeed": "github:jsanahuja/instagramfeed",
|
||||
"@popperjs/core": "^2.9.2",
|
||||
"aos": "^2.3.4",
|
||||
|
@ -48,13 +48,13 @@
|
|||
"font-awesome": "^4.7.0",
|
||||
"graphql": "^15.5.0",
|
||||
"hammerjs": "^2.0.8",
|
||||
"inputmask": "^5.0.5",
|
||||
"inputmask": "^5.0.6",
|
||||
"keyboardjs": "^2.6.4",
|
||||
"localforage": "^1.9.0",
|
||||
"localforage-cordovasqlitedriver": "^1.8.0",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
"mapbox-gl": "^2.2.0",
|
||||
"mapbox-gl": "^2.3.0",
|
||||
"material-design-color": "^2.3.2",
|
||||
"minimatch": "^3.0.4",
|
||||
"moment": "^2.29.1",
|
||||
|
@ -62,70 +62,70 @@
|
|||
"react-dom": "^17.0.2",
|
||||
"react-easy-swipe": "^0.0.21",
|
||||
"react-tiny-oembed": "^1.0.1",
|
||||
"rxjs": "^7.0.0",
|
||||
"rxjs": "^7.1.0",
|
||||
"select2": "^4.0.13",
|
||||
"setimmediate": "^1.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@a2nt/image-sprite-webpack-plugin": "^0.2.5",
|
||||
"@babel/core": "^7.14.0",
|
||||
"@babel/eslint-parser": "^7.13.14",
|
||||
"@babel/plugin-proposal-class-properties": "^7.13.0",
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.13.8",
|
||||
"@babel/plugin-syntax-jsx": "^7.12.13",
|
||||
"@babel/plugin-syntax-top-level-await": "^7.12.13",
|
||||
"@babel/plugin-transform-react-jsx": "^7.13.12",
|
||||
"@babel/plugin-transform-runtime": "^7.13.15",
|
||||
"@babel/preset-env": "^7.14.0",
|
||||
"@babel/preset-react": "^7.13.13",
|
||||
"@babel/runtime": "^7.14.0",
|
||||
"@babel/core": "^7.14.6",
|
||||
"@babel/eslint-parser": "^7.14.5",
|
||||
"@babel/plugin-proposal-class-properties": "^7.14.5",
|
||||
"@babel/plugin-proposal-object-rest-spread": "^7.14.5",
|
||||
"@babel/plugin-syntax-jsx": "^7.14.5",
|
||||
"@babel/plugin-syntax-top-level-await": "^7.14.5",
|
||||
"@babel/plugin-transform-react-jsx": "^7.14.5",
|
||||
"@babel/plugin-transform-runtime": "^7.14.5",
|
||||
"@babel/preset-env": "^7.14.5",
|
||||
"@babel/preset-react": "^7.14.5",
|
||||
"@babel/runtime": "^7.14.6",
|
||||
"@googlemaps/markerclustererplus": "*",
|
||||
"@sucrase/webpack-loader": "^2.0.0",
|
||||
"@ungap/global-this": "^0.4.4",
|
||||
"@wry/context": "^0.6.0",
|
||||
"@wry/equality": "^0.4.0",
|
||||
"@wry/equality": "^0.5.1",
|
||||
"@wry/trie": "^0.3.0",
|
||||
"animate.css": "^4.1.1",
|
||||
"ansi-html": "^0.0.7",
|
||||
"ansi-regex": "^6.0.0",
|
||||
"autoprefixer": "^10.2.5",
|
||||
"autoprefixer": "^10.2.6",
|
||||
"babel-loader": "^8.2.2",
|
||||
"classnames": "^2.3.1",
|
||||
"copy-webpack-plugin": "^8.1.1",
|
||||
"copy-webpack-plugin": "^9.0.0",
|
||||
"croppie": "^2.6.5",
|
||||
"cross-env": "^7.0.3",
|
||||
"css-loader": "^5.2.4",
|
||||
"css-minimizer-webpack-plugin": "^2.0.0",
|
||||
"eslint": "^7.25.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"css-loader": "^5.2.6",
|
||||
"css-minimizer-webpack-plugin": "^3.0.1",
|
||||
"eslint": "^7.29.0",
|
||||
"eslint-plugin-import": "^2.23.4",
|
||||
"eslint-plugin-jquery": "^1.5.1",
|
||||
"eslint-plugin-react": "^7.23.2",
|
||||
"eslint-plugin-react": "^7.24.0",
|
||||
"events": "^3.3.0",
|
||||
"exif-js": "^2.3.0",
|
||||
"exports-loader": "^2.0.0",
|
||||
"exports-loader": "^3.0.0",
|
||||
"fast-json-stable-stringify": "^2.1.0",
|
||||
"fast-levenshtein": "^3.0.0",
|
||||
"fastest-levenshtein": "^1.0.12",
|
||||
"favicons": "^6.2.1",
|
||||
"favicons": "^6.2.2",
|
||||
"favicons-webpack-plugin": "^5.0.2",
|
||||
"file-loader": "^6.2.0",
|
||||
"graphql-tag": "^2.12.4",
|
||||
"hoist-non-react-statics": "^3.3.2",
|
||||
"html-dom-parser": "^1.0.0",
|
||||
"html-dom-parser": "^1.0.1",
|
||||
"html-entities": "^2.3.2",
|
||||
"html-loader": "^2.1.2",
|
||||
"html-react-parser": "^1.2.6",
|
||||
"html-react-parser": "^1.2.7",
|
||||
"html-webpack-plugin": "^5.3.1",
|
||||
"img-optimize-loader": "^1.0.7",
|
||||
"loglevel": "^1.7.1",
|
||||
"mini-css-extract-plugin": "^1.6.0",
|
||||
"msw": "^0.28.2",
|
||||
"msw": "^0.29.0",
|
||||
"node-fetch": "^2.6.1",
|
||||
"node-sass": "^5.0.0",
|
||||
"node-sass": "^6.0.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"optimism": "^0.15.0",
|
||||
"optimize-css-assets-webpack-plugin": "^5.0.4",
|
||||
"postcss-loader": "^5.2.0",
|
||||
"optimism": "^0.16.1",
|
||||
"optimize-css-assets-webpack-plugin": "^6.0.0",
|
||||
"postcss-loader": "^6.1.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"punycode": "^2.1.1",
|
||||
"querystring": "^0.2.1",
|
||||
|
@ -139,25 +139,25 @@
|
|||
"routie": "0.0.1",
|
||||
"sass-lint": "^1.13.1",
|
||||
"sass-lint-fix": "^1.12.1",
|
||||
"sass-loader": "^11.0.1",
|
||||
"sass-loader": "^12.1.0",
|
||||
"scheduler": "^0.20.2",
|
||||
"shallowequal": "^1.1.0",
|
||||
"strip-ansi": "^7.0.0",
|
||||
"style-loader": "^2.0.0",
|
||||
"sucrase": "^3.18.1",
|
||||
"sucrase": "^3.18.2",
|
||||
"svg-url-loader": "^7.1.1",
|
||||
"symbol-observable": "^4.0.0",
|
||||
"terser-webpack-plugin": "^5.1.1",
|
||||
"ts-invariant": "^0.7.3",
|
||||
"tslib": "^2.2.0",
|
||||
"terser-webpack-plugin": "^5.1.3",
|
||||
"ts-invariant": "^0.7.5",
|
||||
"tslib": "^2.3.0",
|
||||
"url": "^0.11.0",
|
||||
"url-loader": "^4.1.1",
|
||||
"webpack": "^5.36.2",
|
||||
"webpack-bundle-analyzer": "^4.4.1",
|
||||
"webpack-cli": "^4.6.0",
|
||||
"webpack-dev-server": "^4.0.0-beta.2",
|
||||
"webpack": "^5.39.1",
|
||||
"webpack-bundle-analyzer": "^4.4.2",
|
||||
"webpack-cli": "^4.7.2",
|
||||
"webpack-dev-server": "^4.0.0-beta.3",
|
||||
"webpack-manifest-plugin": "^3.1.1",
|
||||
"webpack-merge": "^5.7.3",
|
||||
"webpack-merge": "^5.8.0",
|
||||
"yarn": "^1.22.10",
|
||||
"zen-observable": "^0.8.15"
|
||||
},
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*/
|
||||
|
||||
const YML_PATH = '/app/_config/webpack.yml';
|
||||
const CONF_VAR = 'App\\Templates\\WebpackTemplateProvider';
|
||||
const CONF_VAR = 'A2nt\\CMSNiceties\\Templates\\WebpackTemplateProvider';
|
||||
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
@ -120,11 +120,6 @@ const _addAppFiles = (theme) => {
|
|||
|
||||
_addAppFiles(conf.APPDIR);
|
||||
|
||||
// remove some backend includes
|
||||
delete includes['app_editor'];
|
||||
delete includes['app_cms'];
|
||||
delete includes['app_order'];
|
||||
|
||||
// add themes
|
||||
themes.forEach((theme) => {
|
||||
_addAppFiles(theme);
|
||||
|
@ -152,7 +147,9 @@ module.exports = {
|
|||
react: require.resolve('react'),
|
||||
'react-dom': require.resolve('react-dom'),
|
||||
},
|
||||
fallback: { path: false },
|
||||
fallback: {
|
||||
path: false
|
||||
},
|
||||
},
|
||||
experiments: {
|
||||
topLevelAwait: true,
|
||||
|
|
Loading…
Reference in New Issue