mirror of
https://github.com/a2nt/silverstripe-webpack.git
synced 2024-10-22 17:05:31 +02:00
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'
|
||||
|
@ -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
|
||||
After:
|
||||
- a2nt-cms-niceties-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
|
||||
|
@ -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
|
||||
|
2
app/client/dist/css/app.css
vendored
2
app/client/dist/css/app.css
vendored
File diff suppressed because one or more lines are too long
1
app/client/dist/css/app_cms.css
vendored
Normal file
1
app/client/dist/css/app_cms.css
vendored
Normal file
@ -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}
|
1
app/client/dist/css/app_editor.css
vendored
Normal file
1
app/client/dist/css/app_editor.css
vendored
Normal file
@ -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}
|
1
app/client/dist/css/app_order.css
vendored
Normal file
1
app/client/dist/css/app_order.css
vendored
Normal file
@ -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}
|
2
app/client/dist/css/sample.css
vendored
2
app/client/dist/css/sample.css
vendored
File diff suppressed because one or more lines are too long
2
app/client/dist/js/app.js
vendored
2
app/client/dist/js/app.js
vendored
File diff suppressed because one or more lines are too long
0
app/client/dist/js/app_cms.js
vendored
Normal file
0
app/client/dist/js/app_cms.js
vendored
Normal file
0
app/client/dist/js/app_editor.js
vendored
Normal file
0
app/client/dist/js/app_editor.js
vendored
Normal file
0
app/client/dist/js/app_order.js
vendored
Normal file
0
app/client/dist/js/app_order.js
vendored
Normal file
2
app/client/dist/js/sample.js
vendored
2
app/client/dist/js/sample.js
vendored
File diff suppressed because one or more lines are too long
438
app/client/dist/records.json
vendored
438
app/client/dist/records.json
vendored
@ -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
|
||||
]
|
||||
}
|
||||
}
|
4
app/client/dist/report.html
vendored
4
app/client/dist/report.html
vendored
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
12
app/client/src/scss/_elements/_carousel.scss
Normal file
12
app/client/src/scss/_elements/_carousel.scss
Normal file
@ -0,0 +1,12 @@
|
||||
.carousel-caption {
|
||||
padding: 6rem 0;
|
||||
font-size: 3rem;
|
||||
|
||||
.carousel-title {
|
||||
font-size: 4rem;
|
||||
}
|
||||
|
||||
.carousel-content {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
2
app/client/src/scss/_elements/_index.scss
Normal file
2
app/client/src/scss/_elements/_index.scss
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
18
app/client/src/scss/_layout/_base.scss
Normal file
18
app/client/src/scss/_layout/_base.scss
Normal file
@ -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;
|
||||
}*/
|
31
app/client/src/scss/_layout/_footer.scss
Normal file
31
app/client/src/scss/_layout/_footer.scss
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
44
app/client/src/scss/_layout/_header.scss
Normal file
44
app/client/src/scss/_layout/_header.scss
Normal file
@ -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;
|
||||
}
|
||||
}
|
4
app/client/src/scss/_layout/_index.scss
Normal file
4
app/client/src/scss/_layout/_index.scss
Normal file
@ -0,0 +1,4 @@
|
||||
@import '_base';
|
||||
@import '_header';
|
||||
@import '_navigation';
|
||||
@import '_footer';
|
102
app/client/src/scss/_layout/_navigation.scss
Normal file
102
app/client/src/scss/_layout/_navigation.scss
Normal file
@ -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,5 +1,5 @@
|
||||
@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 {
|
||||
|
@ -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
|
||||
id="$Anchor"
|
||||
class="element $SimpleClassName.LowerCase
|
||||
<% if $LinkedElement %> $LinkedElement.SimpleClassName.LowerCase<% end_if %>
|
||||
<% if $StyleVariant %> $StyleVariant<% end_if %><% if $ExtraClass %> $ExtraClass<% 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,8 +52,7 @@
|
||||
"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"
|
||||
@ -65,9 +65,9 @@
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/a2nt/silverstripe-mapboxfield"
|
||||
}],
|
||||
"extra":
|
||||
{
|
||||
}
|
||||
],
|
||||
"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
Block a user