SS4.1 support

This commit is contained in:
Tony Air 2018-03-24 17:45:31 +07:00
parent 3571b920d0
commit 078c1d27ac
44 changed files with 8126 additions and 3983 deletions

9
.env.dist Executable file
View File

@ -0,0 +1,9 @@
SS_DATABASE_SERVER='localhost'
SS_DATABASE_USERNAME=''
SS_DATABASE_PASSWORD=''
SS_DATABASE_NAME=''
SS_DEFAULT_ADMIN_USERNAME=''
SS_DEFAULT_ADMIN_PASSWORD=''
SS_ENVIRONMENT_TYPE='dev'

View File

@ -1 +1 @@
/site/dist /site/client

17
.gitignore vendored
View File

@ -1,18 +1,11 @@
# START Do not modify the lines between here and #END, they will be regenerated by GitIgnoreEditor
/betternavigator /betternavigator
/cms
/debugbar
/framework
/ideannotator
/redirectedurls
/reports
/silverstripe-scaled-uploads
/silverstripe-version-truncator
/siteconfig
# END of GitIgnoreEditor
/.env
/node_modules /node_modules
/composer.lock /composer.lock
/yarn.lock /yarn.lock
/vendor /vendor
/site/dist /public/assets
/public/resources
/site/client
/silverstripe-cache

4
.idea/deployment.xml generated Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PublishConfigData" serverName="Research" />
</project>

View File

@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="ERROR" enabled_by_default="true" />
<inspection_tool class="Stylelint" enabled="true" level="ERROR" enabled_by_default="true" />
</profile>
</component>

6
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="JSX" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ss-webpack-boiler-plate.iml" filepath="$PROJECT_DIR$/.idea/ss-webpack-boiler-plate.iml" />
</modules>
</component>
</project>

90
.idea/php.xml generated Normal file
View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PhpIncludePathManager">
<include_path>
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
<path value="$PROJECT_DIR$/vendor/guzzlehttp/psr7" />
<path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
<path value="$PROJECT_DIR$/vendor/unclecheese/display-logic" />
<path value="$PROJECT_DIR$/vendor/composer" />
<path value="$PROJECT_DIR$/vendor/marcj/topsort" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
<path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
<path value="$PROJECT_DIR$/vendor/league/flysystem" />
<path value="$PROJECT_DIR$/vendor/symbiote/silverstripe-gridfieldextensions" />
<path value="$PROJECT_DIR$/vendor/undefinedoffset/sortablegridfield" />
<path value="$PROJECT_DIR$/vendor/m1/env" />
<path value="$PROJECT_DIR$/vendor/paragonie/random_compat" />
<path value="$PROJECT_DIR$/vendor/sheadawson/silverstripe-linkable" />
<path value="$PROJECT_DIR$/vendor/embed/embed" />
<path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
<path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/vendor/sebastian/environment" />
<path value="$PROJECT_DIR$/vendor/psr/http-message" />
<path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
<path value="$PROJECT_DIR$/vendor/psr/container" />
<path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
<path value="$PROJECT_DIR$/vendor/psr/log" />
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<path value="$PROJECT_DIR$/vendor/psr/cache" />
<path value="$PROJECT_DIR$/vendor/sebastian/resource-operations" />
<path value="$PROJECT_DIR$/vendor/sebastian/version" />
<path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
<path value="$PROJECT_DIR$/vendor/sebastian/diff" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-token-stream" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
<path value="$PROJECT_DIR$/vendor/monolog/monolog" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
<path value="$PROJECT_DIR$/vendor/intervention/image" />
<path value="$PROJECT_DIR$/vendor/phpunit/phpunit-mock-objects" />
<path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
<path value="$PROJECT_DIR$/vendor/dnadesign/silverstripe-elemental" />
<path value="$PROJECT_DIR$/vendor/phpspec/prophecy" />
<path value="$PROJECT_DIR$/vendor/silvershop/silverstripe-hasonefield" />
<path value="$PROJECT_DIR$/vendor/webonyx/graphql-php" />
<path value="$PROJECT_DIR$/vendor/silverstripe/reports" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recipe-core" />
<path value="$PROJECT_DIR$/vendor/symfony/cache" />
<path value="$PROJECT_DIR$/vendor/silverstripe/errorpage" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-apcu" />
<path value="$PROJECT_DIR$/vendor/silverstripe/siteconfig" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
<path value="$PROJECT_DIR$/vendor/silverstripe/cms" />
<path value="$PROJECT_DIR$/vendor/symfony/translation" />
<path value="$PROJECT_DIR$/vendor/silverstripe/segment-field" />
<path value="$PROJECT_DIR$/vendor/symfony/filesystem" />
<path value="$PROJECT_DIR$/vendor/silverstripe/campaign-admin" />
<path value="$PROJECT_DIR$/vendor/symfony/config" />
<path value="$PROJECT_DIR$/vendor/swiftmailer/swiftmailer" />
<path value="$PROJECT_DIR$/vendor/silverstripe/admin" />
<path value="$PROJECT_DIR$/vendor/symfony/finder" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recipe-cms" />
<path value="$PROJECT_DIR$/vendor/symfony/yaml" />
<path value="$PROJECT_DIR$/vendor/silverstripe/asset-admin" />
<path value="$PROJECT_DIR$/vendor/silverstripe/framework" />
<path value="$PROJECT_DIR$/vendor/silverstripe/assets" />
<path value="$PROJECT_DIR$/vendor/silverstripe/spamprotection" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recipe-plugin" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recaptcha" />
<path value="$PROJECT_DIR$/vendor/silverstripe/versioned" />
<path value="$PROJECT_DIR$/vendor/silverstripe/externallinks" />
<path value="$PROJECT_DIR$/vendor/silverstripe/userforms" />
<path value="$PROJECT_DIR$/vendor/silverstripe/graphql" />
<path value="$PROJECT_DIR$/vendor/silverstripe/vendor-plugin" />
<path value="$PROJECT_DIR$/vendor/wilr/silverstripe-googlesitemaps" />
<path value="$PROJECT_DIR$/vendor/silverstripe/config" />
</include_path>
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.1" />
<component name="PhpUnit">
<phpunit_settings>
<PhpUnitSettings load_method="CUSTOM_LOADER" custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" />
</phpunit_settings>
</component>
</project>

86
.idea/ss-webpack-boiler-plate.iml generated Normal file
View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dnadesign/silverstripe-elemental" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/embed/embed" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
<excludeFolder url="file://$MODULE_DIR$/vendor/intervention/image" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem" />
<excludeFolder url="file://$MODULE_DIR$/vendor/m1/env" />
<excludeFolder url="file://$MODULE_DIR$/vendor/marcj/topsort" />
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/random_compat" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpspec/prophecy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-token-stream" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit-mock-objects" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/simple-cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/diff" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-enumerator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/recursion-context" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/resource-operations" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sheadawson/silverstripe-linkable" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silvershop/silverstripe-hasonefield" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/admin" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/asset-admin" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/assets" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/campaign-admin" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/cms" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/config" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/errorpage" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/externallinks" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/framework" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/graphql" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/recaptcha" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/recipe-cms" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/recipe-core" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/recipe-plugin" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/reports" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/segment-field" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/siteconfig" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/spamprotection" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/userforms" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/vendor-plugin" />
<excludeFolder url="file://$MODULE_DIR$/vendor/silverstripe/versioned" />
<excludeFolder url="file://$MODULE_DIR$/vendor/swiftmailer/swiftmailer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symbiote/silverstripe-gridfieldextensions" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/config" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/filesystem" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-apcu" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/yaml" />
<excludeFolder url="file://$MODULE_DIR$/vendor/unclecheese/display-logic" />
<excludeFolder url="file://$MODULE_DIR$/vendor/undefinedoffset/sortablegridfield" />
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
<excludeFolder url="file://$MODULE_DIR$/vendor/webonyx/graphql-php" />
<excludeFolder url="file://$MODULE_DIR$/vendor/wilr/silverstripe-googlesitemaps" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

603
.idea/workspace.xml generated Normal file
View File

@ -0,0 +1,603 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="3f6401de-a140-484e-9b13-d08de67bdfe7" name="Default" comment="">
<change beforePath="" afterPath="$PROJECT_DIR$/.idea/php.xml" />
<change beforePath="$PROJECT_DIR$/.eslintignore" afterPath="$PROJECT_DIR$/.eslintignore" />
<change beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" />
<change beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" />
<change beforePath="$PROJECT_DIR$/browserconfig.xml" afterPath="$PROJECT_DIR$/browserconfig.xml" />
<change beforePath="$PROJECT_DIR$/cache.appcache" afterPath="$PROJECT_DIR$/cache.appcache" />
<change beforePath="$PROJECT_DIR$/composer.json" afterPath="$PROJECT_DIR$/composer.json" />
<change beforePath="$PROJECT_DIR$/manifest.json" afterPath="$PROJECT_DIR$/manifest.json" />
<change beforePath="$PROJECT_DIR$/package-lock.json" afterPath="$PROJECT_DIR$/package-lock.json" />
<change beforePath="$PROJECT_DIR$/package.json" afterPath="$PROJECT_DIR$/package.json" />
<change beforePath="$PROJECT_DIR$/phpcs.xml.dist" afterPath="" />
<change beforePath="$PROJECT_DIR$/site/_config/debugbar.yml" afterPath="" />
<change beforePath="$PROJECT_DIR$/site/_config/webpack.yml" afterPath="$PROJECT_DIR$/site/_config/webpack.yml" />
<change beforePath="$PROJECT_DIR$/site/code/DeferedRequirements.php" afterPath="" />
<change beforePath="$PROJECT_DIR$/site/code/WebpackTemplateProvider.php" afterPath="" />
<change beforePath="$PROJECT_DIR$/site/src/scss/_layout.scss" afterPath="$PROJECT_DIR$/site/src/scss/_layout.scss" />
<change beforePath="$PROJECT_DIR$/site/templates/Page.ss" afterPath="$PROJECT_DIR$/site/templates/Page.ss" />
<change beforePath="$PROJECT_DIR$/webpack.config.dev.js" afterPath="$PROJECT_DIR$/webpack.config.dev.js" />
<change beforePath="$PROJECT_DIR$/webpack.config.prod.js" afterPath="$PROJECT_DIR$/webpack.config.prod.js" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ComposerSettings" synchronizationState="SYNCHRONIZE">
<pharConfigPath>$PROJECT_DIR$/composer.json</pharConfigPath>
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="600">
<file leaf-file-name="GenericTemplateGlobalProvider.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/View/GenericTemplateGlobalProvider.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="348">
<caret line="12" column="21" lean-forward="false" selection-start-line="12" selection-start-column="21" selection-end-line="12" selection-end-column="21" />
<folding>
<element signature="e#37#81#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="WebpackTemplateProvider.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/site/code/templates/WebpackTemplateProvider.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="636">
<caret line="82" column="0" lean-forward="false" selection-start-line="82" selection-start-column="0" selection-end-line="82" selection-end-column="0" />
<folding>
<element signature="e#79#124#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="DeferedRequirements.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/site/code/templates/DeferedRequirements.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="957">
<caret line="48" column="0" lean-forward="false" selection-start-line="48" selection-start-column="0" selection-end-line="48" selection-end-column="0" />
<folding>
<element signature="e#7#52#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Page.ss" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/site/templates/Page.ss">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="609">
<caret line="21" column="40" lean-forward="false" selection-start-line="21" selection-start-column="40" selection-end-line="21" selection-end-column="40" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="app.scss" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/site/src/scss/app.scss">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="_layout.scss" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/site/src/scss/_layout.scss">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="58">
<caret line="2" column="3" lean-forward="false" selection-start-line="2" selection-start-column="3" selection-end-line="2" selection-end-column="3" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="webpack.config.dev.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/webpack.config.dev.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582">
<caret line="25" column="0" lean-forward="false" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="webpack.yml" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/site/_config/webpack.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="SimpleResourceURLGenerator.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/Control/SimpleResourceURLGenerator.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="346">
<caret line="138" column="89" lean-forward="false" selection-start-line="138" selection-start-column="12" selection-end-line="138" selection-end-column="89" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ResourceURLGenerator.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/Core/Manifest/ResourceURLGenerator.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="261">
<caret line="9" column="10" lean-forward="false" selection-start-line="9" selection-start-column="10" selection-end-line="9" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>SimpleResourceURLGenerato</find>
<find>config</find>
</findStrings>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/site/code/DeferedRequirements.php" />
<option value="$PROJECT_DIR$/site/code/WebpackTemplateProvider.php" />
<option value="$PROJECT_DIR$/site/code/templates/DeferedRequirements.php" />
<option value="$PROJECT_DIR$/site/src/scss/_layout.scss" />
<option value="$PROJECT_DIR$/webpack.config.dev.js" />
<option value="$PROJECT_DIR$/site/code/templates/WebpackTemplateProvider.php" />
<option value="$PROJECT_DIR$/site/templates/Page.ss" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER">
<package-json value="$PROJECT_DIR$/package.json" />
</component>
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="NodeModulesDirectoryManager">
<handled-path value="$PROJECT_DIR$/node_modules" />
</component>
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true">
<include_path>
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
<path value="$PROJECT_DIR$/vendor/guzzlehttp/psr7" />
<path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
<path value="$PROJECT_DIR$/vendor/unclecheese/display-logic" />
<path value="$PROJECT_DIR$/vendor/composer" />
<path value="$PROJECT_DIR$/vendor/marcj/topsort" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
<path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
<path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
<path value="$PROJECT_DIR$/vendor/league/flysystem" />
<path value="$PROJECT_DIR$/vendor/symbiote/silverstripe-gridfieldextensions" />
<path value="$PROJECT_DIR$/vendor/undefinedoffset/sortablegridfield" />
<path value="$PROJECT_DIR$/vendor/m1/env" />
<path value="$PROJECT_DIR$/vendor/paragonie/random_compat" />
<path value="$PROJECT_DIR$/vendor/sheadawson/silverstripe-linkable" />
<path value="$PROJECT_DIR$/vendor/embed/embed" />
<path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
<path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
<path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
<path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
<path value="$PROJECT_DIR$/vendor/sebastian/environment" />
<path value="$PROJECT_DIR$/vendor/psr/http-message" />
<path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
<path value="$PROJECT_DIR$/vendor/psr/container" />
<path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
<path value="$PROJECT_DIR$/vendor/psr/log" />
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<path value="$PROJECT_DIR$/vendor/psr/cache" />
<path value="$PROJECT_DIR$/vendor/sebastian/resource-operations" />
<path value="$PROJECT_DIR$/vendor/sebastian/version" />
<path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
<path value="$PROJECT_DIR$/vendor/sebastian/diff" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-token-stream" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
<path value="$PROJECT_DIR$/vendor/monolog/monolog" />
<path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
<path value="$PROJECT_DIR$/vendor/intervention/image" />
<path value="$PROJECT_DIR$/vendor/phpunit/phpunit-mock-objects" />
<path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
<path value="$PROJECT_DIR$/vendor/dnadesign/silverstripe-elemental" />
<path value="$PROJECT_DIR$/vendor/phpspec/prophecy" />
<path value="$PROJECT_DIR$/vendor/silvershop/silverstripe-hasonefield" />
<path value="$PROJECT_DIR$/vendor/webonyx/graphql-php" />
<path value="$PROJECT_DIR$/vendor/silverstripe/reports" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recipe-core" />
<path value="$PROJECT_DIR$/vendor/symfony/cache" />
<path value="$PROJECT_DIR$/vendor/silverstripe/errorpage" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-apcu" />
<path value="$PROJECT_DIR$/vendor/silverstripe/siteconfig" />
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
<path value="$PROJECT_DIR$/vendor/silverstripe/cms" />
<path value="$PROJECT_DIR$/vendor/symfony/translation" />
<path value="$PROJECT_DIR$/vendor/silverstripe/segment-field" />
<path value="$PROJECT_DIR$/vendor/symfony/filesystem" />
<path value="$PROJECT_DIR$/vendor/silverstripe/campaign-admin" />
<path value="$PROJECT_DIR$/vendor/symfony/config" />
<path value="$PROJECT_DIR$/vendor/swiftmailer/swiftmailer" />
<path value="$PROJECT_DIR$/vendor/silverstripe/admin" />
<path value="$PROJECT_DIR$/vendor/symfony/finder" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recipe-cms" />
<path value="$PROJECT_DIR$/vendor/symfony/yaml" />
<path value="$PROJECT_DIR$/vendor/silverstripe/asset-admin" />
<path value="$PROJECT_DIR$/vendor/silverstripe/framework" />
<path value="$PROJECT_DIR$/vendor/silverstripe/assets" />
<path value="$PROJECT_DIR$/vendor/silverstripe/spamprotection" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recipe-plugin" />
<path value="$PROJECT_DIR$/vendor/silverstripe/recaptcha" />
<path value="$PROJECT_DIR$/vendor/silverstripe/versioned" />
<path value="$PROJECT_DIR$/vendor/silverstripe/externallinks" />
<path value="$PROJECT_DIR$/vendor/silverstripe/userforms" />
<path value="$PROJECT_DIR$/vendor/silverstripe/graphql" />
<path value="$PROJECT_DIR$/vendor/silverstripe/vendor-plugin" />
<path value="$PROJECT_DIR$/vendor/wilr/silverstripe-googlesitemaps" />
<path value="$PROJECT_DIR$/vendor/silverstripe/config" />
</include_path>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="y" value="14" />
<option name="width" value="3200" />
<option name="height" value="1786" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource ProjectPane="true" />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scratches" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="site" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="site" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="_config" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="site" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="code" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="site" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="code" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="templates" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="site" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="src" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="site" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="src" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="scss" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="ss-webpack-boiler-plate" type="b2602c69:ProjectViewProjectNode" />
<item name="ss-webpack-boiler-plate" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="site" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="templates" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
</expand>
<select />
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="settings.editor.selected.configurable" value="configurable.group.appearance" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="node.js.path.for.package.eslint" value="project" />
<property name="node.js.detected.package.eslint" value="true" />
<property name="node.js.selected.package.eslint" value="$PROJECT_DIR$/node_modules/eslint" />
<property name="node.js.path.for.package.stylelint" value="project" />
<property name="node.js.detected.package.stylelint" value="true" />
<property name="node.js.selected.package.stylelint" value="" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="3f6401de-a140-484e-9b13-d08de67bdfe7" name="Default" comment="" />
<created>1521879376520</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1521879376520</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="0" y="14" width="3200" height="1908" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Scheme.REPL" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="1" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/site/code/DeferedRequirements.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.eslintrc">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-522">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/View/TemplateParser.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/View/SSTemplateParser.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-348">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/View/SSViewer.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-870">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/View/TemplateGlobalProvider.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="261">
<caret line="9" column="3" lean-forward="true" selection-start-line="10" selection-start-column="10" selection-end-line="10" selection-end-column="32" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/code/DeferedRequirements.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="29">
<caret line="1" column="0" lean-forward="true" selection-start-line="1" selection-start-column="0" selection-end-line="6" selection-end-column="61" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/code/WebpackTemplateProvider.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="203">
<caret line="9" column="36" lean-forward="false" selection-start-line="9" selection-start-column="36" selection-end-line="9" selection-end-column="36" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/code/Page.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="145">
<caret line="5" column="0" lean-forward="true" selection-start-line="5" selection-start-column="0" selection-end-line="5" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/code/PageController.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/View/GenericTemplateGlobalProvider.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="348">
<caret line="12" column="21" lean-forward="false" selection-start-line="12" selection-start-column="21" selection-end-line="12" selection-end-column="21" />
<folding>
<element signature="e#37#81#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/Core/Manifest/ResourceURLGenerator.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="261">
<caret line="9" column="10" lean-forward="false" selection-start-line="9" selection-start-column="10" selection-end-line="9" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vendor/silverstripe/framework/src/Control/SimpleResourceURLGenerator.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="346">
<caret line="138" column="89" lean-forward="false" selection-start-line="138" selection-start-column="12" selection-end-line="138" selection-end-column="89" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webpack.config.prod.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="754">
<caret line="26" column="28" lean-forward="true" selection-start-line="26" selection-start-column="28" selection-end-line="26" selection-end-column="28" />
<folding>
<element signature="n#!!doc" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webpack.configuration.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="n#!!doc" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/_config/webpack.yml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/src/scss/app.scss">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/src/scss/_layout.scss">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="58">
<caret line="2" column="3" lean-forward="false" selection-start-line="2" selection-start-column="3" selection-end-line="2" selection-end-column="3" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/webpack.config.dev.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="582">
<caret line="25" column="0" lean-forward="false" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
<folding>
<element signature="n#!!doc" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/code/templates/DeferedRequirements.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="957">
<caret line="48" column="0" lean-forward="false" selection-start-line="48" selection-start-column="0" selection-end-line="48" selection-end-column="0" />
<folding>
<element signature="e#7#52#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/code/templates/WebpackTemplateProvider.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="636">
<caret line="82" column="0" lean-forward="false" selection-start-line="82" selection-start-column="0" selection-end-line="82" selection-end-column="0" />
<folding>
<element signature="e#79#124#0#PHP" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/site/templates/Page.ss">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="609">
<caret line="21" column="40" lean-forward="false" selection-start-line="21" selection-start-column="40" selection-end-line="21" selection-end-column="40" />
<folding />
</state>
</provider>
</entry>
</component>
</project>

View File

@ -8,8 +8,8 @@ Checkout files at /site/ folder for details
+ You can use /site/_config/webpack.yml to setup webpack server parameters which will be used by webpack server and by SilverStripe to serve static content + You can use /site/_config/webpack.yml to setup webpack server parameters which will be used by webpack server and by SilverStripe to serve static content
+ You can use WebpackJS('file-name') and WebpackCSS('file-name') functions at templates to require JS and CSS. It will be served using static files or by using Webpack if the website in development mode and Webpack server is running + You can use WebpackJS('file-name') and WebpackCSS('file-name') functions at templates to require JS and CSS. It will be served using static files or by using Webpack if the website in development mode and Webpack server is running
+ WebpackTemplateProvider::WebpackJS('file-name') and WebpackTemplateProvider::WebpackCSS('file-name') can be used at php area + WebpackTemplateProvider::WebpackJS('file-name') and WebpackTemplateProvider::WebpackCSS('file-name') can be used at php area
+ All images will be optimised at /site/src/img and will be written to /site/dist/img (by default) + All images will be optimised at /site/src/img and will be written to /site/client/img (by default)
+ Favicons will be generated at /site/dist/icons using /site/src/favicon.png + Favicons will be generated at /site/client/icons using /site/src/favicon.png
+ Folder /site/src/js/types is used to create page specific JS (just create JS file there and it will be compiled) + Folder /site/src/js/types is used to create page specific JS (just create JS file there and it will be compiled)
+ Folder /site/src/scss/types is used to create page specific CSS (just create SCSS file there and it will be compiled) + Folder /site/src/scss/types is used to create page specific CSS (just create SCSS file there and it will be compiled)
+ Automatic linting (JS+SCSS) + Automatic linting (JS+SCSS)
@ -25,7 +25,7 @@ Checkout files at /site/ folder for details
+ /site/code/DeferedRequirements.php (Deferred Requirements + Requirements auto-loader) + /site/code/DeferedRequirements.php (Deferred Requirements + Requirements auto-loader)
+ /site/templates/Page.ss (An example Page.ss) + /site/templates/Page.ss (An example Page.ss)
+ /site/src (Your sources) + /site/src (Your sources)
+ /site/dist (Your production assets) + /site/client (Your production assets)

View File

@ -2,10 +2,10 @@
<browserconfig> <browserconfig>
<msapplication> <msapplication>
<tile> <tile>
<square70x70logo src="/site/dist/icons/mstile-70x70.png"/> <square70x70logo src="/resources/site/client/icons/mstile-70x70.png"/>
<square150x150logo src="/site/dist/icons/mstile-150x150.png"/> <square150x150logo src="/resources/site/client/icons/mstile-150x150.png"/>
<wide310x150logo src="/site/dist/icons/mstile-310x150.png"/> <wide310x150logo src="/resources/site/client/icons/mstile-310x150.png"/>
<square310x310logo src="/site/dist/icons/mstile-310x310.png"/> <square310x310logo src="/resources/site/client/icons/mstile-310x310.png"/>
<TileColor>#000</TileColor> <TileColor>#000</TileColor>
</tile> </tile>
</msapplication> </msapplication>

View File

@ -2,9 +2,9 @@ CACHE MANIFEST
FALLBACK: FALLBACK:
/ /
/site/dist/css/app.css /resources/site/client/css/app.css
/site/dist/img/logo.png /resources/site/client/img/logo.png
/site/dist/img/fonts/fontawesome-webfont.woff2?v=4.7.0 /resources/site/client/img/fonts/fontawesome-webfont.woff2?v=4.7.0
/site/dist/img/fonts/fontawesome-webfont.woff?v=4.7.0 /resources/site/client/img/fonts/fontawesome-webfont.woff?v=4.7.0
/site/dist/img/fonts/fontawesome-webfont.ttf?v=4.7.0 /resources/site/client/img/fonts/fontawesome-webfont.ttf?v=4.7.0
/site/dist/js/app.js /resources/site/client/js/app.js

View File

@ -1,32 +1,49 @@
{ {
"name": "a2nt/silverstripe-webpack", "name": "silverstripe/installer",
"description": "The SilverStripe webpack boilerplate", "type": "silverstripe-recipe",
"description": "The SilverStripe Framework Installer",
"require": { "require": {
"php": ">=5.5.0", "php": ">=7.1.0",
"silverstripe/cms": "*", "silverstripe/recipe-cms": "1.1",
"silverstripe/framework": "3.7.x-dev", "wilr/silverstripe-googlesitemaps": "dev-master",
"silverstripe/redirectedurls": "*", "silverstripe/userforms": "dev-master",
"axllent/silverstripe-scaled-uploads": "*", "undefinedoffset/sortablegridfield": "dev-master",
"silvershop/silverstripe-hasonefield": "dev-master",
"silverstripe/spamprotection": "dev-master",
"silverstripe/recaptcha": "dev-master",
"jonom/silverstripe-betternavigator": "*", "jonom/silverstripe-betternavigator": "*",
"axllent/silverstripe-version-truncator": "*" "dnadesign/silverstripe-elemental": "^2.0",
"sheadawson/silverstripe-linkable": "dev-master",
"silverstripe/externallinks": "^2.0"
}, },
"require-dev": { "require-dev": {
"phpunit/PHPUnit": "~3.7", "phpunit/phpunit": "^5.7"
"gdmedia/ss-auto-git-ignore": "^1.0",
"axyr/silverstripe-ideannotator": "dev-master",
"lekoala/silverstripe-debugbar": "^1.0"
},
"scripts": {
"post-update-cmd": "GDM\\SSAutoGitIgnore\\UpdateScript::Go"
},
"config": {
"process-timeout": 600,
"discard-changes": true
}, },
"extra": { "extra": {
"branch-alias": { "expose": [
"3.x-dev": "3.6.x-dev" "betternavigator/css",
} "betternavigator/javascript",
"betternavigator/images",
"site/client"
],
"project-files-installed": [
"mysite/.htaccess",
"mysite/_config.php",
"mysite/_config/mysite.yml",
"mysite/code/Page.php",
"mysite/code/PageController.php"
],
"public-files-installed": [
".htaccess",
"index.php",
"install-frameworkmissing.html",
"install.php",
"web.config"
]
}, },
"config": {
"process-timeout": 600
},
"prefer-stable": true,
"minimum-stability": "dev" "minimum-stability": "dev"
} }

View File

@ -10,39 +10,39 @@
"theme_color": "#000000", "theme_color": "#000000",
"background_color": "#000000", "background_color": "#000000",
"icons": [{ "icons": [{
"src": "/dist/icons/android-chrome-36x36.png", "src": "/resources/site/client/icons/android-chrome-36x36.png",
"sizes": "36x36", "sizes": "36x36",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-48x48.png", "src": "/resources/site/client/icons/android-chrome-48x48.png",
"sizes": "48x48", "sizes": "48x48",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-72x72.png", "src": "/resources/site/client/icons/android-chrome-72x72.png",
"sizes": "72x72", "sizes": "72x72",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-96x96.png", "src": "/resources/site/client/icons/android-chrome-96x96.png",
"sizes": "96x96", "sizes": "96x96",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-144x144.png", "src": "/resources/site/client/icons/android-chrome-144x144.png",
"sizes": "144x144", "sizes": "144x144",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-192x192.png", "src": "/resources/site/client/icons/android-chrome-192x192.png",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-256x256.png", "src": "/resources/site/client/icons/android-chrome-256x256.png",
"sizes": "256x256", "sizes": "256x256",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-384x384.png", "src": "/resources/site/client/icons/android-chrome-384x384.png",
"sizes": "384x384", "sizes": "384x384",
"type": "image/png" "type": "image/png"
}, { }, {
"src": "/dist/icons/android-chrome-512x512.png", "src": "/resources/site/client/icons/android-chrome-512x512.png",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png" "type": "image/png"
}] }]

10785
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -26,12 +26,15 @@
"bootbox.js": "makeusabrew/bootbox#*", "bootbox.js": "makeusabrew/bootbox#*",
"bootstrap": "^4.0.0", "bootstrap": "^4.0.0",
"bootstrap-offcanvas": "^1.0.0", "bootstrap-offcanvas": "^1.0.0",
"core-util-is": "^1.0.2",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"foundation-emails": "zurb/foundation-emails#*", "foundation-emails": "zurb/foundation-emails#*",
"jquery": "^3.3.1", "jquery": "^3.3.1",
"jquery-hammerjs": "^2.0.0", "jquery-hammerjs": "^2.0.0",
"npm": "^5.8.0",
"offcanvas-bootstrap": "^2.5.2", "offcanvas-bootstrap": "^2.5.2",
"popper.js": "^1.12.9" "popper.js": "^1.12.9",
"yarn": "^1.5.1"
}, },
"devDependencies": { "devDependencies": {
"animate.css": "^3.5.2", "animate.css": "^3.5.2",
@ -62,7 +65,7 @@
"lost": "^8.2.0", "lost": "^8.2.0",
"node-sass": "^4.7.2", "node-sass": "^4.7.2",
"object-assign": "^4.1.1", "object-assign": "^4.1.1",
"optimize-css-assets-webpack-plugin": "^3.2.0", "optimize-css-assets-webpack-plugin": "^4.0.0",
"postcss-loader": "^2.0.10", "postcss-loader": "^2.0.10",
"react": "^16.2.0", "react": "^16.2.0",
"react-dom": "^16.2.0", "react-dom": "^16.2.0",
@ -80,7 +83,6 @@
"uglifyjs-webpack-plugin": "^1.1.6", "uglifyjs-webpack-plugin": "^1.1.6",
"url-loader": "^0.6.2", "url-loader": "^0.6.2",
"webpack": "^3.8.1", "webpack": "^3.8.1",
"webpack-dashboard": "^1.1.1",
"webpack-dev-server": "^2.11.1", "webpack-dev-server": "^2.11.1",
"webpack-manifest-plugin": "^1.3.2", "webpack-manifest-plugin": "^1.3.2",
"webpack-merge": "^4.1.1" "webpack-merge": "^4.1.1"

View File

@ -1,25 +0,0 @@
<?xml version="1.0"?>
<ruleset name="SS3">
<description>Coding standard for SilverStripe 3.x</description>
<!-- Don't sniff third party libraries -->
<exclude-pattern>*/vendor/*</exclude-pattern>
<exclude-pattern>*/thirdparty/*</exclude-pattern>
<exclude-pattern>*/node_modules/*</exclude-pattern>
<!-- Show progress and output sniff names on violation, and add colours -->
<arg value="sp"/>
<arg name="colors"/>
<!-- Use PSR-2 as a base standard -->
<rule ref="PSR2">
<!-- Allow classes to not declare a namespace -->
<exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>
<!-- Allow underscores in class names -->
<exclude name="Squiz.Classes.ValidClassName.NotCamelCaps"/>
<!-- Allow non camel cased method names -->
<exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps"/>
</rule>
</ruleset>

54
public/.htaccess Executable file
View File

@ -0,0 +1,54 @@
### SILVERSTRIPE START ###
# Deny access to templates (but allow from localhost)
<Files *.ss>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>
# Deny access to IIS configuration
<Files web.config>
Order deny,allow
Deny from all
</Files>
# Deny access to YAML configuration files which might include sensitive information
<Files ~ "\.ya?ml$">
Order allow,deny
Deny from all
</Files>
# Route errors to static pages automatically generated by SilverStripe
ErrorDocument 404 /assets/error-404.html
ErrorDocument 500 /assets/error-500.html
<IfModule mod_rewrite.c>
# Turn off index.php handling requests to the homepage fixes issue in apache >=2.4
<IfModule mod_dir.c>
DirectoryIndex disabled
DirectorySlash On
</IfModule>
SetEnv HTTP_MOD_REWRITE On
RewriteEngine On
# Enable HTTP Basic authentication workaround for PHP running in CGI mode
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Deny access to potentially sensitive files and folders
RewriteRule ^vendor(/|$) - [F,L,NC]
RewriteRule ^\.env - [F,L,NC]
RewriteRule silverstripe-cache(/|$) - [F,L,NC]
RewriteRule composer\.(json|lock) - [F,L,NC]
RewriteRule (error|silverstripe|debug)\.log - [F,L,NC]
# Process through SilverStripe if no file with the requested name exists.
# Pass through the original path as a query parameter, and retain the existing parameters.
# Try finding framework in the vendor folder first
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php
</IfModule>
### SILVERSTRIPE END ###

27
public/index.php Executable file
View File

@ -0,0 +1,27 @@
<?php
use SilverStripe\Control\HTTPApplication;
use SilverStripe\Control\HTTPRequestBuilder;
use SilverStripe\Core\CoreKernel;
use SilverStripe\Core\Startup\ErrorControlChainMiddleware;
// Find autoload.php
if (file_exists(__DIR__ . '/../vendor/autoload.php')) {
require __DIR__ . '/../vendor/autoload.php';
} elseif (file_exists(__DIR__ . '/vendor/autoload.php')) {
require __DIR__ . '/vendor/autoload.php';
} else {
header('HTTP/1.1 500 Internal Server Error');
echo "autoload.php not found";
exit(1);
}
// Build request and detect flush
$request = HTTPRequestBuilder::createFromEnvironment();
// Default application
$kernel = new CoreKernel(BASE_PATH);
$app = new HTTPApplication($kernel);
$app->addMiddleware(new ErrorControlChainMiddleware($app));
$response = $app->handle($request);
$response->output();

19
public/web.config Executable file
View File

@ -0,0 +1,19 @@
<!-- Routing configuration for Microsoft IIS web server -->
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment=".env" />
<add segment="silverstripe-cache" />
<add segment="composer.json" />
<add segment="composer.lock" />
</hiddenSegments>
<fileExtensions allowUnlisted="true" >
<add fileExtension=".ss" allowed="false"/>
<add fileExtension=".yml" allowed="false"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>

3
site/.htaccess Executable file
View File

@ -0,0 +1,3 @@
<FilesMatch "\.(php|php3|php4|php5|phtml|inc)$">
Deny from all
</FilesMatch>

1
site/_config.php Executable file
View File

@ -0,0 +1 @@
<?php

2
site/_config/config.yml Executable file
View File

@ -0,0 +1,2 @@
SilverStripe\View\SSViewer:
source_file_comments: true

View File

@ -1,7 +0,0 @@
---
Name: sitedebugbar
After:
- 'debugbar'
---
DebugBar:
include_jquery: false

3
site/_config/elements.yml Executable file
View File

@ -0,0 +1,3 @@
Page:
extensions:
- DNADesign\Elemental\Extensions\ElementalPageExtension

3
site/_config/extensions.yml Executable file
View File

@ -0,0 +1,3 @@
SilverStripe\SiteConfig\SiteConfig:
extensions:
- SiteConfigExtension

View File

@ -4,7 +4,7 @@
WebpackTemplateProvider: WebpackTemplateProvider:
SRC: site/src SRC: site/src
DIST: site/dist DIST: site/client
HOSTNAME: localhost HOSTNAME: localhost
PORT: "3000" PORT: "3000"
TYPESJS: site/src/js/types TYPESJS: site/src/js/types

View File

@ -0,0 +1,40 @@
<?php
use SilverStripe\ORM\DataExtension;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TreeMultiselectField;
use Sheadawson\Linkable\Models\Link;
use SilverStripe\Forms\TextField;
use Sheadawson\Linkable\Forms\LinkField;
class SiteConfigExtension extends DataExtension
{
private static $db = [
'Address' => 'Varchar(255)',
];
private static $has_one = [
'PhoneNumber' => Link::class
];
private static $many_many = [
'Navigation' => SiteTree::class
];
public function updateCMSFields(FieldList $fields)
{
$tab = $fields->findOrMakeTab('Root.Main');
$tab->push(TreeMultiselectField::create(
'Navigation',
'Navigation',
SiteTree::class
));
$tab->push(
LinkField::create('PhoneNumberID', 'Phone Number')
->setAllowedTypes(['Phone'])
);
$tab->push(TextField::create('Address'));
}
}

5
site/code/pages/HomePage.php Executable file
View File

@ -0,0 +1,5 @@
<?php
class HomePage extends Page
{
}

View File

@ -0,0 +1,5 @@
<?php
class HomePageController extends PageController
{
}

7
site/code/pages/Page.php Executable file
View File

@ -0,0 +1,7 @@
<?php
use SilverStripe\CMS\Model\SiteTree;
class Page extends SiteTree
{
}

View File

@ -0,0 +1,7 @@
<?php
use SilverStripe\CMS\Controllers\ContentController;
class PageController extends ContentController
{
}

View File

@ -1,6 +1,13 @@
<?php <?php
class DeferedRequirements extends Object implements TemplateGlobalProvider { use SilverStripe\View\TemplateGlobalProvider;
use SilverStripe\View\Requirements;
use SilverStripe\Core\Config\Config;
use SilverStripe\Control\Director;
use SilverStripe\Core\Path;
use SilverStripe\Core\Manifest\ManifestFileFinder;
class DeferedRequirements implements TemplateGlobalProvider {
private static $css = []; private static $css = [];
private static $js = []; private static $js = [];
@ -33,13 +40,19 @@ class DeferedRequirements extends Object implements TemplateGlobalProvider {
DeferedRequirements::loadJS('//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'); DeferedRequirements::loadJS('//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js');
// App libs // App libs
DeferedRequirements::loadJS(project().'/dist/js/app.js'); DeferedRequirements::loadCSS('app.css');
DeferedRequirements::loadCSS(project().'/dist/css/app.css'); DeferedRequirements::loadJS('app.js');
// Class libs // Class libs
if($class) { if($class) {
DeferedRequirements::loadJS(project() . '/dist/js/' . $class . '.js'); $dir = Path::join(Director::publicFolder(), ManifestFileFinder::RESOURCES_DIR);
DeferedRequirements::loadCSS(project() . '/dist/css/' . $class . '.css');
if(file_exists(Path::join($dir,$class . '.js'))) {
DeferedRequirements::loadJS($class . '.js');
}
if(file_exists(Path::join($dir,$class . '.css'))) {
DeferedRequirements::loadCSS($class . '.css');
}
} }
return self::forTemplate(); return self::forTemplate();

View File

@ -4,7 +4,13 @@
* Directs assets requests to Webpack server or to static files * Directs assets requests to Webpack server or to static files
*/ */
class WebpackTemplateProvider extends Object implements TemplateGlobalProvider 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 * @var int port number
@ -58,10 +64,9 @@ class WebpackTemplateProvider extends Object implements TemplateGlobalProvider
*/ */
public static function isActive() public static function isActive()
{ {
$class = __CLASS__;
return Director::isDev() && !!@fsockopen( return Director::isDev() && !!@fsockopen(
$class::config()->get('HOSTNAME'), Config::inst()->get(__CLASS__,'HOSTNAME'),
$class::config()->get('PORT') Config::inst()->get(__CLASS__,'PORT')
); );
} }
@ -74,22 +79,22 @@ class WebpackTemplateProvider extends Object implements TemplateGlobalProvider
protected static function _toDevServerPath($path) protected static function _toDevServerPath($path)
{ {
$class = __CLASS__; $path = stripos($path,'css') ? 'site/client/css/'.$path : 'site/client/js/'.$path;
return sprintf( return sprintf(
'%s%s:%s/%s', '%s%s:%s/%s',
Director::protocol(), Director::protocol(),
$class::config()->get('HOSTNAME'), Config::inst()->get(__CLASS__,'HOSTNAME'),
$class::config()->get('PORT'), Config::inst()->get(__CLASS__,'PORT'),
basename($path) basename($path)
); );
} }
protected static function _toPublicPath($path) protected static function _toPublicPath($path)
{ {
$class = __CLASS__;
return strpos($path,'//') === false ? return strpos($path,'//') === false ?
Controller::join_links( Controller::join_links(
$class::config()->get('DIST'), Config::inst()->get(__CLASS__,'DIST'),
(strpos($path,'.css') ? 'css' : 'js' ), (strpos($path,'.css') ? 'css' : 'js' ),
$path $path
) )

View File

@ -1,7 +1,3 @@
/** /**
* Your custom style * Your custom style
*/ */
html,body {
background:#000;
}

View File

@ -0,0 +1,14 @@
<div class="page-content">
<h1 class="page-header">$Title</h1>
<div class="page-content">
$ElementalArea
<% if $Form %>
<div class="container">
$Form
</div>
<% end_if %>
</div>
</div>

39
site/templates/Includes/Head.ss Executable file
View File

@ -0,0 +1,39 @@
<% base_tag %>
$MetaTags
<meta name="theme-color" content="#000000" />
<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" />
<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}{$Project}/dist/icons/favicon.ico" />
<link rel="icon" sizes="144x144" type="image/png" href="{$AbsoluteBaseURL}{$Project}/dist/icons/android-chrome-144x144.png" />
<link rel="apple-touch-icon" href="{$AbsoluteBaseURL}{$Project}/dist/icons/apple-touch-icon.png" />
<link rel="apple-touch-icon-precomposed" href="{$AbsoluteBaseURL}{$Project}/dist/icons/apple-touch-icon-precomposed.png" />
<link rel="manifest" href="/manifest.webmanifest" />
<meta name="application-name" content="{$SiteConfig.Title}" />
<meta name="msapplication-TileImage" content="{$AbsoluteBaseURL}{$Project}/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" />
<% include Prestyling %>

View File

@ -0,0 +1 @@
<% include Content %>

3
site/templates/Layout/Page.ss Executable file
View File

@ -0,0 +1,3 @@
<div id="PageContainer" class="page{$ClassName} action{$Action}">
<% include Content %>
</div>

View File

@ -2,47 +2,9 @@
<html lang="$ContentLocale.ATT" dir="$i18nScriptDirection.ATT"> <html lang="$ContentLocale.ATT" dir="$i18nScriptDirection.ATT">
<%-- manifest="/cache.appcache" --%> <%-- manifest="/cache.appcache" --%>
<head> <head>
$MetaTags <% include Head %>
<meta name="theme-color" content="#000000" />
<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" />
<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" />
<% base_tag %>
<link rel="shortcut icon" type="image/x-icon" href="{$AbsoluteBaseURL}{$Project}/dist/icons/favicon.ico" />
<link rel="icon" sizes="144x144" type="image/png" href="{$AbsoluteBaseURL}{$Project}/dist/icons/android-chrome-144x144.png" />
<link rel="apple-touch-icon" href="{$AbsoluteBaseURL}{$Project}/dist/icons/apple-touch-icon.png" />
<link rel="apple-touch-icon-precomposed" href="{$AbsoluteBaseURL}{$Project}/dist/icons/apple-touch-icon-precomposed.png" />
<link rel="manifest" href="/manifest.webmanifest" />
<meta name="application-name" content="{$SiteConfig.Title}" />
<meta name="msapplication-TileImage" content="{$AbsoluteBaseURL}{$Project}/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" />
<% include Prestyling %>
</head> </head>
<body oncontextmenu="return false;"> <body oncontextmenu="return false;">
<%-- Upgrade your Browser notice --%> <%-- 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]--> <!--[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]-->
@ -69,8 +31,6 @@
$BetterNavigator $BetterNavigator
</div> </div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" crossorigin="anonymous"></script>
<%-- Require CSS+JS from /site/dist/[js,css]/[ClassName].[js,css] --%> <%-- Require CSS+JS from /site/dist/[js,css]/[ClassName].[js,css] --%>
$AutoRequirements($ClassName).RAW $AutoRequirements($ClassName).RAW
</body> </body>

View File

@ -19,7 +19,7 @@ const config = merge.strategy({
entry: { entry: {
app: [ app: [
'react-hot-loader/patch', 'react-hot-loader/patch',
'webpack-dev-server/client?https://' + conf.HOSTNAME + ':' + conf.PORT + '/', 'webpack-dev-server/client?https://' + conf.HOSTNAME + ':' + conf.PORT + '/public/resourses/site',
'webpack/hot/only-dev-server', 'webpack/hot/only-dev-server',
] ]
}, },

View File

@ -11,7 +11,7 @@ const path = require('path');
const autoprefixer = require('autoprefixer'); const autoprefixer = require('autoprefixer');
const ExtractTextPlugin = require("extract-text-webpack-plugin"); const ExtractTextPlugin = require("extract-text-webpack-plugin");
const OptimizeCSSAssets = require('optimize-css-assets-webpack-plugin'); //const OptimizeCSSAssets = require('optimize-css-assets-webpack-plugin');
const FaviconsWebpackPlugin = require("favicons-webpack-plugin"); const FaviconsWebpackPlugin = require("favicons-webpack-plugin");
module.exports = merge(common, { module.exports = merge(common, {
@ -89,7 +89,7 @@ module.exports = merge(common, {
filename: 'css/[name].css', filename: 'css/[name].css',
allChunks: true allChunks: true
}), }),
new OptimizeCSSAssets(), //new OptimizeCSSAssets(),
new FaviconsWebpackPlugin({ new FaviconsWebpackPlugin({
logo: path.join(__dirname, conf.SRC) + '/favicon.png', logo: path.join(__dirname, conf.SRC) + '/favicon.png',
prefix: '/icons/', prefix: '/icons/',