mirror of
https://github.com/a2nt/silverstripe-webpack.git
synced 2024-10-22 17:05:31 +02:00
Minor improvements
This commit is contained in:
parent
89dd041d34
commit
c2409e9da0
@ -4,5 +4,5 @@ Name: 'webapp-columns'
|
||||
|
||||
Site\Extensions\ElementRows:
|
||||
container_max_width: 1140
|
||||
column_class: 'col-block col-md-'
|
||||
column_class: 'col-block col-md'
|
||||
|
||||
|
@ -22,3 +22,8 @@ SilverStripe\Admin\LeftAndMain:
|
||||
SilverStripe\Forms\HTMLEditor\TinyMCEConfig:
|
||||
editor_css:
|
||||
- 'app/client/dist/css/app_editor.css'
|
||||
|
||||
# Secure cookies
|
||||
SilverStripe\Control\Session:
|
||||
cookie_secure: true
|
||||
strict_user_agent_check: false
|
||||
|
@ -24,8 +24,9 @@ SilverStripe\CMS\Model\SiteTree:
|
||||
- Dynamic\Elements\Blog\Elements\ElementBlogPosts
|
||||
- Dynamic\Elements\Oembed\Elements\ElementOembed
|
||||
- Dynamic\Elements\Elements\ElementTestimonials
|
||||
- Site\Elements\TeamMembersElement
|
||||
#- Site\Elements\TeamMembersElement
|
||||
- Site\Elements\SliderElement
|
||||
- Site\Elements\BlockElement
|
||||
- DNADesign\ElementalVirtual\Model\ElementVirtual
|
||||
|
||||
DNADesign\ElementalList\Model\ElementList:
|
||||
@ -39,8 +40,9 @@ DNADesign\ElementalList\Model\ElementList:
|
||||
- Dynamic\Elements\Blog\Elements\ElementBlogPosts
|
||||
- Dynamic\Elements\Oembed\Elements\ElementOembed
|
||||
- Dynamic\Elements\Elements\ElementTestimonials
|
||||
- Site\Elements\TeamMembersElement
|
||||
#- Site\Elements\TeamMembersElement
|
||||
- Site\Elements\SliderElement
|
||||
- Site\Elements\BlockElement
|
||||
styles:
|
||||
whiteframe: 'White Frame'
|
||||
greybg: 'Grey Background'
|
||||
|
@ -10,6 +10,7 @@ SilverStripe\Admin\LeftAndMain:
|
||||
SilverStripe\SiteConfig\SiteConfig:
|
||||
extensions:
|
||||
- Site\Extensions\SiteConfigExtension
|
||||
- Site\Extensions\SocialExtension
|
||||
|
||||
SilverStripe\CMS\Model\SiteTree:
|
||||
extensions:
|
||||
|
@ -7,3 +7,7 @@ SilverStripe\View\SSViewer:
|
||||
themes:
|
||||
- '$public'
|
||||
- '$default'
|
||||
|
||||
# 2x container width to automatically resize images for 2K display
|
||||
Site\Extensions\ElementRows:
|
||||
container_max_width: 2280
|
||||
|
@ -1,7 +1,4 @@
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
color: $dark;
|
||||
}
|
||||
// Add your site-wide, but not content editor typography styling
|
||||
|
||||
.bg-dark {
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
@ -15,5 +12,5 @@ h1, h2, h3, h4, h5, h6,
|
||||
.typography {
|
||||
@include clearfix;
|
||||
|
||||
@import "./types/editor";
|
||||
@import "~ss-bootstrap-ui-webpack-boilerplate/src/scss/types/editor";
|
||||
}
|
||||
|
@ -14,3 +14,10 @@ $grid-gutter-height: 2rem;
|
||||
@import "~bootstrap/scss/functions";
|
||||
@import "~bootstrap/scss/variables";
|
||||
@import "~bootstrap/scss/mixins";
|
||||
|
||||
// Add your site-wide + content editor typography styling
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
color: $dark;
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
@import "../_variables";
|
||||
|
||||
@import "~ss-bootstrap-ui-webpack-boilerplate/src/scss/types/editor";
|
||||
@import "../_variables";
|
||||
@import "../_typography";
|
||||
|
||||
// Add content editor (only) typography styling
|
||||
|
50
app/src/Elements/BlockElement.php
Normal file
50
app/src/Elements/BlockElement.php
Normal file
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: tony
|
||||
* Date: 6/30/18
|
||||
* Time: 11:54 PM
|
||||
*/
|
||||
|
||||
namespace Site\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;
|
||||
}
|
||||
}
|
@ -13,7 +13,7 @@ class BlogExtension extends DataExtension
|
||||
{
|
||||
$f = $fields->dataFieldByName('ChildPages');
|
||||
if ($f) {
|
||||
$f->setConfig(GridFieldConfigBlogPost::create(100));
|
||||
$f->setConfig(GridFieldConfigBlogPost::create(75));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,29 +8,8 @@
|
||||
|
||||
namespace Site\Extensions;
|
||||
|
||||
use Sheadawson\Linkable\Forms\LinkField;
|
||||
use Sheadawson\Linkable\Models\Link;
|
||||
use SilverStripe\FontAwesome\FontAwesomeField;
|
||||
use SilverStripe\Forms\FieldList;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
|
||||
class ElementContentWidget extends DataExtension
|
||||
{
|
||||
/*private static $db = [
|
||||
'BlockIcon' => 'Varchar(255)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
'BlockLink' => Link::class,
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
{
|
||||
parent::updateCMSFields($fields);
|
||||
|
||||
$fields->addFieldsToTab('Root.Main', [
|
||||
FontAwesomeField::create('BlockIcon'),
|
||||
LinkField::create('BlockLinkID', 'Link'),
|
||||
]);
|
||||
}*/
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ class ElementImageWidget extends DataExtension
|
||||
$width = $this->getWidth();
|
||||
$height = $this->getHeight();
|
||||
|
||||
if (!$width) {
|
||||
if (!$width || $width === 'auto') {
|
||||
return $height > 0
|
||||
? $image->ScaleHeight($height)
|
||||
: $image;
|
||||
|
@ -18,7 +18,7 @@ use SilverStripe\Forms\FieldList;
|
||||
class ElementRows extends DataExtension
|
||||
{
|
||||
private static $container_max_width = 1140;
|
||||
private static $column_class = 'col-block col-md-';
|
||||
private static $column_class = 'col-block col-md';
|
||||
|
||||
private static $container_styles = [
|
||||
'container' => 'Fixed container',
|
||||
@ -27,7 +27,7 @@ class ElementRows extends DataExtension
|
||||
|
||||
private static $db = [
|
||||
'ContainerType' => 'Varchar(254)',
|
||||
'Size' => 'Enum("1,2,3,4,5,6,7,8,9,10,11,12","6")',
|
||||
'Size' => 'Enum("1,2,3,4,5,6,7,8,9,10,11,12,auto","auto")',
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
@ -63,23 +63,24 @@ class ElementRows extends DataExtension
|
||||
'Size',
|
||||
_t(
|
||||
__CLASS__.'.SIZE',
|
||||
'Column Size'
|
||||
'Column Width (max 12 cols)'
|
||||
),
|
||||
array_combine(
|
||||
array_values($sizes->enumValues()),
|
||||
[
|
||||
'8.3%',
|
||||
'16.6%',
|
||||
'25%',
|
||||
'33%',
|
||||
'41.6%',
|
||||
'50%',
|
||||
'58.3%',
|
||||
'66.4%',
|
||||
'74.7%',
|
||||
'83%',
|
||||
'91.3%',
|
||||
'100%',
|
||||
'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',
|
||||
]
|
||||
)
|
||||
);
|
||||
@ -152,7 +153,7 @@ class ElementRows extends DataExtension
|
||||
$object = $object ? $object : $this->owner;
|
||||
|
||||
if ($object->isColumn() && $object->getField('Size')) {
|
||||
return (int) $object->getField('Size');
|
||||
return $object->getField('Size');
|
||||
}
|
||||
|
||||
$parent = $object->Parent()->getOwnerPage();
|
||||
@ -172,7 +173,13 @@ class ElementRows extends DataExtension
|
||||
|
||||
if (!$object->isRoot()) {
|
||||
$size = $object->getField('Size');
|
||||
$max = $size ? $max / (self::colsNumber() / $size) : $max;
|
||||
$cols = self::colsNumber();
|
||||
|
||||
if ($size === 'auto') {
|
||||
return $size;
|
||||
}
|
||||
|
||||
$max = $size ? $max / ($cols / $size) : $max;
|
||||
$parent = $object->Parent()->getOwnerPage();
|
||||
|
||||
return $this->getColumnWidthRecursive($parent, $max);
|
||||
@ -185,9 +192,15 @@ class ElementRows extends DataExtension
|
||||
{
|
||||
$db = Config::inst()->get(self::class, 'db');
|
||||
$sizes = $db['Size'];
|
||||
$sizes = preg_replace('!Enum\("([0-9,]+)","([0-9]+)"\)!i', '$1', $sizes);
|
||||
$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);
|
||||
}
|
||||
|
||||
@ -198,10 +211,13 @@ class ElementRows extends DataExtension
|
||||
|
||||
public function ExtraClass()
|
||||
{
|
||||
return $this->owner->getField('ExtraClass')
|
||||
$object = $this->owner;
|
||||
|
||||
return $object->getField('ExtraClass')
|
||||
.(
|
||||
$this->isColumn()
|
||||
? ' '.Config::inst()->get(self::class, 'column_class').$this->owner->getField('Size')
|
||||
? ' '.Config::inst()->get(self::class, 'column_class')
|
||||
.($object->getField('Size') === 'auto' ? '' : '-'.$object->getField('Size'))
|
||||
: ''
|
||||
);
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ 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;
|
||||
@ -26,6 +27,10 @@ class SiteConfigExtension extends DataExtension
|
||||
'MapZoom' => 'Int',
|
||||
//'MapAPIKey' => 'Varchar(255)',
|
||||
'Description' => 'Varchar(255)',
|
||||
'Address' => 'Varchar(255)',
|
||||
'Suburb' => 'Varchar(255)',
|
||||
'State' => 'Varchar(255)',
|
||||
'ZipCode' => 'Varchar(6)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
@ -60,11 +65,27 @@ class SiteConfigExtension extends DataExtension
|
||||
]);
|
||||
|
||||
$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',
|
||||
|
@ -18,7 +18,7 @@ use SilverStripe\Security\Member;
|
||||
class SocialExtension extends DataExtension
|
||||
{
|
||||
private static $db = [
|
||||
'Address' => 'Varchar(255)',
|
||||
'PhoneNumber' => 'Varchar(255)',
|
||||
];
|
||||
|
||||
private static $has_one = [
|
||||
@ -28,7 +28,7 @@ class SocialExtension extends DataExtension
|
||||
'Instagram' => Link::class,
|
||||
'Twitter' => Link::class,
|
||||
'PublicEmail' => Link::class,
|
||||
'PhoneNumber' => Link::class,
|
||||
//'PhoneNumber' => Link::class,
|
||||
];
|
||||
|
||||
public function updateCMSFields(FieldList $fields)
|
||||
@ -50,11 +50,11 @@ class SocialExtension extends DataExtension
|
||||
$fields->findOrMakeTab('Root.Social');
|
||||
|
||||
$fields->addFieldsToTab('Root.Social', [
|
||||
TextField::create('PhoneNumber'),
|
||||
LinkField::create('PublicEmailID', 'Public Email')
|
||||
->setAllowedTypes(['Email']),
|
||||
LinkField::create('PhoneNumberID', 'Phone Number')
|
||||
->setAllowedTypes(['Phone']),
|
||||
TextField::create('Address'),
|
||||
/*LinkField::create('PhoneNumberID', 'Phone Number')
|
||||
->setAllowedTypes(['Phone']),*/
|
||||
]);
|
||||
|
||||
$fields->addFieldsToTab('Root.Social', $linkFields);
|
||||
|
@ -42,7 +42,7 @@ class PageController extends ContentController
|
||||
|
||||
public function ElementalArea()
|
||||
{
|
||||
if($this->CurrentElement()) {
|
||||
if ($this->CurrentElement() || $this->getAction() !== 'index') {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
39
app/src/Tasks/BrokenFilesTask.php
Normal file
39
app/src/Tasks/BrokenFilesTask.php
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Site\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,4 +1,4 @@
|
||||
<div class="content-element__content <% if $Style %>$CssStyle<% end_if %>">
|
||||
<div class="content-element__content<% if $BlockLink %> has-blockLink<% end_if %><% if $BlockIcon %> has-blockIcon<% end_if %><% if $Style %> $CssStyle<% end_if %>">
|
||||
<% if $BlockIcon %>
|
||||
<i class="content-element__icon $BlockIcon"></i>
|
||||
<% end_if %>
|
||||
@ -11,7 +11,7 @@
|
||||
</div>
|
||||
|
||||
<% if $BlockLink %>
|
||||
<a href="$BlockLink.URL" class="btn btn-default">
|
||||
<a href="$BlockLink.LinkURL" class="btn btn-default stretched-link">
|
||||
$BlockLink.Title
|
||||
</a>
|
||||
<% end_if %>
|
||||
|
@ -1,29 +1,50 @@
|
||||
<% with $SiteConfig %>
|
||||
<div class="wrapper">
|
||||
<div class="container">
|
||||
<h2>Contact Us</h2>
|
||||
<div class="field row">
|
||||
<div class="title col-sm-4">Address:</div>
|
||||
<div class="value col-sm-8">$Address</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<a href="/" class="logo2">
|
||||
<img src="$ResourcesURL('logo2.png')" alt="National Children's Alliance" />
|
||||
</a>
|
||||
|
||||
<div class="field">
|
||||
<div class="fn">$Title</div>
|
||||
<address>
|
||||
$Address<br/>
|
||||
$Suburb, $State $ZipCode
|
||||
</address>
|
||||
</div>
|
||||
|
||||
<div class="field row">
|
||||
<div class="title col-sm-4">Phone:</div>
|
||||
<div class="value col-sm-8">$PhoneNumber</div>
|
||||
<div class="field">
|
||||
T: $PhoneNumber
|
||||
</div>
|
||||
|
||||
<div class="field row">
|
||||
<div class="title col-sm-4">Email:</div>
|
||||
<div class="value col-sm-8">$PublicEmail</div>
|
||||
<% if $PublicEmail %>
|
||||
<div class="field">
|
||||
E: $PublicEmail
|
||||
</div>
|
||||
<% end_if %>
|
||||
|
||||
<% include Objects\SocialLinks %>
|
||||
</div>
|
||||
<div class="col-sm-6 text-right">
|
||||
<a href="/" target="_blank" class="external-link">
|
||||
<img src="$ResourcesURL('logo-alliance.png')" alt="National Children's Alliance" />
|
||||
</a>
|
||||
<a href="/" target="_blank" class="external-link">
|
||||
<img src="$ResourcesURL('logo-regional.png')" alt="National Children's Alliance" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="copyright footer">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="text-right hotline">
|
||||
Child Abuse Hotline <a href="calto:+18003423720" class="tel">1-800-342-3720</a>
|
||||
</div>
|
||||
<%-- div class="row">
|
||||
<div class="col-sm-6">
|
||||
Copyright © {$Top.CurrentTime.Format("Y")} {$Title} All rights reserved.
|
||||
</div>
|
||||
@ -35,7 +56,7 @@
|
||||
<a href="$Sitemap.Link">$Sitemap.Title</a>
|
||||
<% end_if %>
|
||||
</div>
|
||||
</div>
|
||||
</div --%>
|
||||
</div>
|
||||
</div>
|
||||
<% end_with %>
|
||||
|
@ -1,8 +1,17 @@
|
||||
<div class="element">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<div class="col-sm-4">
|
||||
<a id="Logo" href="/"><img src="{$ResourcesURL('logo.png')}" alt="{$SiteConfig.Title}" /></a>
|
||||
</div>
|
||||
<div class="col-sm-6 text-right">
|
||||
<div class="col-sm-8 text-right">
|
||||
<div class="btn-group btn-group-lg" role="group">
|
||||
<a href="#" class="btn btn-success">Contact</a>
|
||||
<a href="#" class="btn btn-warning">Donate</a>
|
||||
<a href="#" class="btn btn-secondary">
|
||||
<i class="fas fa-search"></i>
|
||||
<span class="sr-only">Search</span>
|
||||
</a>
|
||||
</div>
|
||||
<% with $SiteConfig %>
|
||||
<% if $PhoneNumber %>
|
||||
<span class="phone-number">
|
||||
@ -18,9 +27,9 @@
|
||||
<%-- if $SearchForm %>
|
||||
<div id="SearchFormContainer">$SearchForm</div>
|
||||
<% end_if --%>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% if $SiteConfig.Navigation %>
|
||||
<% include Navigation Navigation=$SiteConfig.Navigation, NavID="Navigation" %>
|
||||
<% end_if %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<nav id="{$NavID}" class="navbar navbar-expand-lg navbar-light bg-light dropdown-hover">
|
||||
<nav id="{$NavID}" class="navbar navbar-expand-lg dropdown-hover">
|
||||
<button
|
||||
class="navbar-toggler"
|
||||
type="button"
|
||||
@ -12,7 +12,7 @@
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="{$NavID}Content">
|
||||
<ul class="navbar-nav mr-auto w-100 nav-fill">
|
||||
<ul class="navbar-nav mr-auto w-100 justify-content-between">
|
||||
<% loop $Navigation %>
|
||||
<% include NavItem %>
|
||||
<% end_loop %>
|
||||
|
@ -4,34 +4,42 @@
|
||||
$Video.EmbedHTML.RAW
|
||||
</div>
|
||||
<% else %>
|
||||
<% if $PageLink %><a href="$PageLink.Link" title="$PageLink.MenuTitle.XML" class="btn-primary"><% end_if %>
|
||||
|
||||
<% if $Image %>
|
||||
<span class="img">
|
||||
<img class="d-block w-100" src="$Image.Fill(1200,600).URL" alt="<% if $Headline %>$Headline<% end_if %>">
|
||||
<img class="d-block w-100" src="$Image.Fill(1400,650).URL" alt="<% if $Headline %>$Headline<% end_if %>">
|
||||
</span>
|
||||
<% end_if %>
|
||||
<% if $PageLink %></a><% end_if %>
|
||||
<% end_if %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Content || $Headline || $Description || $PageLinkID %>
|
||||
<div class="carousel-caption">
|
||||
|
||||
<div class="carousel-caption-container">
|
||||
<% if $Headline %><h2 class="carousel-title">$Headline</h2><% end_if %>
|
||||
<% if $Content %>
|
||||
<div class="carousel-content typography">$Content</div>
|
||||
<% else %>
|
||||
<% if $Description %><p class="carousel-content">$Description</p><% end_if %>
|
||||
<% end_if %>
|
||||
<% if $PageLinkID %>
|
||||
<p>
|
||||
<a href="$PageLink.Link" title="$PageLink.MenuTitle.XML" class="btn btn-default btn-lg">
|
||||
<i class="fas fa-bars"></i>
|
||||
<%t Dynamic\FlexSlider\ORM\FlexSlider.LEARN_MORE "Learn more" %>
|
||||
<% if $SlideLinkID %>
|
||||
<% with $SlideLink %>
|
||||
<a href="$LinkURL" title="$Title.XML" class="stretched-link">
|
||||
<span class="sr-only">$Title</span>
|
||||
</a>
|
||||
</p>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
||||
<% end_if %>
|
||||
<% end_if %>
|
||||
|
||||
<% if $Content || $Headline || $Description || $SlideLinkID %>
|
||||
<div class="carousel-caption container">
|
||||
<div class="carousel-caption-container typography col-md-6">
|
||||
<% 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 %>
|
||||
<div class="text-right">
|
||||
<a href="$LinkURL" title="$Title.XML" class="slide-link">
|
||||
$Title »
|
||||
</a>
|
||||
</div>
|
||||
<% end_with %>
|
||||
<% end_if %>
|
||||
</div>
|
||||
</div>
|
||||
<% end_if %>
|
@ -1,9 +1,9 @@
|
||||
<% with $SearchResults %>
|
||||
<div id="PageContainer" class="page{$CSSClass} pageSearch action{$Action}">
|
||||
<div class="page-content">
|
||||
<h1 class="page-header container no-elements">$Title</h1>
|
||||
<div class="page-content $Top.DefaultContainer">
|
||||
<div class="element">
|
||||
<h1 class="h2 page-header no-elements">$Title</h1>
|
||||
|
||||
<div class="page-content">
|
||||
<% if $Results %>
|
||||
<div id="SearchAccordion{$ID}">
|
||||
<% loop $Results %>
|
||||
@ -36,7 +36,7 @@
|
||||
<% end_loop %>
|
||||
</div>
|
||||
<% else %>
|
||||
<h2>Nothing was found.</h2>
|
||||
<h3>Nothing was found.</h3>
|
||||
<% end_if %>
|
||||
</div>
|
||||
|
||||
|
@ -9,8 +9,10 @@
|
||||
<% include First %>
|
||||
|
||||
<div class="wrapper">
|
||||
<header id="Header" class="container">
|
||||
<header id="Header">
|
||||
<div class="$DefaultContainer">
|
||||
<% include Header %>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="MainContent" data-ajax-region="LayoutAjax">
|
||||
@ -48,10 +50,11 @@
|
||||
<%-- Require CSS+JS from /public/resourses/[js,css]/[ClassName].[js,css] --%>
|
||||
$AutoRequirements($ClassName).RAW
|
||||
|
||||
<%-- Mapbox --%>
|
||||
<%-- 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" />
|
||||
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.48.0/mapbox-gl.css" rel="stylesheet" />--%>
|
||||
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i|Roboto:400,400i,700,700i&display=swap&subset=latin-ext" rel="stylesheet" />
|
||||
<%-- place extra requirements after this line --%>
|
||||
<div class="extra-code extra-code-site">
|
||||
$SiteConfig.ExtraCode
|
||||
|
@ -3,21 +3,27 @@
|
||||
|
||||
<div class="page-content">
|
||||
<div class="element">
|
||||
<div class="container">
|
||||
<div class="container blog-post-list">
|
||||
|
||||
<% if $ArchiveYear %>
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.Archive 'Archive' %>:
|
||||
<span class="action-title"><%t SilverStripe\\Blog\\Model\\Blog.Archive 'Archive' %>:</span>
|
||||
<% if $ArchiveDay %>
|
||||
<h2 class="subcategory">$ArchiveDate.Nice</h2>
|
||||
<h2 class="content-element__title subcategory">$ArchiveDate.Nice</h2>
|
||||
<% else_if $ArchiveMonth %>
|
||||
<h2 class="subcategory">$ArchiveDate.format('F, Y')</h2>
|
||||
<h2 class="content-element__title subcategory">$ArchiveDate.format('F, Y')</h2>
|
||||
<% else %>
|
||||
<h2 class="subcategory">$ArchiveDate.format('Y')</h2>
|
||||
<h2 class="content-element__title subcategory">$ArchiveDate.format('Y')</h2>
|
||||
<% end_if %>
|
||||
<% else_if $CurrentTag %>
|
||||
<h2 class="subcategory"><%t SilverStripe\\Blog\\Model\\Blog.Tag 'Tag' %>: $CurrentTag.Title</h2>
|
||||
<h2 class="content-element__title subcategory">
|
||||
<span class="action-title"><%t SilverStripe\\Blog\\Model\\Blog.Tag 'Tag' %>:</span>
|
||||
$CurrentTag.Title
|
||||
</h2>
|
||||
<% else_if $CurrentCategory %>
|
||||
<h2 class="subcategory"><%t SilverStripe\\Blog\\Model\\Blog.Category 'Category' %>: $CurrentCategory.Title</h2>
|
||||
<h2 class="content-element__title subcategory">
|
||||
<span class="action-title"><%t SilverStripe\\Blog\\Model\\Blog.Category 'Category' %>:</span>
|
||||
$CurrentCategory.Title
|
||||
</h2>
|
||||
<% end_if %>
|
||||
|
||||
<% if $PaginatedList.Exists %>
|
||||
@ -29,7 +35,9 @@
|
||||
<% end_loop %>
|
||||
</div>
|
||||
<% else %>
|
||||
<p><%t SilverStripe\\Blog\\Model\\Blog.NoPosts 'There are no posts' %></p>
|
||||
<p class="alert alert-info">
|
||||
<%t SilverStripe\\Blog\\Model\\Blog.NoPosts 'There are no posts' %>
|
||||
</p>
|
||||
<% end_if %>
|
||||
|
||||
<% with $PaginatedList %>
|
||||
|
18
app/templates/Site/Elements/BlockElement.ss
Normal file
18
app/templates/Site/Elements/BlockElement.ss
Normal file
@ -0,0 +1,18 @@
|
||||
<div class="content-element__content<% if $BlockLink %> has-blockLink<% end_if %><% if $BlockIcon %> has-blockIcon<% end_if %><% if $Style %> $CssStyle<% end_if %>">
|
||||
<% if $BlockIcon %>
|
||||
<i class="content-element__icon $BlockIcon"></i>
|
||||
<% end_if %>
|
||||
<% if $ShowTitle %>
|
||||
<h2 class="content-element__title">$Title</h2>
|
||||
<% end_if %>
|
||||
|
||||
<div class="typography">
|
||||
$HTML
|
||||
</div>
|
||||
|
||||
<% if $BlockLink %>
|
||||
<a href="$BlockLink.LinkURL" class="btn btn-default stretched-link">
|
||||
$BlockLink.Title
|
||||
</a>
|
||||
<% end_if %>
|
||||
</div>
|
@ -1,9 +1,44 @@
|
||||
# Redirect to HTTPS
|
||||
#RewriteEngine On
|
||||
#RewriteCond %{HTTPS} off
|
||||
#RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
|
||||
# Redirect to WWW
|
||||
#RewriteCond %{HTTP_HOST} !^www\. [NC]
|
||||
#RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
|
||||
# SPDY protocol
|
||||
#Header add Alternate-Protocol "443:npn-spdy/3"
|
||||
|
||||
# Secure cookies
|
||||
#Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
|
||||
#Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=strict
|
||||
# Apache < 2.2.4
|
||||
# Header set Set-Cookie HttpOnly;Secure
|
||||
|
||||
# Submit domain to https://hstspreload.org/
|
||||
#Header add Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
|
||||
|
||||
# XSS-protection
|
||||
#Header add X-Frame-Options "SAMEORIGIN"
|
||||
#Header add X-Content-Type-Options "nosniff"
|
||||
#Header add X-XSS-Protection "1; mode=block"
|
||||
#Header add Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' *.oppwa.com *.qit.nu *.pinterest.com *.facebook.net *.facebook.com *.addthisedge.com *.addthis.com *.jotform.com *.jotform.us *.getclicky.com *.placehold.it *.ytimg.com *.googlevideo.com *.youtube.com *.youtu.be *.gstatic.com *.googleapis.com *.google-analytics.com cdnjs.cloudflare.com assets.zendesk.com yastatic.net *.doubleclick.net *.cloudflare.com *.ggpht.com *.google.com *.googleadservices.com *.linkedin.com *.vimeo.com *.aweber.com *.simpli.fi omg.mylocalreviewsite.com *.windguru.cz; child-src 'self' *.oppwa.com *.qit.nu *.pinterest.com *.facebook.net *.facebook.com *.addthisedge.com *.addthis.com *.jotform.com *.jotform.us *.placehold.it *.gstatic.com *.ytimg.com *.googlevideo.com *.youtu.be *.youtube.com assets.zendesk.com tautt.zendesk.com *.doubleclick.net *.cloudflare.com *.ggpht.com *.google.com *.googleadservices.com *.linkedin.com *.vimeo.com *.aweber.com *.simpli.fi omg.mylocalreviewsite.com; object-src 'self' *.oppwa.com *.qit.nu *.pinterest.com *.facebook.net *.facebook.com *.addthisedge.com *.addthis.com *.jotform.com *.jotform.us *.placehold.it *.gstatic.com *.googlevideo.com *.youtube.com *.youtu.be *.cloudflare.com *.ytimg.com *.ggpht.com *.doubleclick.net *.google.com *.googleadservices.com *.linkedin.com *.vimeo.com *.aweber.com"
|
||||
|
||||
|
||||
# Hide software headers
|
||||
Header unset x-powered-by
|
||||
ServerSignature Off
|
||||
#ServerTokens Prod
|
||||
|
||||
<IfModule php5_module>
|
||||
php_flag expose_php Off
|
||||
</IfModule>
|
||||
|
||||
<IfModule lsapi_module>
|
||||
php_flag expose_php Off
|
||||
</IfModule>
|
||||
|
||||
### SILVERSTRIPE START ###
|
||||
|
||||
# Deny access to templates (but allow from localhost)
|
||||
|
95
public/htaccess-dist
Normal file
95
public/htaccess-dist
Normal file
@ -0,0 +1,95 @@
|
||||
# Redirect to HTTPS
|
||||
#RewriteEngine On
|
||||
#RewriteCond %{HTTPS} off
|
||||
#RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
|
||||
# Redirect to WWW
|
||||
#RewriteCond %{HTTP_HOST} !^www\. [NC]
|
||||
#RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
|
||||
# SPDY protocol
|
||||
#Header add Alternate-Protocol "443:npn-spdy/3"
|
||||
|
||||
# Secure cookies
|
||||
#Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
|
||||
#Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=strict
|
||||
# Apache < 2.2.4
|
||||
# Header set Set-Cookie HttpOnly;Secure
|
||||
|
||||
# Submit domain to https://hstspreload.org/
|
||||
#Header add Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
|
||||
|
||||
# XSS-protection
|
||||
#Header add X-Frame-Options "SAMEORIGIN"
|
||||
#Header add X-Content-Type-Options "nosniff"
|
||||
#Header add X-XSS-Protection "1; mode=block"
|
||||
#Header add Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' *.oppwa.com *.qit.nu *.pinterest.com *.facebook.net *.facebook.com *.addthisedge.com *.addthis.com *.jotform.com *.jotform.us *.getclicky.com *.placehold.it *.ytimg.com *.googlevideo.com *.youtube.com *.youtu.be *.gstatic.com *.googleapis.com *.google-analytics.com cdnjs.cloudflare.com assets.zendesk.com yastatic.net *.doubleclick.net *.cloudflare.com *.ggpht.com *.google.com *.googleadservices.com *.linkedin.com *.vimeo.com *.aweber.com *.simpli.fi omg.mylocalreviewsite.com *.windguru.cz; child-src 'self' *.oppwa.com *.qit.nu *.pinterest.com *.facebook.net *.facebook.com *.addthisedge.com *.addthis.com *.jotform.com *.jotform.us *.placehold.it *.gstatic.com *.ytimg.com *.googlevideo.com *.youtu.be *.youtube.com assets.zendesk.com tautt.zendesk.com *.doubleclick.net *.cloudflare.com *.ggpht.com *.google.com *.googleadservices.com *.linkedin.com *.vimeo.com *.aweber.com *.simpli.fi omg.mylocalreviewsite.com; object-src 'self' *.oppwa.com *.qit.nu *.pinterest.com *.facebook.net *.facebook.com *.addthisedge.com *.addthis.com *.jotform.com *.jotform.us *.placehold.it *.gstatic.com *.googlevideo.com *.youtube.com *.youtu.be *.cloudflare.com *.ytimg.com *.ggpht.com *.doubleclick.net *.google.com *.googleadservices.com *.linkedin.com *.vimeo.com *.aweber.com"
|
||||
|
||||
|
||||
# Hide software headers
|
||||
Header unset x-powered-by
|
||||
ServerSignature Off
|
||||
#ServerTokens Prod
|
||||
|
||||
<IfModule php5_module>
|
||||
php_flag expose_php Off
|
||||
</IfModule>
|
||||
|
||||
<IfModule lsapi_module>
|
||||
php_flag expose_php Off
|
||||
</IfModule>
|
||||
|
||||
### 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 ###
|
@ -1,4 +1,14 @@
|
||||
; Hide PHP version
|
||||
expose_php = Off
|
||||
|
||||
; Session secure flag
|
||||
session.cookie_httponly = true
|
||||
session.cookie_secure = true
|
||||
session.gc_maxlifetime = 1440
|
||||
|
||||
memory_limit = 128M
|
||||
|
||||
display_errors = Off
|
||||
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
|
||||
|
||||
; File uploads
|
||||
@ -9,5 +19,14 @@ post_max_size = 64M
|
||||
; Required by Vulcan\Seo extension
|
||||
allow_url_fopen = On
|
||||
|
||||
allow_url_include = Off
|
||||
asp_tags = Off
|
||||
enable_dl = On
|
||||
|
||||
max_execution_time = 400
|
||||
max_input_time = 600
|
||||
max_input_vars = 8000
|
||||
|
||||
;zlib.output_compression = Off
|
||||
; Set development environment certificate pem (cat your-self-signed-crt.key your-self-signed-crt.crt > /etc/ssl/certs/localhost.pem)
|
||||
; openssl.cafile=/etc/ssl/certs/localhost.pem
|
32
public/php.ini
Normal file
32
public/php.ini
Normal file
@ -0,0 +1,32 @@
|
||||
; Hide PHP version
|
||||
expose_php = Off
|
||||
|
||||
; Session secure flag
|
||||
session.cookie_httponly = true
|
||||
session.cookie_secure = true
|
||||
session.gc_maxlifetime = 1440
|
||||
|
||||
memory_limit = 128M
|
||||
|
||||
display_errors = Off
|
||||
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
|
||||
|
||||
; File uploads
|
||||
file_uploads = On
|
||||
upload_max_filesize = 32M
|
||||
post_max_size = 64M
|
||||
|
||||
; Required by Vulcan\Seo extension
|
||||
allow_url_fopen = On
|
||||
|
||||
allow_url_include = Off
|
||||
asp_tags = Off
|
||||
enable_dl = On
|
||||
|
||||
max_execution_time = 400
|
||||
max_input_time = 600
|
||||
max_input_vars = 8000
|
||||
|
||||
;zlib.output_compression = Off
|
||||
; Set development environment certificate pem (cat your-self-signed-crt.key your-self-signed-crt.crt > /etc/ssl/certs/localhost.pem)
|
||||
; openssl.cafile=/etc/ssl/certs/localhost.pem
|
Loading…
Reference in New Issue
Block a user